chenos f9f8dc78f4
refactor: plugin manager (#775)
* 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
2022-09-18 14:10:01 +08:00

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);
});
});