mirror of
https://github.com/nocobase/nocobase
synced 2024-11-16 19:26:59 +00:00
fix: e2e bug
This commit is contained in:
parent
d83a9e57c7
commit
1c8d104898
@ -3,6 +3,7 @@ import {
|
|||||||
configRequirejs,
|
configRequirejs,
|
||||||
defineDevPlugins,
|
defineDevPlugins,
|
||||||
definePluginClient,
|
definePluginClient,
|
||||||
|
getPlugins,
|
||||||
getRemotePlugins,
|
getRemotePlugins,
|
||||||
processRemotePlugins,
|
processRemotePlugins,
|
||||||
} from '../../utils/remotePlugins';
|
} from '../../utils/remotePlugins';
|
||||||
@ -169,8 +170,98 @@ describe('remotePlugins', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('getPlugins()', () => {
|
describe('getPlugins()', () => {
|
||||||
it('should get plugins', async () => {
|
it('If there is no devDynamicImport, all plugins are obtained through API requests', async () => {
|
||||||
|
const remoteFn = vi.fn();
|
||||||
const mockPluginsModules = (pluginData, resolve) => {
|
const mockPluginsModules = (pluginData, resolve) => {
|
||||||
|
remoteFn();
|
||||||
|
resolve({ default: 'default' }, { default: 'default' });
|
||||||
|
};
|
||||||
|
|
||||||
|
const requirejs: any = {
|
||||||
|
requirejs: mockPluginsModules,
|
||||||
|
};
|
||||||
|
|
||||||
|
requirejs.requirejs.config = vi.fn();
|
||||||
|
requirejs.requirejs.requirejs = vi.fn();
|
||||||
|
const pluginData: any = [
|
||||||
|
{
|
||||||
|
name: '@nocobase/demo',
|
||||||
|
packageName: '@nocobase/demo',
|
||||||
|
url: 'https://demo1.com',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '@nocobase/demo2',
|
||||||
|
packageName: '@nocobase/demo2',
|
||||||
|
url: 'https://demo2.com',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const mockDefine: any = vi.fn();
|
||||||
|
window.define = mockDefine;
|
||||||
|
|
||||||
|
const plugins = await getPlugins({ requirejs, pluginData });
|
||||||
|
expect(plugins).toEqual([
|
||||||
|
['@nocobase/demo', 'default'],
|
||||||
|
['@nocobase/demo2', 'default'],
|
||||||
|
]);
|
||||||
|
expect(remoteFn).toBeCalledTimes(1);
|
||||||
|
expect(mockDefine).toBeCalledTimes(2);
|
||||||
|
expect(requirejs.requirejs.config).toBeCalledWith({
|
||||||
|
waitSeconds: 120,
|
||||||
|
paths: {
|
||||||
|
'@nocobase/demo': 'https://demo1.com',
|
||||||
|
'@nocobase/demo2': 'https://demo2.com',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('If there is devDynamicImport and devDynamicImport returns all, remote API will not be requested', async () => {
|
||||||
|
const remoteFn = vi.fn();
|
||||||
|
const mockPluginsModules = (pluginData, resolve) => {
|
||||||
|
remoteFn();
|
||||||
|
resolve({ default: 'default' }, { default: 'default' });
|
||||||
|
};
|
||||||
|
|
||||||
|
const requirejs: any = {
|
||||||
|
requirejs: mockPluginsModules,
|
||||||
|
};
|
||||||
|
|
||||||
|
requirejs.requirejs.config = vi.fn();
|
||||||
|
requirejs.requirejs.requirejs = vi.fn();
|
||||||
|
const pluginData: any = [
|
||||||
|
{
|
||||||
|
name: '@nocobase/demo',
|
||||||
|
packageName: '@nocobase/demo',
|
||||||
|
url: 'https://demo1.com',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '@nocobase/demo2',
|
||||||
|
packageName: '@nocobase/demo2',
|
||||||
|
url: 'https://demo2.com',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const mockDefine: any = vi.fn();
|
||||||
|
window.define = mockDefine;
|
||||||
|
|
||||||
|
const plugins = await getPlugins({
|
||||||
|
requirejs,
|
||||||
|
pluginData,
|
||||||
|
devDynamicImport: (() => {
|
||||||
|
return Promise.resolve({ default: 'default' });
|
||||||
|
}) as any,
|
||||||
|
});
|
||||||
|
expect(plugins).toEqual([
|
||||||
|
['@nocobase/demo', 'default'],
|
||||||
|
['@nocobase/demo2', 'default'],
|
||||||
|
]);
|
||||||
|
expect(remoteFn).toBeCalledTimes(0);
|
||||||
|
expect(mockDefine).toBeCalledTimes(2);
|
||||||
|
expect(requirejs.requirejs.config).toBeCalledTimes(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('If there is devDynamicImport and devDynamicImport returns partial, remote API will be requested', async () => {
|
||||||
|
const remoteFn = vi.fn();
|
||||||
|
const mockPluginsModules = (pluginData, resolve) => {
|
||||||
|
remoteFn();
|
||||||
resolve({ default: 'default' });
|
resolve({ default: 'default' });
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -184,13 +275,39 @@ describe('remotePlugins', () => {
|
|||||||
{
|
{
|
||||||
name: '@nocobase/demo',
|
name: '@nocobase/demo',
|
||||||
packageName: '@nocobase/demo',
|
packageName: '@nocobase/demo',
|
||||||
url: 'https://demo.com',
|
url: 'https://demo1.com',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '@nocobase/demo2',
|
||||||
|
packageName: '@nocobase/demo2',
|
||||||
|
url: 'https://demo2.com',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const mockDefine: any = vi.fn();
|
const mockDefine: any = vi.fn();
|
||||||
window.define = mockDefine;
|
window.define = mockDefine;
|
||||||
const plugins = await getRemotePlugins(requirejs, pluginData);
|
|
||||||
expect(plugins).toEqual([['@nocobase/demo', 'default']]);
|
const plugins = await getPlugins({
|
||||||
|
requirejs,
|
||||||
|
pluginData,
|
||||||
|
devDynamicImport: ((packageName) => {
|
||||||
|
if (packageName === '@nocobase/demo') {
|
||||||
|
return Promise.resolve({ default: 'default' });
|
||||||
|
}
|
||||||
|
return Promise.resolve(null);
|
||||||
|
}) as any,
|
||||||
|
});
|
||||||
|
expect(plugins).toEqual([
|
||||||
|
['@nocobase/demo', 'default'],
|
||||||
|
['@nocobase/demo2', 'default'],
|
||||||
|
]);
|
||||||
|
expect(remoteFn).toBeCalled();
|
||||||
|
expect(mockDefine).toBeCalledTimes(2);
|
||||||
|
expect(requirejs.requirejs.config).toBeCalledWith({
|
||||||
|
waitSeconds: 120,
|
||||||
|
paths: {
|
||||||
|
'@nocobase/demo2': 'https://demo2.com',
|
||||||
|
},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -126,8 +126,10 @@ export class CollectionManagerV2 {
|
|||||||
protected getCollectionInstance(collection: CollectionOptionsV2, dataSource?: string) {
|
protected getCollectionInstance(collection: CollectionOptionsV2, dataSource?: string) {
|
||||||
const collectionTemplateInstance = this.getCollectionTemplate(collection.template);
|
const collectionTemplateInstance = this.getCollectionTemplate(collection.template);
|
||||||
const Cls = collectionTemplateInstance?.Collection || CollectionV2;
|
const Cls = collectionTemplateInstance?.Collection || CollectionV2;
|
||||||
const transform = collectionTemplateInstance?.transform || defaultCollectionTransform;
|
const transform = collectionTemplateInstance?.transform;
|
||||||
const transformedCollection = transform(collection, this.app);
|
const transformedCollection = transform
|
||||||
|
? transform(defaultCollectionTransform(collection, this.app), this.app)
|
||||||
|
: collection;
|
||||||
const instance = new Cls({ ...transformedCollection, dataSource }, this.app, this);
|
const instance = new Cls({ ...transformedCollection, dataSource }, this.app, this);
|
||||||
applyMixins(instance, this.collectionMixins);
|
applyMixins(instance, this.collectionMixins);
|
||||||
return instance;
|
return instance;
|
||||||
|
Loading…
Reference in New Issue
Block a user