query_ctrl.test.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { StackdriverQueryCtrl } from '../query_ctrl';
  2. describe('StackdriverQueryCtrl', () => {
  3. let ctrl;
  4. let result;
  5. beforeEach(() => {
  6. ctrl = createCtrlWithFakes();
  7. });
  8. describe('when labels are fetched', () => {
  9. beforeEach(async () => {
  10. ctrl.metricLabels = { 'metric-key-1': ['metric-value-1'] };
  11. ctrl.resourceLabels = { 'resource-key-1': ['resource-value-1'] };
  12. result = await ctrl.getGroupBys();
  13. });
  14. it('should populate group bys segments', () => {
  15. expect(result.length).toBe(3);
  16. expect(result[0].value).toBe('metric.label.metric-key-1');
  17. expect(result[1].value).toBe('resource.label.resource-key-1');
  18. expect(result[2].value).toBe('-- remove group by --');
  19. });
  20. });
  21. describe('when a group by label is selected', () => {
  22. beforeEach(async () => {
  23. ctrl.metricLabels = {
  24. 'metric-key-1': ['metric-value-1'],
  25. 'metric-key-2': ['metric-value-2'],
  26. };
  27. ctrl.resourceLabels = {
  28. 'resource-key-1': ['resource-value-1'],
  29. 'resource-key-2': ['resource-value-2'],
  30. };
  31. ctrl.target.aggregation.groupBys = ['metric.label.metric-key-1', 'resource.label.resource-key-1'];
  32. result = await ctrl.getGroupBys();
  33. });
  34. it('should not be used to populate group bys segments', () => {
  35. expect(result.length).toBe(3);
  36. expect(result[0].value).toBe('metric.label.metric-key-2');
  37. expect(result[1].value).toBe('resource.label.resource-key-2');
  38. expect(result[2].value).toBe('-- remove group by --');
  39. });
  40. });
  41. describe('when a group by is selected', () => {
  42. beforeEach(() => {
  43. const removeSegment = { fake: true, value: '-- remove group by --' };
  44. const segment = { value: 'groupby1' };
  45. ctrl.groupBySegments = [segment, removeSegment];
  46. ctrl.groupByChanged(segment);
  47. });
  48. it('should be added to group bys list', () => {
  49. expect(ctrl.target.aggregation.groupBys.length).toBe(1);
  50. });
  51. });
  52. describe('when a selected group by is removed', () => {
  53. beforeEach(() => {
  54. const removeSegment = { fake: true, value: '-- remove group by --' };
  55. const segment = { value: 'groupby1' };
  56. ctrl.groupBySegments = [segment, removeSegment];
  57. ctrl.groupByChanged(removeSegment);
  58. });
  59. it('should be added to group bys list', () => {
  60. expect(ctrl.target.aggregation.groupBys.length).toBe(0);
  61. });
  62. });
  63. });
  64. function createCtrlWithFakes() {
  65. StackdriverQueryCtrl.prototype.panelCtrl = {
  66. events: { on: () => {} },
  67. panel: { scopedVars: [], targets: [] },
  68. refresh: () => {},
  69. };
  70. StackdriverQueryCtrl.prototype.target = createTarget();
  71. StackdriverQueryCtrl.prototype.getMetricTypes = () => {
  72. return Promise.resolve();
  73. };
  74. StackdriverQueryCtrl.prototype.getLabels = () => {
  75. return Promise.resolve();
  76. };
  77. const fakeSegmentServer = {
  78. newSegment: obj => {
  79. return { value: obj.value };
  80. },
  81. newPlusButton: () => {},
  82. };
  83. return new StackdriverQueryCtrl(null, null, fakeSegmentServer, null);
  84. }
  85. function createTarget() {
  86. return {
  87. project: {
  88. id: '',
  89. name: '',
  90. },
  91. metricType: 'ametric',
  92. refId: 'A',
  93. aggregation: {
  94. crossSeriesReducer: '',
  95. alignmentPeriod: '',
  96. perSeriesAligner: '',
  97. groupBys: [],
  98. },
  99. };
  100. }