Dominik Prokop 7 лет назад
Родитель
Сommit
c3fdc1a0fb
3 измененных файлов с 74 добавлено и 0 удалено
  1. 1 0
      package.json
  2. 68 0
      public/app/features/dashboard/utils/panel.test.ts
  3. 5 0
      yarn.lock

+ 1 - 0
package.json

@@ -64,6 +64,7 @@
     "html-webpack-plugin": "^3.2.0",
     "husky": "^0.14.3",
     "jest": "^23.6.0",
+    "jest-date-mock": "^1.0.6",
     "lint-staged": "^6.0.0",
     "load-grunt-tasks": "3.5.2",
     "mini-css-extract-plugin": "^0.4.0",

+ 68 - 0
public/app/features/dashboard/utils/panel.test.ts

@@ -0,0 +1,68 @@
+import moment from 'moment';
+import { TimeRange } from '@grafana/ui';
+import { applyPanelTimeOverrides } from 'app/features/dashboard/utils/panel';
+import { advanceTo, clear } from 'jest-date-mock';
+
+const dashboardTimeRange: TimeRange = {
+  from: moment([2019, 1, 11, 12, 0]),
+  to: moment([2019, 1, 11, 18, 0]),
+  raw: {
+    from: 'now-6h',
+    to: 'now',
+  },
+};
+
+describe('applyPanelTimeOverrides', () => {
+  const fakeCurrentDate = moment([2019, 1, 11, 14, 0, 0]).toDate();
+
+  beforeAll(() => {
+    advanceTo(fakeCurrentDate);
+  });
+
+  afterAll(() => {
+    clear();
+  });
+
+  it('should apply relative time override', () => {
+    const panelModel = {
+      timeFrom: '2h',
+    };
+
+    // @ts-ignore: PanelModel type incositency
+    const overrides = applyPanelTimeOverrides(panelModel, dashboardTimeRange);
+
+    expect(overrides.timeRange.from.toISOString()).toBe(moment([2019, 1, 11, 12]).toISOString());
+    expect(overrides.timeRange.to.toISOString()).toBe(fakeCurrentDate.toISOString());
+  });
+
+  it('should apply time shift', () => {
+    const panelModel = {
+      timeShift: '2h'
+    };
+
+    const expectedFromDate = moment([2019, 1, 11, 10, 0, 0]).toDate();
+    const expectedToDate = moment([2019, 1, 11, 16, 0, 0]).toDate();
+
+    // @ts-ignore: PanelModel type incositency
+    const overrides = applyPanelTimeOverrides(panelModel, dashboardTimeRange);
+
+    expect(overrides.timeRange.from.toISOString()).toBe(expectedFromDate.toISOString());
+    expect(overrides.timeRange.to.toISOString()).toBe(expectedToDate.toISOString());
+  });
+
+  it('should apply both relative time and time shift', () => {
+    const panelModel = {
+      timeFrom: '2h',
+      timeShift: '2h'
+    };
+
+    const expectedFromDate = moment([2019, 1, 11, 10, 0, 0]).toDate();
+    const expectedToDate = moment([2019, 1, 11, 12, 0, 0]).toDate();
+
+    // @ts-ignore: PanelModel type incositency
+    const overrides = applyPanelTimeOverrides(panelModel, dashboardTimeRange);
+
+    expect(overrides.timeRange.from.toISOString()).toBe(expectedFromDate.toISOString());
+    expect(overrides.timeRange.to.toISOString()).toBe(expectedToDate.toISOString());
+  });
+});

+ 5 - 0
yarn.lock

@@ -8153,6 +8153,11 @@ jest-config@^23.6.0:
     micromatch "^2.3.11"
     pretty-format "^23.6.0"
 
+jest-date-mock@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/jest-date-mock/-/jest-date-mock-1.0.6.tgz#7ea405d1fa68f86bb727d12e47b9c5e6760066a6"
+  integrity sha512-wnLgDaK3i2md/cQ1wKx/+/78PieO4nkGen8avEmHd4dt1NGGxeuW8/oLAF5qsatQBXdn08pxpqRtUoDvTTLdRg==
+
 jest-diff@^23.6.0:
   version "23.6.0"
   resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d"