test: update reverseField (#231)
* test: update reverseField * fix: reverseField test * feat: throw error when reverseField exists
This commit is contained in:
parent
a28b69326b
commit
accb2a59b9
@ -9,7 +9,7 @@ import {
|
||||
ModelCtor,
|
||||
Op,
|
||||
Transaction,
|
||||
UpdateOptions as SequelizeUpdateOptions
|
||||
UpdateOptions as SequelizeUpdateOptions,
|
||||
} from 'sequelize';
|
||||
import { Collection } from './collection';
|
||||
import { Database } from './database';
|
||||
|
@ -56,4 +56,78 @@ describe('reverseField options', () => {
|
||||
});
|
||||
expect(json.foreignKey).toBe(json.reverseField.foreignKey);
|
||||
});
|
||||
|
||||
it('should update reverseField', async () => {
|
||||
const field = await Field.repository.create({
|
||||
values: {
|
||||
type: 'hasMany',
|
||||
collectionName: 'tests',
|
||||
target: 'targets',
|
||||
reverseField: {},
|
||||
},
|
||||
});
|
||||
|
||||
expect(
|
||||
await Field.repository.count({
|
||||
filter: {
|
||||
collectionName: 'targets',
|
||||
},
|
||||
}),
|
||||
).toEqual(1);
|
||||
|
||||
let reverseField = await Field.repository.findOne({
|
||||
filter: {
|
||||
collectionName: 'targets',
|
||||
},
|
||||
});
|
||||
|
||||
let err;
|
||||
|
||||
try {
|
||||
await Field.repository.update({
|
||||
filterByTk: field.get('key') as string,
|
||||
values: {
|
||||
reverseField: {
|
||||
uiSchema: {
|
||||
title: '123',
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
|
||||
expect(err).toBeDefined();
|
||||
|
||||
await Field.repository.update({
|
||||
filterByTk: field.get('key') as string,
|
||||
values: {
|
||||
reverseField: {
|
||||
key: reverseField.get('key'),
|
||||
uiSchema: {
|
||||
title: '123',
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(
|
||||
await Field.repository.count({
|
||||
filter: {
|
||||
collectionName: 'targets',
|
||||
},
|
||||
}),
|
||||
).toEqual(1);
|
||||
|
||||
reverseField = await db.getRepository('fields').findOne({
|
||||
filter: {
|
||||
key: reverseField.get('key'),
|
||||
},
|
||||
appends: ['uiSchema'],
|
||||
});
|
||||
|
||||
const uiSchema = reverseField.get('uiSchema');
|
||||
expect(uiSchema['schema']).toEqual({ title: '123' });
|
||||
});
|
||||
});
|
||||
|
@ -1,10 +1,13 @@
|
||||
import { mockServer } from '@nocobase/test';
|
||||
import PluginUiSchema from '@nocobase/plugin-ui-schema-storage';
|
||||
|
||||
import CollectionManagerPlugin from '..';
|
||||
|
||||
export async function createApp() {
|
||||
const app = mockServer();
|
||||
await app.cleanDb();
|
||||
app.plugin(CollectionManagerPlugin);
|
||||
app.plugin(PluginUiSchema);
|
||||
await app.load();
|
||||
return app;
|
||||
}
|
||||
|
@ -5,9 +5,10 @@ import {
|
||||
afterCreateForReverseField,
|
||||
beforeCreateForChildrenCollection,
|
||||
beforeCreateForReverseField,
|
||||
beforeInitOptions
|
||||
beforeInitOptions,
|
||||
} from './hooks';
|
||||
import { CollectionModel, FieldModel } from './models';
|
||||
import lodash from 'lodash';
|
||||
|
||||
export class CollectionManagerPlugin extends Plugin {
|
||||
async beforeLoad() {
|
||||
@ -20,6 +21,17 @@ export class CollectionManagerPlugin extends Plugin {
|
||||
CollectionRepository,
|
||||
});
|
||||
|
||||
this.app.db.on('fields.beforeUpdate', async (model, options) => {
|
||||
const newValue = options.values;
|
||||
if (
|
||||
model.get('reverseKey') &&
|
||||
lodash.get(newValue, 'reverseField') &&
|
||||
!lodash.get(newValue, 'reverseField.key')
|
||||
) {
|
||||
throw new Error('cant update field without a reverseField key');
|
||||
}
|
||||
});
|
||||
|
||||
// 要在 beforeInitOptions 之前处理
|
||||
this.app.db.on('fields.beforeCreate', beforeCreateForReverseField(this.app.db));
|
||||
this.app.db.on('fields.beforeCreate', beforeCreateForChildrenCollection(this.app.db));
|
||||
|
Loading…
Reference in New Issue
Block a user