mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-09 15:39:24 +08:00
* feat: dynamic import plugin client * refactor: pm * chore: improve cli * feat: improve code * feat: update dependences * feat: hello plugin * fix: plugin.enabled * fix: test error * feat: improve code * feat: pm command * feat: add samples * fix: redirect * feat: transitions * feat: bookmark * feat: add pm script
429 lines
9.5 KiB
TypeScript
429 lines
9.5 KiB
TypeScript
import { MockServer } from '@nocobase/test';
|
|
import { createApp } from '..';
|
|
|
|
describe('collections repository', () => {
|
|
let app: MockServer;
|
|
let agent;
|
|
|
|
beforeEach(async () => {
|
|
app = await createApp();
|
|
agent = app.agent();
|
|
await agent
|
|
.resource('collections')
|
|
.create({
|
|
values: {
|
|
name: 'tags',
|
|
fields: [
|
|
{
|
|
name: 'title',
|
|
type: 'string',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
await agent
|
|
.resource('collections')
|
|
.create({
|
|
values: {
|
|
name: 'foos',
|
|
fields: [
|
|
{
|
|
name: 'title',
|
|
type: 'string',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
await agent
|
|
.resource('collections.fields', 'tags')
|
|
.create({
|
|
values: {
|
|
name: 'foos',
|
|
target: 'foos',
|
|
type: 'belongsToMany',
|
|
},
|
|
});
|
|
await agent
|
|
.resource('collections')
|
|
.create({
|
|
values: {
|
|
name: 'comments',
|
|
fields: [
|
|
{
|
|
name: 'title',
|
|
type: 'string',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
await agent
|
|
.resource('collections')
|
|
.create({
|
|
values: {
|
|
name: 'posts',
|
|
fields: [
|
|
{
|
|
name: 'title',
|
|
type: 'string',
|
|
},
|
|
{
|
|
name: 'comments',
|
|
target: 'comments',
|
|
type: 'hasMany',
|
|
},
|
|
{
|
|
name: 'tags',
|
|
target: 'tags',
|
|
type: 'belongsToMany',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await app.destroy();
|
|
});
|
|
|
|
it('case 1', async () => {
|
|
const response1 = await app.agent().resource('posts').create();
|
|
const postId = response1.body.data.id;
|
|
const response2 = await app.agent().resource('posts.comments', postId).create();
|
|
expect(response2.statusCode).toBe(200);
|
|
});
|
|
|
|
it('case 2', async () => {
|
|
const response = await app.agent().resource('posts').create();
|
|
const postId = response.body.data.id;
|
|
await agent
|
|
.resource('posts.comments', postId)
|
|
.create({
|
|
values: {
|
|
title: 'comment 1',
|
|
},
|
|
});
|
|
await agent
|
|
.resource('posts.comments', postId)
|
|
.create({
|
|
values: {
|
|
title: 'comment 2',
|
|
},
|
|
});
|
|
const response2 = await agent
|
|
.resource('posts')
|
|
.list({
|
|
filter: {
|
|
'comments.title': 'comment 1',
|
|
},
|
|
});
|
|
expect(response2.body.data[0].id).toBe(1);
|
|
});
|
|
|
|
it('case 3', async () => {
|
|
const response = await app.agent().resource('posts').create();
|
|
const postId = response.body.data.id;
|
|
await agent
|
|
.resource('posts.comments', postId)
|
|
.create({
|
|
values: {
|
|
title: 'comment 1',
|
|
},
|
|
});
|
|
const response2 = await agent
|
|
.resource('posts')
|
|
.list({
|
|
filter: {
|
|
'comments.id': 3,
|
|
},
|
|
});
|
|
expect(response2.body.data.length).toBe(0);
|
|
});
|
|
|
|
it('case 4', async () => {
|
|
const response = await app.agent().resource('posts').create();
|
|
const postId = response.body.data.id;
|
|
await agent
|
|
.resource('posts.comments', postId)
|
|
.create({
|
|
values: {
|
|
title: 'comment 1',
|
|
},
|
|
});
|
|
const response2 = await agent
|
|
.resource('posts')
|
|
.list({
|
|
filter: {
|
|
$and: [
|
|
{
|
|
'comments.title': 'comment 1',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
expect(response2.body.data[0].id).toBe(1);
|
|
});
|
|
|
|
it('case 5', async () => {
|
|
const response = await app.agent().resource('posts').create();
|
|
const postId = response.body.data.id;
|
|
await app.agent().resource('posts.tags', postId).create({
|
|
values: {},
|
|
});
|
|
|
|
expect(await app.db.getRepository('tags').count()).toEqual(1);
|
|
});
|
|
|
|
it('case 6', async () => {
|
|
const response = await agent
|
|
.resource('posts')
|
|
.create({
|
|
values: {
|
|
tags: [
|
|
{},
|
|
{
|
|
title: 'Tag1',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
const postId = response.body.data.id;
|
|
const response1 = await app.agent().resource('posts.tags', postId).list();
|
|
expect(response1.body.data.length).toBe(2);
|
|
});
|
|
|
|
it('case 7', async () => {
|
|
const response = await agent
|
|
.resource('posts')
|
|
.create({
|
|
values: {
|
|
tags: [
|
|
{},
|
|
{
|
|
title: 'Tag1',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
const postId = response.body.data.id;
|
|
const response1 = await agent
|
|
.resource('posts.tags', postId)
|
|
.list({
|
|
filter: {
|
|
title: 'Tag1',
|
|
},
|
|
});
|
|
expect(response1.body.data.length).toBe(1);
|
|
});
|
|
|
|
it('case 8', async () => {
|
|
const response = await agent
|
|
.resource('posts')
|
|
.create({
|
|
values: {
|
|
tags: [
|
|
{},
|
|
{
|
|
title: 'Tag1',
|
|
},
|
|
{
|
|
title: 'Tag2',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
const postId = response.body.data.id;
|
|
const response1 = await agent
|
|
.resource('posts.tags', postId)
|
|
.list({
|
|
filter: {
|
|
$or: [{ title: 'Tag1' }, { title: 'Tag2' }],
|
|
},
|
|
});
|
|
expect(response1.body.data.length).toBe(2);
|
|
});
|
|
|
|
it('case 9', async () => {
|
|
const response = await agent
|
|
.resource('posts')
|
|
.create({
|
|
values: {
|
|
tags: [
|
|
{},
|
|
{
|
|
title: 'Tag1',
|
|
},
|
|
{
|
|
title: 'Tag2',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
const postId = response.body.data.id;
|
|
const response1 = await agent
|
|
.resource('posts.tags', postId)
|
|
.list({
|
|
filter: {
|
|
$or: [{ title: 'Tag1' }, { title: 'Tag2' }],
|
|
},
|
|
});
|
|
expect(response1.body.data.length).toBe(2);
|
|
});
|
|
|
|
it('case 10', async () => {
|
|
const response = await agent
|
|
.resource('posts')
|
|
.create({
|
|
values: {
|
|
tags: [
|
|
{},
|
|
{
|
|
title: 'Tag1',
|
|
},
|
|
{
|
|
title: 'Tag2',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
const postId = response.body.data.id;
|
|
const response1 = await agent
|
|
.resource('posts.tags', postId)
|
|
.list({
|
|
appends: ['foos'],
|
|
page: 1,
|
|
pageSize: 20,
|
|
sort: ['-createdAt', '-id'],
|
|
});
|
|
|
|
expect(response1.body.data[0]['id']).toEqual(3);
|
|
});
|
|
|
|
it('case 11', async () => {
|
|
const response = await app.agent().resource('posts').create();
|
|
const postId = response.body.data.id;
|
|
await agent
|
|
.resource('posts.comments', postId)
|
|
.create({
|
|
values: {
|
|
title: 'comment 1',
|
|
},
|
|
});
|
|
await agent
|
|
.resource('posts.comments', postId)
|
|
.create({
|
|
values: {
|
|
title: 'comment 2',
|
|
},
|
|
});
|
|
const response2 = await app.agent().resource('posts').create();
|
|
const postId2 = response2.body.data.id;
|
|
await agent
|
|
.resource('posts.comments', postId2)
|
|
.create({
|
|
values: {
|
|
title: 'comment 2',
|
|
},
|
|
});
|
|
await agent
|
|
.resource('posts.comments', postId2)
|
|
.create({
|
|
values: {
|
|
title: 'comment 2',
|
|
},
|
|
});
|
|
const response3 = await agent
|
|
.resource('posts')
|
|
.list({
|
|
filter: {
|
|
$or: [
|
|
{
|
|
'comments.title': 'comment 1',
|
|
},
|
|
{
|
|
'comments.title': 'comment 2',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
expect(response3.body.data.length).toBe(2);
|
|
});
|
|
|
|
it('case 12', async () => {
|
|
const response = await app.agent().resource('posts').create();
|
|
const postId = response.body.data.id;
|
|
await agent
|
|
.resource('posts.comments', postId)
|
|
.create({
|
|
values: {
|
|
title: 'comment 1',
|
|
},
|
|
});
|
|
await agent
|
|
.resource('posts.comments', postId)
|
|
.create({
|
|
values: {
|
|
title: 'comment 2',
|
|
},
|
|
});
|
|
await agent
|
|
.resource('posts.comments', postId)
|
|
.create({
|
|
values: {
|
|
title: 'comment 3',
|
|
},
|
|
});
|
|
const response2 = await agent
|
|
.resource('posts.comments', postId)
|
|
.list({
|
|
filter: {
|
|
$or: [
|
|
{
|
|
title: 'comment 1',
|
|
},
|
|
{
|
|
title: 'comment 2',
|
|
},
|
|
],
|
|
},
|
|
});
|
|
expect(response2.body.data.length).toBe(2);
|
|
});
|
|
|
|
it('case 13', async () => {
|
|
const tagRepository = app.db.getRepository('tags');
|
|
const tag1 = await tagRepository.create({ values: { title: 'tag1' } });
|
|
const tag2 = await tagRepository.create({ values: { title: 'tag2' } });
|
|
const tag3 = await tagRepository.create({ values: { title: 'tag3' } });
|
|
await agent
|
|
.resource('posts')
|
|
.create({
|
|
values: {
|
|
tags: [tag1.get('id'), tag3.get('id')],
|
|
},
|
|
});
|
|
await agent
|
|
.resource('posts')
|
|
.create({
|
|
values: {
|
|
tags: [tag2.get('id')],
|
|
},
|
|
});
|
|
await agent
|
|
.resource('posts')
|
|
.create({
|
|
values: {
|
|
tags: [tag2.get('id'), tag3.get('id')],
|
|
},
|
|
});
|
|
|
|
const response1 = await agent
|
|
.resource('posts')
|
|
.list({
|
|
filter: {
|
|
$or: [{ 'tags.title': 'tag1' }, { 'tags.title': 'tag3' }],
|
|
},
|
|
});
|
|
expect(response1.body.data.length).toBe(2);
|
|
});
|
|
});
|