diff --git a/public/app/plugins/panel/annolist/AnnoListPanel.test.tsx b/public/app/plugins/panel/annolist/AnnoListPanel.test.tsx index 97e931d7819..ca6201380aa 100644 --- a/public/app/plugins/panel/annolist/AnnoListPanel.test.tsx +++ b/public/app/plugins/panel/annolist/AnnoListPanel.test.tsx @@ -8,6 +8,7 @@ import { backendSrv } from '../../../core/services/backend_srv'; import userEvent from '@testing-library/user-event'; import { silenceConsoleOutput } from '../../../../test/core/utils/silenceConsoleOutput'; import { setDashboardSrv } from '../../../features/dashboard/services/DashboardSrv'; +import { locationService } from '@grafana/runtime'; jest.mock('@grafana/runtime', () => ({ ...((jest.requireActual('@grafana/runtime') as unknown) as object), @@ -17,7 +18,7 @@ jest.mock('@grafana/runtime', () => ({ const defaultOptions: AnnoOptions = { limit: 10, navigateAfter: '10m', - navigateBefore: '20m', + navigateBefore: '10m', navigateToPanel: true, onlyFromThisDashboard: true, onlyInTimeRange: false, @@ -27,7 +28,7 @@ const defaultOptions: AnnoOptions = { tags: ['tag A', 'tag B'], }; -const defaultResult: AnnotationEvent = { +const defaultResult: any = { text: 'Result text', userId: 1, login: 'Result login', @@ -37,6 +38,8 @@ const defaultResult: AnnotationEvent = { time: Date.UTC(2021, 0, 1, 0, 0, 0, 0), panelId: 13, dashboardId: 14, // deliberately different from panelId + id: 14, + url: '/d/asdkjhajksd/some-dash', }; async function setupTestContext({ @@ -51,6 +54,7 @@ async function setupTestContext({ const dash: any = { id: 1, formatDate: (time: number) => new Date(time).toISOString() }; const dashSrv: any = { getCurrent: () => dash }; setDashboardSrv(dashSrv); + const pushSpy = jest.spyOn(locationService, 'push'); const props: Props = { data: { state: LoadingState.Done, timeRange: getDefaultTimeRange(), series: [] }, @@ -82,7 +86,7 @@ async function setupTestContext({ const { rerender } = render(); await waitFor(() => expect(getMock).toHaveBeenCalledTimes(1)); - return { props, rerender, getMock }; + return { props, rerender, getMock, pushSpy }; } describe('AnnoListPanel', () => { @@ -192,14 +196,16 @@ describe('AnnoListPanel', () => { describe('and the user clicks on the annotation', () => { it('then it should navigate to the dashboard connected to the annotation', async () => { - const { getMock } = await setupTestContext(); + const { getMock, pushSpy } = await setupTestContext(); getMock.mockClear(); expect(screen.getByText(/result text/i)).toBeInTheDocument(); userEvent.click(screen.getByText(/result text/i)); + await waitFor(() => expect(getMock).toHaveBeenCalledTimes(1)); - expect(getMock).toHaveBeenCalledTimes(1); expect(getMock).toHaveBeenCalledWith('/api/search', { dashboardIds: 14 }); + expect(pushSpy).toHaveBeenCalledTimes(1); + expect(pushSpy).toHaveBeenCalledWith('/d/asdkjhajksd/some-dash?from=1609458600000&to=1609459800000'); }); }); diff --git a/public/app/plugins/panel/annolist/AnnoListPanel.tsx b/public/app/plugins/panel/annolist/AnnoListPanel.tsx index cfc88503004..7b3974ba3d7 100644 --- a/public/app/plugins/panel/annolist/AnnoListPanel.tsx +++ b/public/app/plugins/panel/annolist/AnnoListPanel.tsx @@ -129,7 +129,7 @@ export class AnnoListPanel extends PureComponent { }); } - onAnnoClick = (anno: AnnotationEvent) => { + onAnnoClick = async (anno: AnnotationEvent) => { if (!anno.time) { return; } @@ -152,17 +152,16 @@ export class AnnoListPanel extends PureComponent { return; } - getBackendSrv() - .get('/api/search', { dashboardIds: anno.dashboardId }) - .then((res: any[]) => { - if (res && res.length && res[0].id === anno.dashboardId) { - const dash = res[0]; - const newUrl = locationUtil.stripBaseFromUrl(dash.url); - locationService.push(newUrl); - return; - } - appEvents.emit(AppEvents.alertWarning, ['Unknown Dashboard: ' + anno.dashboardId]); - }); + const result = await getBackendSrv().get('/api/search', { dashboardIds: anno.dashboardId }); + if (result && result.length && result[0].id === anno.dashboardId) { + const dash = result[0]; + const url = new URL(dash.url, window.location.origin); + url.searchParams.set('from', params.from); + url.searchParams.set('to', params.to); + locationService.push(locationUtil.stripBaseFromUrl(url.toString())); + return; + } + appEvents.emit(AppEvents.alertWarning, ['Unknown Dashboard: ' + anno.dashboardId]); }; _timeOffset(time: number, offset: string, subtract = false): number {