qlik-oss/picasso.js

View on GitHub
plugins/q/src/scales/qTime/__tests__/qTime.spec.js

Summary

Maintainability
A
2 hrs
Test Coverage
import qTime from '..';
import tickGen from './tickGen';
 
describe('Scale - qTime', () => {
let values;
let settings;
 
beforeEach(() => {
Similar blocks of code found in 2 locations. Consider refactoring.
values = [
{
qTags: ['$year'],
qTicks: tickGen(1, 1, 'Y'),
},
{
qTags: ['$quarter'],
qTicks: tickGen(4, 4, 'Q'),
},
{
qTags: ['$week'],
qTicks: tickGen(52, 1, 'W'),
},
{
qTags: ['$day'],
qTicks: tickGen(30, 1, ''),
},
];
 
settings = {
values,
maxWidth: 10000, // Omit width as a limiter
measureText: ({ text }) => ({ width: text.length }),
};
});
 
it('should return a linearly interpolated value', () => {
settings.min = 10;
settings.max = 20;
const scale = qTime(settings);
 
expect(scale(10)).to.equal(0);
expect(scale(15)).to.equal(0.5);
expect(scale(20)).to.equal(1);
});
 
it('should handle NaN value', () => {
settings.min = 10;
settings.max = 20;
const scale = qTime(settings);
 
expect(scale(undefined)).to.be.NaN;
});
 
describe('min/max', () => {
it('should derive min/max from data fields', () => {
const data = {
fields: [{ min: () => 10, max: () => 20 }],
};
 
const i = qTime(settings, data);
expect(i.min()).to.equal(10);
expect(i.max()).to.equal(20);
});
 
it('should use min/max from settings', () => {
settings.min = 10;
settings.max = 20;
 
const i = qTime(settings);
expect(i.min()).to.equal(10);
expect(i.max()).to.equal(20);
});
});
 
describe('ticks', () => {
it('should generate outer level with minor', () => {
settings.level = 'outer';
settings.maxWidth = 200;
 
const ticks = qTime(settings).ticks({});
 
expect(ticks).to.be.of.length(5);
expect(ticks[0]).to.deep.include({ label: 'Y0', isMinor: false });
expect(ticks[1]).to.deep.include({ label: 'Q0', isMinor: true });
expect(ticks[2]).to.deep.include({ label: 'Q1', isMinor: true });
expect(ticks[3]).to.deep.include({ label: 'Q2', isMinor: true });
expect(ticks[4]).to.deep.include({ label: 'Q3', isMinor: true });
});
 
it('should generate inner level without minor', () => {
settings.level = 'inner';
settings.maxWidth = 200;
 
const ticks = qTime(settings).ticks({});
 
expect(ticks).to.be.of.length(4);
expect(ticks[0]).to.deep.include({ label: 'Q0', isMinor: false });
expect(ticks[1]).to.deep.include({ label: 'Q1', isMinor: false });
expect(ticks[2]).to.deep.include({ label: 'Q2', isMinor: false });
expect(ticks[3]).to.deep.include({ label: 'Q3', isMinor: false });
});
});
});