useLokiLabels.test.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. import { AbsoluteTimeRange } from '@grafana/data';
  6. import { makeMockLokiDatasource } from '../mocks';
  7. describe('useLokiLabels hook', () => {
  8. it('should refresh labels', async () => {
  9. const datasource = makeMockLokiDatasource({});
  10. const languageProvider = new LanguageProvider(datasource);
  11. const logLabelOptionsMock = ['Holy mock!'];
  12. const rangeMock: AbsoluteTimeRange = {
  13. from: 1560153109000,
  14. to: 1560153109000,
  15. };
  16. languageProvider.refreshLogLabels = () => {
  17. languageProvider.logLabelOptions = logLabelOptionsMock;
  18. return Promise.resolve();
  19. };
  20. const { result, waitForNextUpdate } = renderHook(() =>
  21. useLokiLabels(languageProvider, true, [], rangeMock, DataSourceStatus.Connected, DataSourceStatus.Connected)
  22. );
  23. act(() => result.current.refreshLabels());
  24. expect(result.current.logLabelOptions).toEqual([]);
  25. await waitForNextUpdate();
  26. expect(result.current.logLabelOptions).toEqual(logLabelOptionsMock);
  27. });
  28. it('should force refresh labels after a disconnect', () => {
  29. const datasource = makeMockLokiDatasource({});
  30. const rangeMock: AbsoluteTimeRange = {
  31. from: 1560153109000,
  32. to: 1560153109000,
  33. };
  34. const languageProvider = new LanguageProvider(datasource);
  35. languageProvider.refreshLogLabels = jest.fn();
  36. renderHook(() =>
  37. useLokiLabels(languageProvider, true, [], rangeMock, DataSourceStatus.Connected, DataSourceStatus.Disconnected)
  38. );
  39. expect(languageProvider.refreshLogLabels).toBeCalledTimes(1);
  40. expect(languageProvider.refreshLogLabels).toBeCalledWith(rangeMock, true);
  41. });
  42. it('should not force refresh labels after a connect', () => {
  43. const datasource = makeMockLokiDatasource({});
  44. const rangeMock: AbsoluteTimeRange = {
  45. from: 1560153109000,
  46. to: 1560153109000,
  47. };
  48. const languageProvider = new LanguageProvider(datasource);
  49. languageProvider.refreshLogLabels = jest.fn();
  50. renderHook(() =>
  51. useLokiLabels(languageProvider, true, [], rangeMock, DataSourceStatus.Disconnected, DataSourceStatus.Connected)
  52. );
  53. expect(languageProvider.refreshLogLabels).not.toBeCalled();
  54. });
  55. });