mirror of
https://github.com/nocobase/nocobase
synced 2024-11-15 13:37:37 +00:00
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,
|
ModelCtor,
|
||||||
Op,
|
Op,
|
||||||
Transaction,
|
Transaction,
|
||||||
UpdateOptions as SequelizeUpdateOptions
|
UpdateOptions as SequelizeUpdateOptions,
|
||||||
} from 'sequelize';
|
} from 'sequelize';
|
||||||
import { Collection } from './collection';
|
import { Collection } from './collection';
|
||||||
import { Database } from './database';
|
import { Database } from './database';
|
||||||
|
@ -56,4 +56,78 @@ describe('reverseField options', () => {
|
|||||||
});
|
});
|
||||||
expect(json.foreignKey).toBe(json.reverseField.foreignKey);
|
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 { mockServer } from '@nocobase/test';
|
||||||
|
import PluginUiSchema from '@nocobase/plugin-ui-schema-storage';
|
||||||
|
|
||||||
import CollectionManagerPlugin from '..';
|
import CollectionManagerPlugin from '..';
|
||||||
|
|
||||||
export async function createApp() {
|
export async function createApp() {
|
||||||
const app = mockServer();
|
const app = mockServer();
|
||||||
await app.cleanDb();
|
await app.cleanDb();
|
||||||
app.plugin(CollectionManagerPlugin);
|
app.plugin(CollectionManagerPlugin);
|
||||||
|
app.plugin(PluginUiSchema);
|
||||||
await app.load();
|
await app.load();
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,10 @@ import {
|
|||||||
afterCreateForReverseField,
|
afterCreateForReverseField,
|
||||||
beforeCreateForChildrenCollection,
|
beforeCreateForChildrenCollection,
|
||||||
beforeCreateForReverseField,
|
beforeCreateForReverseField,
|
||||||
beforeInitOptions
|
beforeInitOptions,
|
||||||
} from './hooks';
|
} from './hooks';
|
||||||
import { CollectionModel, FieldModel } from './models';
|
import { CollectionModel, FieldModel } from './models';
|
||||||
|
import lodash from 'lodash';
|
||||||
|
|
||||||
export class CollectionManagerPlugin extends Plugin {
|
export class CollectionManagerPlugin extends Plugin {
|
||||||
async beforeLoad() {
|
async beforeLoad() {
|
||||||
@ -20,6 +21,17 @@ export class CollectionManagerPlugin extends Plugin {
|
|||||||
CollectionRepository,
|
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 之前处理
|
// 要在 beforeInitOptions 之前处理
|
||||||
this.app.db.on('fields.beforeCreate', beforeCreateForReverseField(this.app.db));
|
this.app.db.on('fields.beforeCreate', beforeCreateForReverseField(this.app.db));
|
||||||
this.app.db.on('fields.beforeCreate', beforeCreateForChildrenCollection(this.app.db));
|
this.app.db.on('fields.beforeCreate', beforeCreateForChildrenCollection(this.app.db));
|
||||||
|
Loading…
Reference in New Issue
Block a user