grafana/public/app/features/manage-dashboards/DashboardImportCtrl.test.ts
Marcus Andersson 4e3ff19689
Dashboard: fixed issues with re-rendering of UI when importing dashboard (#21723)
* Fixed issues with angular digest and new backendSrv.
* Fixed failing tests.
2020-01-27 11:29:46 +01:00

87 lines
2.4 KiB
TypeScript

import { DashboardImportCtrl } from './DashboardImportCtrl';
import config from 'app/core/config';
import { backendSrv } from 'app/core/services/backend_srv';
import { IScope } from 'angular';
describe('DashboardImportCtrl', () => {
const ctx: any = {};
jest.spyOn(backendSrv, 'getDashboardByUid').mockImplementation(() => Promise.resolve([]));
jest.spyOn(backendSrv, 'search').mockImplementation(() => Promise.resolve([]));
const getMock = jest.spyOn(backendSrv, 'get');
const $scope = ({ $evalAsync: jest.fn() } as any) as IScope;
let navModelSrv: any;
let validationSrv: any;
beforeEach(() => {
navModelSrv = {
getNav: () => {},
};
validationSrv = {
validateNewDashboardName: jest.fn().mockReturnValue(Promise.resolve()),
};
ctx.ctrl = new DashboardImportCtrl($scope, validationSrv, navModelSrv, {} as any, {} as any);
jest.clearAllMocks();
});
describe('when uploading json', () => {
beforeEach(() => {
config.datasources = {
ds: {
type: 'test-db',
} as any,
};
ctx.ctrl.onUpload({
__inputs: [
{
name: 'ds',
pluginId: 'test-db',
type: 'datasource',
pluginName: 'Test DB',
},
],
});
});
it('should build input model', () => {
expect(ctx.ctrl.inputs.length).toBe(1);
expect(ctx.ctrl.inputs[0].name).toBe('ds');
expect(ctx.ctrl.inputs[0].info).toBe('Select a Test DB data source');
});
it('should set inputValid to false', () => {
expect(ctx.ctrl.inputsValid).toBe(false);
});
});
describe('when specifying grafana.com url', () => {
beforeEach(() => {
ctx.ctrl.gnetUrl = 'http://grafana.com/dashboards/123';
// setup api mock
getMock.mockImplementation(() => Promise.resolve({ json: {} }));
return ctx.ctrl.checkGnetDashboard();
});
it('should call gnet api with correct dashboard id', () => {
expect(getMock.mock.calls[0][0]).toBe('api/gnet/dashboards/123');
});
});
describe('when specifying dashboard id', () => {
beforeEach(() => {
ctx.ctrl.gnetUrl = '2342';
// setup api mock
getMock.mockImplementation(() => Promise.resolve({ json: {} }));
return ctx.ctrl.checkGnetDashboard();
});
it('should call gnet api with correct dashboard id', () => {
expect(getMock.mock.calls[0][0]).toBe('api/gnet/dashboards/2342');
});
});
});