query_ctrl.test.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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(2);
  16. expect(result[0].value).toBe('metric.label.metric-key-1');
  17. expect(result[1].value).toBe('resource.label.resource-key-1');
  18. });
  19. });
  20. describe('when a group by label is selected', () => {
  21. beforeEach(async () => {
  22. ctrl.metricLabels = {
  23. 'metric-key-1': ['metric-value-1'],
  24. 'metric-key-2': ['metric-value-2'],
  25. };
  26. ctrl.resourceLabels = {
  27. 'resource-key-1': ['resource-value-1'],
  28. 'resource-key-2': ['resource-value-2'],
  29. };
  30. ctrl.target.aggregation.groupBys = ['metric.label.metric-key-1', 'resource.label.resource-key-1'];
  31. result = await ctrl.getGroupBys();
  32. });
  33. it('should not be used to populate group bys segments', () => {
  34. expect(result.length).toBe(2);
  35. expect(result[0].value).toBe('metric.label.metric-key-2');
  36. expect(result[1].value).toBe('resource.label.resource-key-2');
  37. });
  38. });
  39. describe('when a group by is selected', () => {
  40. beforeEach(() => {
  41. const segment = { value: 'groupby1' };
  42. ctrl.groupBySegments = [segment];
  43. ctrl.groupByChanged(segment);
  44. });
  45. it('should be added to group bys list', () => {
  46. expect(ctrl.target.aggregation.groupBys.length).toBe(1);
  47. });
  48. });
  49. });
  50. function createCtrlWithFakes() {
  51. StackdriverQueryCtrl.prototype.panelCtrl = {
  52. events: { on: () => {} },
  53. panel: { scopedVars: [], targets: [] },
  54. refresh: () => {},
  55. };
  56. StackdriverQueryCtrl.prototype.target = createTarget();
  57. StackdriverQueryCtrl.prototype.getMetricTypes = () => {
  58. return Promise.resolve();
  59. };
  60. StackdriverQueryCtrl.prototype.getLabels = () => {
  61. return Promise.resolve();
  62. };
  63. const fakeSegmentServer = {
  64. newSegment: obj => {
  65. return { value: obj.value };
  66. },
  67. newPlusButton: () => {},
  68. };
  69. return new StackdriverQueryCtrl(null, null, fakeSegmentServer, null);
  70. }
  71. function createTarget() {
  72. return {
  73. project: {
  74. id: '',
  75. name: '',
  76. },
  77. metricType: 'ametric',
  78. refId: 'A',
  79. aggregation: {
  80. crossSeriesReducer: '',
  81. alignmentPeriod: '',
  82. perSeriesAligner: '',
  83. groupBys: [],
  84. },
  85. };
  86. }