blob: b5f9b4fdcf411051befdb9fbe97293c1f83a561e [file] [log] [blame]
import { ChartProps } from '@superset-ui/core/src';
const RAW_FORM_DATA = {
some_field: 1,
};
const RAW_DATASOURCE = {
column_formats: { test: '%s' },
};
const QUERY_DATA = { data: {} };
const QUERIES_DATA = [QUERY_DATA];
describe('ChartProps', () => {
it('exists', () => {
expect(ChartProps).toBeDefined();
});
describe('new ChartProps({})', () => {
it('returns new instance', () => {
const props = new ChartProps({
width: 800,
height: 600,
formData: RAW_FORM_DATA,
queriesData: QUERIES_DATA,
});
expect(props).toBeInstanceOf(ChartProps);
});
it('processes formData and datasource to convert field names to camelCase', () => {
const props = new ChartProps({
width: 800,
height: 600,
datasource: RAW_DATASOURCE,
formData: RAW_FORM_DATA,
queriesData: QUERIES_DATA,
});
expect(props.formData.someField as number).toEqual(1);
expect(props.datasource.columnFormats).toEqual(RAW_DATASOURCE.column_formats);
expect(props.rawFormData).toEqual(RAW_FORM_DATA);
expect(props.rawDatasource).toEqual(RAW_DATASOURCE);
});
});
describe('ChartProps.createSelector()', () => {
const selector = ChartProps.createSelector();
it('returns a selector function', () => {
expect(selector).toBeInstanceOf(Function);
});
it('selector returns previous chartProps if all input fields do not change', () => {
const props1 = selector({
width: 800,
height: 600,
datasource: RAW_DATASOURCE,
formData: RAW_FORM_DATA,
queriesData: QUERIES_DATA,
});
const props2 = selector({
width: 800,
height: 600,
datasource: RAW_DATASOURCE,
formData: RAW_FORM_DATA,
queriesData: QUERIES_DATA,
});
expect(props1).toBe(props2);
});
it('selector returns a new chartProps if some input fields change', () => {
const props1 = selector({
width: 800,
height: 600,
datasource: RAW_DATASOURCE,
formData: RAW_FORM_DATA,
queriesData: QUERIES_DATA,
});
const props2 = selector({
width: 800,
height: 600,
datasource: RAW_DATASOURCE,
formData: { new_field: 3 },
queriesData: QUERIES_DATA,
});
const props3 = selector({
width: 800,
height: 600,
datasource: RAW_DATASOURCE,
formData: RAW_FORM_DATA,
queriesData: QUERIES_DATA,
});
expect(props1).not.toBe(props2);
expect(props1).not.toBe(props3);
});
});
});