graphite_query.test.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import gfunc from '../gfunc';
  2. import GraphiteQuery from '../graphite_query';
  3. import { TemplateSrvStub } from 'test/specs/helpers';
  4. describe('Graphite query model', () => {
  5. const ctx: any = {
  6. datasource: {
  7. getFuncDef: gfunc.getFuncDef,
  8. getFuncDefs: jest.fn().mockReturnValue(Promise.resolve(gfunc.getFuncDefs('1.0'))),
  9. waitForFuncDefsLoaded: jest.fn().mockReturnValue(Promise.resolve(null)),
  10. createFuncInstance: gfunc.createFuncInstance,
  11. },
  12. templateSrv: new TemplateSrvStub(),
  13. targets: [],
  14. };
  15. beforeEach(() => {
  16. ctx.target = { refId: 'A', target: 'scaleToSeconds(#A, 60)' };
  17. ctx.queryModel = new GraphiteQuery(ctx.datasource, ctx.target, ctx.templateSrv);
  18. });
  19. describe('when updating targets with nested queries', () => {
  20. beforeEach(() => {
  21. ctx.target = { refId: 'D', target: 'asPercent(#A, #C)' };
  22. ctx.targets = [
  23. { refId: 'A', target: 'first.query.count' },
  24. { refId: 'B', target: 'second.query.count' },
  25. { refId: 'C', target: 'diffSeries(#A, #B)' },
  26. { refId: 'D', target: 'asPercent(#A, #C)' },
  27. ];
  28. ctx.queryModel = new GraphiteQuery(ctx.datasource, ctx.target, ctx.templateSrv);
  29. });
  30. it('targetFull should include nested queries', () => {
  31. ctx.queryModel.updateRenderedTarget(ctx.target, ctx.targets);
  32. const targetFullExpected = 'asPercent(first.query.count, diffSeries(first.query.count, second.query.count))';
  33. expect(ctx.queryModel.target.targetFull).toBe(targetFullExpected);
  34. });
  35. it('should not hang on circular references', () => {
  36. ctx.target.target = 'asPercent(#A, #B)';
  37. ctx.targets = [{ refId: 'A', target: 'asPercent(#B, #C)' }, { refId: 'B', target: 'asPercent(#A, #C)' }];
  38. ctx.queryModel.updateRenderedTarget(ctx.target, ctx.targets);
  39. // Just ensure updateRenderedTarget() is completed and doesn't hang
  40. expect(ctx.queryModel.target.targetFull).toBeDefined();
  41. });
  42. });
  43. describe('when query seriesByTag and series ref', () => {
  44. beforeEach(() => {
  45. ctx.target = { refId: 'A', target: `group(seriesByTag('namespace=asd'), #A)` };
  46. ctx.targets = [ctx.target];
  47. ctx.queryModel = new GraphiteQuery(ctx.datasource, ctx.target, ctx.templateSrv);
  48. });
  49. it('should keep group function series ref', () => {
  50. expect(ctx.queryModel.functions[1].params[0]).toBe('#A');
  51. });
  52. });
  53. });