| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- // Use the real plugin_loader (stubbed by default)
- jest.unmock('app/features/plugins/plugin_loader');
- (global as any).ace = {
- define: jest.fn(),
- };
- jest.mock('app/core/core', () => {
- return {
- coreModule: {
- directive: jest.fn(),
- },
- };
- });
- import { SystemJS } from '@grafana/runtime';
- import { AppPluginMeta, PluginMetaInfo, PluginType, PluginIncludeType, AppPlugin } from '@grafana/ui';
- import { importAppPlugin } from './plugin_loader';
- class MyCustomApp extends AppPlugin {
- initWasCalled = false;
- calledTwice = false;
- init(meta: AppPluginMeta) {
- this.initWasCalled = true;
- this.calledTwice = this.meta === meta;
- }
- }
- describe('Load App', () => {
- const app = new MyCustomApp();
- const modulePath = 'my/custom/plugin/module';
- beforeAll(() => {
- SystemJS.set(modulePath, SystemJS.newModule({ plugin: app }));
- });
- afterAll(() => {
- SystemJS.delete(modulePath);
- });
- it('should call init and set meta', async () => {
- const meta: AppPluginMeta = {
- id: 'test-app',
- module: modulePath,
- baseUrl: 'xxx',
- info: {} as PluginMetaInfo,
- type: PluginType.app,
- name: 'test',
- };
- // Check that we mocked the import OK
- const m = await SystemJS.import(modulePath);
- expect(m.plugin).toBe(app);
- const loaded = await importAppPlugin(meta);
- expect(loaded).toBe(app);
- expect(app.meta).toBe(meta);
- expect(app.initWasCalled).toBeTruthy();
- expect(app.calledTwice).toBeFalsy();
- const again = await importAppPlugin(meta);
- expect(again).toBe(app);
- expect(app.calledTwice).toBeTruthy();
- });
- });
- import { ExampleConfigCtrl as ConfigCtrl } from 'app/plugins/app/example-app/legacy/config';
- import { AngularExamplePageCtrl } from 'app/plugins/app/example-app/legacy/angular_example_page';
- describe('Load Legacy App', () => {
- const app = {
- ConfigCtrl,
- AngularExamplePageCtrl, // Must match `pages.component` in plugin.json
- };
- const modulePath = 'my/custom/legacy/plugin/module';
- beforeAll(() => {
- SystemJS.set(modulePath, SystemJS.newModule(app));
- });
- afterAll(() => {
- SystemJS.delete(modulePath);
- });
- it('should call init and set meta for legacy app', async () => {
- const meta: AppPluginMeta = {
- id: 'test-app',
- module: modulePath,
- baseUrl: 'xxx',
- info: {} as PluginMetaInfo,
- type: PluginType.app,
- name: 'test',
- includes: [
- {
- type: PluginIncludeType.page,
- name: 'Example Page',
- component: 'AngularExamplePageCtrl',
- role: 'Viewer',
- addToNav: false,
- },
- ],
- };
- const loaded = await importAppPlugin(meta);
- expect(loaded).toHaveProperty('angularPages');
- expect(loaded.angularPages).toHaveProperty('AngularExamplePageCtrl', AngularExamplePageCtrl);
- });
- });
|