useLokiLabels.test.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { renderHook, act } from 'react-hooks-testing-library';
  2. import LanguageProvider from 'app/plugins/datasource/loki/language_provider';
  3. import { useLokiLabels } from './useLokiLabels';
  4. import { DataSourceStatus } from '@grafana/ui/src/types/datasource';
  5. describe('useLokiLabels hook', () => {
  6. it('should refresh labels', async () => {
  7. const datasource = {
  8. metadataRequest: () => ({ data: { data: [] as any[] } }),
  9. };
  10. const languageProvider = new LanguageProvider(datasource);
  11. const logLabelOptionsMock = ['Holy mock!'];
  12. languageProvider.refreshLogLabels = () => {
  13. languageProvider.logLabelOptions = logLabelOptionsMock;
  14. return Promise.resolve();
  15. };
  16. const { result, waitForNextUpdate } = renderHook(() =>
  17. useLokiLabels(languageProvider, true, [], DataSourceStatus.Connected, DataSourceStatus.Connected)
  18. );
  19. act(() => result.current.refreshLabels());
  20. expect(result.current.logLabelOptions).toEqual([]);
  21. await waitForNextUpdate();
  22. expect(result.current.logLabelOptions).toEqual(logLabelOptionsMock);
  23. });
  24. it('should force refresh labels after a disconnect', () => {
  25. const datasource = {
  26. metadataRequest: () => ({ data: { data: [] as any[] } }),
  27. };
  28. const languageProvider = new LanguageProvider(datasource);
  29. languageProvider.refreshLogLabels = jest.fn();
  30. renderHook(() =>
  31. useLokiLabels(languageProvider, true, [], DataSourceStatus.Connected, DataSourceStatus.Disconnected)
  32. );
  33. expect(languageProvider.refreshLogLabels).toBeCalledTimes(1);
  34. expect(languageProvider.refreshLogLabels).toBeCalledWith(true);
  35. });
  36. it('should not force refresh labels after a connect', () => {
  37. const datasource = {
  38. metadataRequest: () => ({ data: { data: [] as any[] } }),
  39. };
  40. const languageProvider = new LanguageProvider(datasource);
  41. languageProvider.refreshLogLabels = jest.fn();
  42. renderHook(() =>
  43. useLokiLabels(languageProvider, true, [], DataSourceStatus.Disconnected, DataSourceStatus.Connected)
  44. );
  45. expect(languageProvider.refreshLogLabels).not.toBeCalled();
  46. });
  47. });