import React from 'react'; import { mount } from 'enzyme'; import { InfluxLogsQueryField, pairsAreValid } from './InfluxLogsQueryField'; import { InfluxDatasourceMock } from '../datasource.mock'; import InfluxDatasource from '../datasource'; import { InfluxQuery } from '../types'; import { ButtonCascader } from '@grafana/ui'; import { KeyValuePair } from '../../../../features/explore/AdHocFilterField'; describe('pairsAreValid()', () => { describe('when all pairs are fully defined', () => { it('should return true', () => { const pairs = [ { key: 'a', operator: '=', value: '1', }, { key: 'b', operator: '!=', value: '2', }, ]; expect(pairsAreValid(pairs as any)).toBe(true); }); }); describe('when no pairs are defined at all', () => { it('should return true', () => { expect(pairsAreValid([])).toBe(true); }); }); describe('when pairs are undefined', () => { it('should return true', () => { expect(pairsAreValid((undefined as unknown) as KeyValuePair[])).toBe(true); }); }); describe('when one or more pairs are only partially defined', () => { it('should return false', () => { const pairs = [ { key: 'a', operator: undefined, value: '1', }, { key: 'b', operator: '!=', value: '2', }, ]; expect(pairsAreValid(pairs as any)).toBe(false); }); }); }); describe('InfluxLogsQueryField', () => { it('should load and show correct measurements and fields in cascader', async () => { const wrapper = getInfluxLogsQueryField(); // Looks strange but we do async stuff in didMount and this will push the stack at the end of eval loop, effectively // waiting for the didMount to finish. await new Promise((resolve) => setImmediate(resolve)); wrapper.update(); const cascader = wrapper.find(ButtonCascader); expect(cascader.prop('options')).toEqual([ { label: 'logs', value: 'logs', children: [{ label: 'description', value: 'description', children: [] }] }, ]); }); }); function getInfluxLogsQueryField(props?: any) { const datasource: InfluxDatasource = new InfluxDatasourceMock( props?.measurements || { logs: [{ name: 'description', type: 'string' }], } ) as any; const defaultProps = { datasource, history: [] as any[], onRunQuery: () => {}, onChange: (query: InfluxQuery) => {}, query: { refId: '', } as InfluxQuery, }; return mount( ); }