mirror of
https://github.com/grafana/grafana.git
synced 2025-02-14 09:33:34 -06:00
* Moving query stuff out of dashboard folder * Moved more stuff * Moving more stuff * Update * WIP test page * Minor change * Before big changes * Fixed test
107 lines
2.8 KiB
TypeScript
107 lines
2.8 KiB
TypeScript
import { MetaAnalyticsEventName, reportMetaAnalytics } from '@grafana/runtime';
|
|
import { CoreApp, DataQueryRequest, DataSourceApi, dateTime, LoadingState, PanelData } from '@grafana/data';
|
|
import { emitDataRequestEvent } from './queryAnalytics';
|
|
import { DashboardModel } from '../../dashboard/state/DashboardModel';
|
|
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
const datasource = {
|
|
name: 'test',
|
|
id: 1,
|
|
} as DataSourceApi;
|
|
|
|
const dashboardModel = new DashboardModel(
|
|
{ id: 1, title: 'Test Dashboard', uid: 'test' },
|
|
{ folderTitle: 'Test Folder' }
|
|
);
|
|
|
|
jest.mock('app/features/dashboard/services/DashboardSrv', () => ({
|
|
getDashboardSrv: () => {
|
|
return {
|
|
getCurrent: () => dashboardModel,
|
|
};
|
|
},
|
|
}));
|
|
|
|
jest.mock('@grafana/runtime', () => ({
|
|
...(jest.requireActual('@grafana/runtime') as any),
|
|
reportMetaAnalytics: jest.fn(),
|
|
}));
|
|
|
|
const mockGetUrlSearchParams = jest.fn(() => {
|
|
return {};
|
|
});
|
|
jest.mock('@grafana/data', () => ({
|
|
...(jest.requireActual('@grafana/data') as any),
|
|
urlUtil: {
|
|
getUrlSearchParams: () => mockGetUrlSearchParams(),
|
|
},
|
|
}));
|
|
|
|
function getTestData(requestApp: string): PanelData {
|
|
const now = dateTime();
|
|
return {
|
|
request: {
|
|
app: requestApp,
|
|
dashboardId: 1,
|
|
panelId: 2,
|
|
startTime: now.unix(),
|
|
endTime: now.add(1, 's').unix(),
|
|
} as DataQueryRequest,
|
|
series: [],
|
|
state: LoadingState.Done,
|
|
timeRange: {
|
|
from: dateTime(),
|
|
to: dateTime(),
|
|
raw: { from: '1h', to: 'now' },
|
|
},
|
|
};
|
|
}
|
|
|
|
describe('emitDataRequestEvent - from a dashboard panel', () => {
|
|
const data = getTestData(CoreApp.Dashboard);
|
|
const fn = emitDataRequestEvent(datasource);
|
|
it('Should report meta analytics', () => {
|
|
fn(data);
|
|
|
|
expect(reportMetaAnalytics).toBeCalledTimes(1);
|
|
expect(reportMetaAnalytics).toBeCalledWith(
|
|
expect.objectContaining({
|
|
eventName: MetaAnalyticsEventName.DataRequest,
|
|
datasourceName: datasource.name,
|
|
datasourceId: datasource.id,
|
|
panelId: 2,
|
|
dashboardId: 1,
|
|
dashboardName: 'Test Dashboard',
|
|
dashboardUid: 'test',
|
|
folderName: 'Test Folder',
|
|
dataSize: 0,
|
|
duration: 1,
|
|
})
|
|
);
|
|
});
|
|
|
|
it('Should not report meta analytics twice if the request receives multiple responses', () => {
|
|
fn(data);
|
|
expect(reportMetaAnalytics).not.toBeCalled();
|
|
});
|
|
|
|
it('Should not report meta analytics in edit mode', () => {
|
|
mockGetUrlSearchParams.mockImplementationOnce(() => {
|
|
return { editPanel: 2 };
|
|
});
|
|
emitDataRequestEvent(datasource)(data);
|
|
expect(reportMetaAnalytics).not.toBeCalled();
|
|
});
|
|
});
|
|
|
|
describe('emitDataRequestEvent - from Explore', () => {
|
|
const data = getTestData(CoreApp.Explore);
|
|
it('Should not report meta analytics', () => {
|
|
emitDataRequestEvent(datasource)(data);
|
|
expect(reportMetaAnalytics).not.toBeCalled();
|
|
});
|
|
});
|