| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { renderHook, act } from 'react-hooks-testing-library';
- import LanguageProvider from 'app/plugins/datasource/loki/language_provider';
- import { useLokiSyntax } from './useLokiSyntax';
- import { CascaderOption } from 'app/plugins/datasource/loki/components/LokiQueryFieldForm';
- describe('useLokiSyntax hook', () => {
- const datasource = {
- metadataRequest: () => ({ data: { data: [] } }),
- };
- const languageProvider = new LanguageProvider(datasource);
- const logLabelOptionsMock = ['Holy mock!'];
- const logLabelOptionsMock2 = ['Mock the hell?!'];
- const logLabelOptionsMock3 = ['Oh my mock!'];
- languageProvider.refreshLogLabels = () => {
- languageProvider.logLabelOptions = logLabelOptionsMock;
- return Promise.resolve();
- };
- languageProvider.fetchLogLabels = () => {
- languageProvider.logLabelOptions = logLabelOptionsMock2;
- return Promise.resolve([]);
- };
- const activeOptionMock: CascaderOption = {
- label: '',
- value: '',
- };
- it('should provide Loki syntax when used', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useLokiSyntax(languageProvider));
- expect(result.current.syntax).toEqual(null);
- await waitForNextUpdate();
- expect(result.current.syntax).toEqual(languageProvider.getSyntax());
- });
- it('should fetch labels on first call', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useLokiSyntax(languageProvider));
- expect(result.current.isSyntaxReady).toBeFalsy();
- expect(result.current.logLabelOptions).toEqual([]);
- await waitForNextUpdate();
- expect(result.current.isSyntaxReady).toBeTruthy();
- expect(result.current.logLabelOptions).toEqual(logLabelOptionsMock2);
- });
- it('should try to fetch missing options when active option changes', async () => {
- const { result, waitForNextUpdate } = renderHook(() => useLokiSyntax(languageProvider));
- await waitForNextUpdate();
- expect(result.current.logLabelOptions).toEqual(logLabelOptionsMock2);
- languageProvider.fetchLabelValues = (key: string) => {
- languageProvider.logLabelOptions = logLabelOptionsMock3;
- return Promise.resolve();
- };
- act(() => result.current.setActiveOption([activeOptionMock]));
- await waitForNextUpdate();
- expect(result.current.logLabelOptions).toEqual(logLabelOptionsMock3);
- });
- });
|