useLokiLabels.test.ts 2.5 KB

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