123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import { FieldConfig, FieldConfigSource, PanelPlugin, standardFieldConfigEditorRegistry } from '@grafana/data';
- import { setOptionImmutably, supportsDataQuery, updateDefaultFieldConfigValue } from './utils';
- describe('standardFieldConfigEditorRegistry', () => {
- const dummyConfig: FieldConfig = {
- displayName: 'Hello',
- min: 10,
- max: 10,
- decimals: 10,
- thresholds: {} as any,
- noValue: 'no value',
- unit: 'km/s',
- links: {} as any,
- };
- it('make sure all fields have a valid name', () => {
- standardFieldConfigEditorRegistry.list().forEach((v) => {
- if (!dummyConfig.hasOwnProperty(v.id)) {
- fail(`Registry uses unknown property: ${v.id}`);
- }
- });
- });
- });
- describe('supportsDataQuery', () => {
- describe('when called with plugin that supports queries', () => {
- it('then it should return true', () => {
- const plugin = { meta: { skipDataQuery: false } } as unknown as PanelPlugin;
- expect(supportsDataQuery(plugin)).toBe(true);
- });
- });
- describe('when called with plugin that does not support queries', () => {
- it('then it should return false', () => {
- const plugin = { meta: { skipDataQuery: true } } as unknown as PanelPlugin;
- expect(supportsDataQuery(plugin)).toBe(false);
- });
- });
- describe('when called without skipDataQuery', () => {
- it('then it should return false', () => {
- const plugin = { meta: {} } as unknown as PanelPlugin;
- expect(supportsDataQuery(plugin)).toBe(false);
- });
- });
- describe('when called without plugin', () => {
- it('then it should return false', () => {
- expect(supportsDataQuery(undefined)).toBe(false);
- });
- });
- });
- describe('updateDefaultFieldConfigValue', () => {
- it.each`
- property | isCustom | newValue | expected
- ${'a'} | ${false} | ${2} | ${{ a: 2, b: { c: 'nested default' }, custom: { d: 1, e: { f: 'nested custom' } } }}
- ${'b.c'} | ${false} | ${'nested default updated'} | ${{ a: 1, b: { c: 'nested default updated' }, custom: { d: 1, e: { f: 'nested custom' } } }}
- ${'a'} | ${false} | ${undefined} | ${{ b: { c: 'nested default' }, custom: { d: 1, e: { f: 'nested custom' } } }}
- ${'b'} | ${false} | ${undefined} | ${{ a: 1, custom: { d: 1, e: { f: 'nested custom' } } }}
- ${'b.c'} | ${false} | ${undefined} | ${{ a: 1, b: {}, custom: { d: 1, e: { f: 'nested custom' } } }}
- ${'d'} | ${true} | ${2} | ${{ a: 1, b: { c: 'nested default' }, custom: { d: 2, e: { f: 'nested custom' } } }}
- ${'e.f'} | ${true} | ${'nested custom updated'} | ${{ a: 1, b: { c: 'nested default' }, custom: { d: 1, e: { f: 'nested custom updated' } } }}
- ${'d'} | ${true} | ${undefined} | ${{ a: 1, b: { c: 'nested default' }, custom: { e: { f: 'nested custom' } } }}
- ${'e'} | ${true} | ${undefined} | ${{ a: 1, b: { c: 'nested default' }, custom: { d: 1 } }}
- ${'e.f'} | ${true} | ${undefined} | ${{ a: 1, b: { c: 'nested default' }, custom: { d: 1, e: {} } }}
- `(
- 'when updating property:$property (is custom: $isCustom) with $newValue',
- ({ property, isCustom, newValue, expected }) => {
- const config = {
- defaults: {
- a: 1,
- b: {
- c: 'nested default',
- },
- custom: {
- d: 1,
- e: { f: 'nested custom' },
- },
- },
- overrides: [],
- };
- expect(updateDefaultFieldConfigValue(config as FieldConfigSource, property, newValue, isCustom).defaults).toEqual(
- expected
- );
- }
- );
- });
- describe('setOptionImmutably', () => {
- it.each`
- source | path | value | expected
- ${{}} | ${'a'} | ${1} | ${{ a: 1 }}
- ${{}} | ${'a.b.c'} | ${[1, 2]} | ${{ a: { b: { c: [1, 2] } } }}
- ${{ a: {} }} | ${'a.b.c'} | ${[1, 2]} | ${{ a: { b: { c: [1, 2] } } }}
- ${{ b: {} }} | ${'a.b.c'} | ${[1, 2]} | ${{ a: { b: { c: [1, 2] } }, b: {} }}
- ${{ a: { b: { c: 3 } } }} | ${'a.b.c'} | ${[1, 2]} | ${{ a: { b: { c: [1, 2] } } }}
- ${{}} | ${'a.b[2]'} | ${'x'} | ${{ a: { b: [undefined, undefined, 'x'] } }}
- ${{}} | ${'a[0]'} | ${1} | ${{ a: [1] }}
- ${{}} | ${'a[0].b.c'} | ${1} | ${{ a: [{ b: { c: 1 } }] }}
- ${{ a: [{ b: 1 }] }} | ${'a[0].c'} | ${2} | ${{ a: [{ b: 1, c: 2 }] }}
- `('property value:${value', ({ source, path, value, expected }) => {
- expect(setOptionImmutably(source, path, value)).toEqual(expected);
- });
- it('does not mutate object under a path', () => {
- const input = { a: { b: { c: { d: 1 }, e: { f: 1 } } }, aa: 1 };
- const result = setOptionImmutably(input, 'a.b.c', { d: 2 });
- expect(input.a).not.toEqual(result.a);
- expect(input.aa).toEqual(result.aa);
- expect(input.a.b).not.toEqual(result.a.b);
- expect(input.a.b.c).not.toEqual(result.a.b.c);
- expect(input.a.b.e).toEqual(result.a.b.e);
- });
- });
|