123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- import { afterEach, beforeEach } from '../../../../test/lib/common';
- import { appEvents } from '../../../core/core';
- import { VariablesChanged } from '../../variables/types';
- import { getTimeSrv, setTimeSrv } from '../services/TimeSrv';
- import { DashboardModel } from './DashboardModel';
- import { PanelModel } from './PanelModel';
- function getTestContext({
- usePanelInEdit,
- usePanelInView,
- refreshAll = false,
- }: { usePanelInEdit?: boolean; usePanelInView?: boolean; refreshAll?: boolean } = {}) {
- jest.clearAllMocks();
- const dashboard = new DashboardModel({});
- const startRefreshMock = jest.fn();
- dashboard.startRefresh = startRefreshMock;
- const panelInView = new PanelModel({ id: 99 });
- const panelInEdit = new PanelModel({ id: 100 });
- const panelIds = [1, 2, 3];
- if (usePanelInEdit) {
- dashboard.panelInEdit = panelInEdit;
- panelIds.push(panelInEdit.id);
- }
- if (usePanelInView) {
- dashboard.panelInView = panelInView;
- panelIds.push(panelInView.id);
- }
- appEvents.publish(new VariablesChanged({ panelIds, refreshAll }));
- return { dashboard, startRefreshMock, panelInEdit, panelInView };
- }
- describe('Strict panel refresh', () => {
- describe('when there is no panel in full view or panel in panel edit during variable change', () => {
- it('then all affected panels should be refreshed', () => {
- const { startRefreshMock } = getTestContext();
- expect(startRefreshMock).toHaveBeenCalledTimes(1);
- expect(startRefreshMock).toHaveBeenLastCalledWith({ panelIds: [1, 2, 3], refreshAll: false });
- });
- });
- describe('when there is no panel in full view or panel in panel edit during variable change but refreshAll is true', () => {
- it('then all affected panels should be refreshed', () => {
- const { startRefreshMock } = getTestContext({ refreshAll: true });
- expect(startRefreshMock).toHaveBeenCalledTimes(1);
- expect(startRefreshMock).toHaveBeenLastCalledWith({ panelIds: [], refreshAll: true });
- });
- });
- describe('testing refresh threshold', () => {
- const originalTimeSrv = getTimeSrv();
- let isRefreshOutsideThreshold = false;
- beforeEach(() => {
- setTimeSrv({
- isRefreshOutsideThreshold: () => isRefreshOutsideThreshold,
- } as any);
- });
- afterEach(() => {
- setTimeSrv(originalTimeSrv);
- });
- describe('when the dashboard has not been refreshed within the threshold', () => {
- it(' then all panels should be refreshed', () => {
- isRefreshOutsideThreshold = true;
- const { startRefreshMock } = getTestContext();
- expect(startRefreshMock).toHaveBeenCalledTimes(1);
- expect(startRefreshMock).toHaveBeenLastCalledWith({ panelIds: [], refreshAll: true });
- });
- });
- describe('when the dashboard has been refreshed within the threshold', () => {
- it('then all affected panels should be refreshed', () => {
- isRefreshOutsideThreshold = false;
- const { startRefreshMock } = getTestContext();
- expect(startRefreshMock).toHaveBeenCalledTimes(1);
- expect(startRefreshMock).toHaveBeenLastCalledWith({ panelIds: [1, 2, 3], refreshAll: false });
- });
- });
- describe('when the dashboard has been refreshed within the threshold but refreshAll is true', () => {
- it('then all affected panels should be refreshed', () => {
- isRefreshOutsideThreshold = false;
- const { startRefreshMock } = getTestContext({ refreshAll: true });
- expect(startRefreshMock).toHaveBeenCalledTimes(1);
- expect(startRefreshMock).toHaveBeenLastCalledWith({ panelIds: [], refreshAll: true });
- });
- });
- });
- describe('when there is a panel in full view during variable change', () => {
- it('then all affected panels should be refreshed', () => {
- const { panelInView, startRefreshMock } = getTestContext({ usePanelInView: true });
- expect(startRefreshMock).toHaveBeenCalledTimes(1);
- expect(startRefreshMock).toHaveBeenLastCalledWith({ panelIds: [1, 2, 3, panelInView.id], refreshAll: false });
- });
- describe('and when exitViewPanel is called', () => {
- it('then all affected panels except the panel in full view should be refreshed', () => {
- const { dashboard, panelInView, startRefreshMock } = getTestContext({ usePanelInView: true });
- startRefreshMock.mockClear();
- dashboard.exitViewPanel(panelInView);
- expect(startRefreshMock).toHaveBeenCalledTimes(1);
- expect(startRefreshMock).toHaveBeenLastCalledWith({ panelIds: [1, 2, 3], refreshAll: false });
- expect(dashboard['panelsAffectedByVariableChange']).toBeNull();
- });
- });
- });
- describe('when there is a panel in panel edit during variable change', () => {
- it('then all affected panels should be refreshed', () => {
- const { panelInEdit, startRefreshMock } = getTestContext({ usePanelInEdit: true });
- expect(startRefreshMock).toHaveBeenCalledTimes(1);
- expect(startRefreshMock).toHaveBeenLastCalledWith({ panelIds: [1, 2, 3, panelInEdit.id], refreshAll: false });
- });
- describe('and when exitViewPanel is called', () => {
- it('then all affected panels except the panel in panel edit should be refreshed', () => {
- const { dashboard, startRefreshMock } = getTestContext({ usePanelInEdit: true });
- startRefreshMock.mockClear();
- dashboard.exitPanelEditor();
- expect(startRefreshMock).toHaveBeenCalledTimes(1);
- expect(startRefreshMock).toHaveBeenLastCalledWith({ panelIds: [1, 2, 3], refreshAll: false });
- expect(dashboard['panelsAffectedByVariableChange']).toBeNull();
- });
- });
- });
- });
|