* 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
145 lines
3.3 KiB
TypeScript
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();
|
|
});
|
|
});
|