panel.test.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import moment from 'moment';
  2. import { TimeRange } from '@grafana/ui';
  3. import { applyPanelTimeOverrides } from 'app/features/dashboard/utils/panel';
  4. import { advanceTo, clear } from 'jest-date-mock';
  5. const dashboardTimeRange: TimeRange = {
  6. from: moment([2019, 1, 11, 12, 0]),
  7. to: moment([2019, 1, 11, 18, 0]),
  8. raw: {
  9. from: 'now-6h',
  10. to: 'now',
  11. },
  12. };
  13. describe('applyPanelTimeOverrides', () => {
  14. const fakeCurrentDate = moment([2019, 1, 11, 14, 0, 0]).toDate();
  15. beforeAll(() => {
  16. advanceTo(fakeCurrentDate);
  17. });
  18. afterAll(() => {
  19. clear();
  20. });
  21. it('should apply relative time override', () => {
  22. const panelModel = {
  23. timeFrom: '2h',
  24. };
  25. // @ts-ignore: PanelModel type incositency
  26. const overrides = applyPanelTimeOverrides(panelModel, dashboardTimeRange);
  27. expect(overrides.timeRange.from.toISOString()).toBe(moment([2019, 1, 11, 12]).toISOString());
  28. expect(overrides.timeRange.to.toISOString()).toBe(fakeCurrentDate.toISOString());
  29. expect(overrides.timeRange.raw.from).toBe('now-2h');
  30. expect(overrides.timeRange.raw.to).toBe('now');
  31. });
  32. it('should apply time shift', () => {
  33. const panelModel = {
  34. timeShift: '2h',
  35. };
  36. const expectedFromDate = moment([2019, 1, 11, 10, 0, 0]).toDate();
  37. const expectedToDate = moment([2019, 1, 11, 16, 0, 0]).toDate();
  38. // @ts-ignore: PanelModel type incositency
  39. const overrides = applyPanelTimeOverrides(panelModel, dashboardTimeRange);
  40. expect(overrides.timeRange.from.toISOString()).toBe(expectedFromDate.toISOString());
  41. expect(overrides.timeRange.to.toISOString()).toBe(expectedToDate.toISOString());
  42. expect((overrides.timeRange.raw.from as moment.Moment).toISOString()).toEqual(expectedFromDate.toISOString());
  43. expect((overrides.timeRange.raw.to as moment.Moment).toISOString()).toEqual(expectedToDate.toISOString());
  44. });
  45. it('should apply both relative time and time shift', () => {
  46. const panelModel = {
  47. timeFrom: '2h',
  48. timeShift: '2h',
  49. };
  50. const expectedFromDate = moment([2019, 1, 11, 10, 0, 0]).toDate();
  51. const expectedToDate = moment([2019, 1, 11, 12, 0, 0]).toDate();
  52. // @ts-ignore: PanelModel type incositency
  53. const overrides = applyPanelTimeOverrides(panelModel, dashboardTimeRange);
  54. expect(overrides.timeRange.from.toISOString()).toBe(expectedFromDate.toISOString());
  55. expect(overrides.timeRange.to.toISOString()).toBe(expectedToDate.toISOString());
  56. expect((overrides.timeRange.raw.from as moment.Moment).toISOString()).toEqual(expectedFromDate.toISOString());
  57. expect((overrides.timeRange.raw.to as moment.Moment).toISOString()).toEqual(expectedToDate.toISOString());
  58. });
  59. });