PanelQueryState.test.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { toDataQueryError, PanelQueryState } from './PanelQueryState';
  2. import { MockDataSourceApi } from 'test/mocks/datasource_srv';
  3. import { DataQueryResponse } from '@grafana/ui';
  4. import { getQueryOptions } from 'test/helpers/getQueryOptions';
  5. describe('PanelQueryState', () => {
  6. it('converts anythign to an error', () => {
  7. let err = toDataQueryError(undefined);
  8. expect(err.message).toEqual('Query error');
  9. err = toDataQueryError('STRING ERRROR');
  10. expect(err.message).toEqual('STRING ERRROR');
  11. err = toDataQueryError({ message: 'hello' });
  12. expect(err.message).toEqual('hello');
  13. });
  14. it('keeps track of running queries', async () => {
  15. const state = new PanelQueryState();
  16. expect(state.isRunning()).toBeFalsy();
  17. let hasRun = false;
  18. const dsRunner = new Promise<DataQueryResponse>((resolve, reject) => {
  19. // The status should be running when we get here
  20. expect(state.isRunning()).toBeTruthy();
  21. resolve({ data: ['x', 'y'] });
  22. hasRun = true;
  23. });
  24. const ds = new MockDataSourceApi('test');
  25. ds.queryResolver = dsRunner;
  26. // should not actually run for an empty query
  27. let empty = await state.execute(ds, getQueryOptions({}));
  28. expect(state.isRunning()).toBeFalsy();
  29. expect(empty.series.length).toBe(0);
  30. expect(hasRun).toBeFalsy();
  31. empty = await state.execute(
  32. ds,
  33. getQueryOptions({ targets: [{ hide: true, refId: 'X' }, { hide: true, refId: 'Y' }, { hide: true, refId: 'Z' }] })
  34. );
  35. // should not run any hidden queries'
  36. expect(state.isRunning()).toBeFalsy();
  37. expect(empty.series.length).toBe(0);
  38. expect(hasRun).toBeFalsy();
  39. });
  40. });