mirror of
https://github.com/nocobase/nocobase
synced 2024-11-16 15:26:40 +00:00
fix: e2e bug
This commit is contained in:
parent
d83a9e57c7
commit
1c8d104898
@ -3,6 +3,7 @@ import {
|
||||
configRequirejs,
|
||||
defineDevPlugins,
|
||||
definePluginClient,
|
||||
getPlugins,
|
||||
getRemotePlugins,
|
||||
processRemotePlugins,
|
||||
} from '../../utils/remotePlugins';
|
||||
@ -169,8 +170,98 @@ describe('remotePlugins', () => {
|
||||
});
|
||||
|
||||
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) => {
|
||||
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' });
|
||||
};
|
||||
|
||||
@ -184,13 +275,39 @@ describe('remotePlugins', () => {
|
||||
{
|
||||
name: '@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();
|
||||
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) {
|
||||
const collectionTemplateInstance = this.getCollectionTemplate(collection.template);
|
||||
const Cls = collectionTemplateInstance?.Collection || CollectionV2;
|
||||
const transform = collectionTemplateInstance?.transform || defaultCollectionTransform;
|
||||
const transformedCollection = transform(collection, this.app);
|
||||
const transform = collectionTemplateInstance?.transform;
|
||||
const transformedCollection = transform
|
||||
? transform(defaultCollectionTransform(collection, this.app), this.app)
|
||||
: collection;
|
||||
const instance = new Cls({ ...transformedCollection, dataSource }, this.app, this);
|
||||
applyMixins(instance, this.collectionMixins);
|
||||
return instance;
|
||||
|
Loading…
Reference in New Issue
Block a user