tachybase_todo/packages/plugins/collection-manager/src/__tests__/through.test.ts
chenos 249dff16d3
refactor: plugin manager (#965)
* feat: improve code

* chore: update version

* feat: api service

* fix: api services

* feat: improve code

* feat: improve code

* feat: improve code

* feat: pm socket

* fix: test errors

* feat: add built-in plugins before upgrade

* feat: update docs

* feat: improve code

* fix: after load
2022-10-27 13:00:16 +08:00

145 lines
3.3 KiB
TypeScript

import PluginErrorHandler from '@nocobase/plugin-error-handler';
import { mockServer } from '@nocobase/test';
import Plugin from '../server';
describe('collections repository', () => {
it('case 1', async () => {
const app1 = mockServer({
database: {
tablePrefix: 'through_',
},
acl: false,
});
app1.plugin(PluginErrorHandler, { name: 'error-handler' });
app1.plugin(Plugin, { name: 'collection-manager' });
await app1.loadAndInstall({ clean: true });
await app1
.agent()
.resource('collections')
.create({
values: {
name: 'resumes',
fields: [
{
name: 'id',
type: 'integer',
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
],
},
});
await app1
.agent()
.resource('collections')
.create({
values: {
name: 'jobs',
fields: [
{
name: 'id',
type: 'integer',
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
],
},
});
await app1
.agent()
.resource('collections')
.create({
values: {
name: 'matches',
fields: [
{
name: 'id',
type: 'integer',
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
],
},
});
await app1
.agent()
.resource('collections.fields', 'resumes')
.create({
values: {
name: 'jobs',
type: 'belongsToMany',
foreignKey: 'rid',
otherKey: 'jid',
reverseField: {
type: 'belongsToMany',
name: 'resumes',
},
target: 'jobs',
through: 'matches',
},
});
await app1
.agent()
.resource('collections.fields', 'resumes')
.create({
values: {
name: 'matches2',
type: 'hasMany',
target: 'matches',
foreignKey: 'rid',
reverseField: {
name: 'resume',
},
},
});
const job1 = await app1.db.getRepository('jobs').create({});
await app1.db.getRepository('resumes').create({
values: {
jobs: [job1.get('id')],
},
});
const match1 = await app1.db.getRepository('matches').findOne();
expect(match1.toJSON()).toMatchObject({
id: 1,
rid: 1,
jid: 1,
});
await app1.destroy();
const app2 = mockServer({
database: {
tablePrefix: 'through_',
},
});
app2.plugin(PluginErrorHandler, { name: 'error-handler' });
app2.plugin(Plugin, { name: 'collection-manager' });
await app2.load();
await app2.db.sync({
force: true,
});
const job = await app2.db.getRepository('jobs').create({});
await app2.db.getRepository('resumes').create({
values: {
jobs: [job.get('id')],
},
});
const match = await app2.db.getRepository('matches').findOne();
expect(match.toJSON()).toMatchObject({
id: 1,
rid: 1,
jid: 1,
});
await app2.destroy();
});
});