diff --git a/packages/core/actions/src/actions/index.ts b/packages/core/actions/src/actions/index.ts index 054956ca58..4d52699e42 100644 --- a/packages/core/actions/src/actions/index.ts +++ b/packages/core/actions/src/actions/index.ts @@ -16,6 +16,5 @@ export * from './add'; export * from './set'; export * from './remove'; export * from './toggle'; -export * from './move'; export * from './first-or-create'; export * from './update-or-create'; diff --git a/packages/core/auth/package.json b/packages/core/auth/package.json index 66d63118eb..af0e356596 100644 --- a/packages/core/auth/package.json +++ b/packages/core/auth/package.json @@ -10,7 +10,6 @@ "@nocobase/cache": "1.4.0-alpha", "@nocobase/database": "1.4.0-alpha", "@nocobase/resourcer": "1.4.0-alpha", - "@nocobase/test": "1.4.0-alpha", "@nocobase/utils": "1.4.0-alpha", "@types/jsonwebtoken": "^8.5.8", "jsonwebtoken": "^8.5.1" diff --git a/packages/core/database/src/__tests__/collection.sortable.test.ts b/packages/core/database/src/__tests__/collection.sortable.test.ts deleted file mode 100644 index 88feeff6fd..0000000000 --- a/packages/core/database/src/__tests__/collection.sortable.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -/** - * This file is part of the NocoBase (R) project. - * Copyright (c) 2020-2024 NocoBase Co., Ltd. - * Authors: NocoBase Team. - * - * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. - * For more information, please refer to: https://www.nocobase.com/agreement. - */ - -import { mockDatabase } from './index'; -import { Database } from '../database'; - -describe('collection sortable options', () => { - let db: Database; - - beforeEach(async () => { - db = mockDatabase(); - await db.clean({ drop: true }); - }); - - afterEach(async () => { - await db.close(); - }); - - test('sortable=true', async () => { - const Test = db.collection({ - name: 'test', - sortable: true, - }); - - const model = Test.model; - - await db.sync(); - const instance = await model.create(); - expect(model.rawAttributes['sort']).toBeDefined(); - expect(instance.get('sort')).toBe(1); - }); - - test('sortable=string', async () => { - const Test = db.collection({ - name: 'test', - sortable: 'order', - }); - - const model = Test.model; - - await db.sync(); - const instance = await model.create(); - expect(model.rawAttributes['order']).toBeDefined(); - expect(instance.get('order')).toBe(1); - }); - - test('sortable=object', async () => { - const Test = db.collection({ - name: 'test', - sortable: { - name: 'sort', - scopeKey: 'status', - }, - fields: [{ type: 'string', name: 'status' }], - }); - - await db.sync(); - - const t1 = await Test.model.create({ status: 'publish' }); - const t2 = await Test.model.create({ status: 'publish' }); - const t3 = await Test.model.create({ status: 'draft' }); - const t4 = await Test.model.create({ status: 'draft' }); - - expect(t1.get('sort')).toBe(1); - expect(t2.get('sort')).toBe(2); - expect(t3.get('sort')).toBe(1); - expect(t4.get('sort')).toBe(2); - }); -}); diff --git a/packages/core/lock-manager/package.json b/packages/core/lock-manager/package.json index de68254230..b3296dd5b0 100644 --- a/packages/core/lock-manager/package.json +++ b/packages/core/lock-manager/package.json @@ -1,12 +1,12 @@ { "name": "@nocobase/lock-manager", - "version": "1.3.0-alpha", + "version": "1.4.0-alpha", "main": "lib/index.js", "license": "AGPL-3.0", "dependencies": { }, "devDependencies": { - "@nocobase/utils": "1.3.0-alpha", + "@nocobase/utils": "1.4.0-alpha", "async-mutex": "^0.5.0" } } diff --git a/packages/core/server/src/application.ts b/packages/core/server/src/application.ts index 6e99688f4c..369716237e 100644 --- a/packages/core/server/src/application.ts +++ b/packages/core/server/src/application.ts @@ -37,7 +37,6 @@ import lodash from 'lodash'; import { RecordableHistogram } from 'node:perf_hooks'; import path, { basename, resolve } from 'path'; import semver from 'semver'; -import packageJson from '../package.json'; import { createACL } from './acl'; import { AppCommand } from './app-command'; import { AppSupervisor } from './app-supervisor'; @@ -64,6 +63,8 @@ import { InstallOptions, PluginManager } from './plugin-manager'; import { createPubSubManager, PubSubManager, PubSubManagerOptions } from './pub-sub-manager'; import { SyncMessageManager } from './sync-message-manager'; +import packageJson from '../package.json'; + export type PluginType = string | typeof Plugin; export type PluginConfiguration = PluginType | [PluginType, any]; diff --git a/packages/plugins/@nocobase/plugin-acl/src/server/__tests__/prepare.ts b/packages/plugins/@nocobase/plugin-acl/src/server/__tests__/prepare.ts index 406fd37556..349d26cc39 100644 --- a/packages/plugins/@nocobase/plugin-acl/src/server/__tests__/prepare.ts +++ b/packages/plugins/@nocobase/plugin-acl/src/server/__tests__/prepare.ts @@ -16,6 +16,7 @@ export async function prepareApp(): Promise { plugins: [ 'acl', 'error-handler', + 'field-sort', 'users', 'ui-schema-storage', 'data-source-main', diff --git a/packages/plugins/@nocobase/plugin-acl/src/server/__tests__/role-user.test.ts b/packages/plugins/@nocobase/plugin-acl/src/server/__tests__/role-user.test.ts index 9a17205654..9d51ed6552 100644 --- a/packages/plugins/@nocobase/plugin-acl/src/server/__tests__/role-user.test.ts +++ b/packages/plugins/@nocobase/plugin-acl/src/server/__tests__/role-user.test.ts @@ -20,7 +20,7 @@ describe('role', () => { beforeEach(async () => { api = await createMockServer({ - plugins: ['users', 'acl', 'auth', 'data-source-manager'], + plugins: ['field-sort', 'users', 'acl', 'auth', 'data-source-manager'], }); db = api.db; usersPlugin = api.getPlugin('users'); diff --git a/packages/plugins/@nocobase/plugin-action-custom-request/src/server/__tests__/actions.test.ts b/packages/plugins/@nocobase/plugin-action-custom-request/src/server/__tests__/actions.test.ts index 72aeae12e1..4013434921 100644 --- a/packages/plugins/@nocobase/plugin-action-custom-request/src/server/__tests__/actions.test.ts +++ b/packages/plugins/@nocobase/plugin-action-custom-request/src/server/__tests__/actions.test.ts @@ -22,7 +22,7 @@ describe('actions', () => { app = await createMockServer({ registerActions: true, acl: true, - plugins: ['users', 'auth', 'acl', 'action-custom-request', 'data-source-manager'], + plugins: ['field-sort', 'users', 'auth', 'acl', 'action-custom-request', 'data-source-manager'], }); db = app.db; repo = db.getRepository('customRequests'); diff --git a/packages/plugins/@nocobase/plugin-api-keys/src/server/__tests__/actions.test.ts b/packages/plugins/@nocobase/plugin-api-keys/src/server/__tests__/actions.test.ts index 0a7921b7e6..35125d745e 100644 --- a/packages/plugins/@nocobase/plugin-api-keys/src/server/__tests__/actions.test.ts +++ b/packages/plugins/@nocobase/plugin-api-keys/src/server/__tests__/actions.test.ts @@ -32,7 +32,7 @@ describe('actions', () => { app = await createMockServer({ registerActions: true, acl: true, - plugins: ['users', 'auth', 'api-keys', 'acl', 'data-source-manager'], + plugins: ['field-sort', 'users', 'auth', 'api-keys', 'acl', 'data-source-manager'], }); db = app.db; diff --git a/packages/plugins/@nocobase/plugin-auth-sms/src/server/__tests__/signin.test.ts b/packages/plugins/@nocobase/plugin-auth-sms/src/server/__tests__/signin.test.ts index b0895c8d3c..203050a25b 100644 --- a/packages/plugins/@nocobase/plugin-auth-sms/src/server/__tests__/signin.test.ts +++ b/packages/plugins/@nocobase/plugin-auth-sms/src/server/__tests__/signin.test.ts @@ -30,7 +30,7 @@ describe('signin', () => { beforeAll(async () => { app = await createMockServer({ - plugins: ['users', 'auth', 'verification', 'acl', 'auth-sms', 'data-source-manager'], + plugins: ['field-sort', 'users', 'auth', 'verification', 'acl', 'auth-sms', 'data-source-manager'], }); db = app.db; agent = app.agent(); diff --git a/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/actions.test.ts b/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/actions.test.ts index c5f87ca261..46316e2aed 100644 --- a/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/actions.test.ts +++ b/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/actions.test.ts @@ -19,7 +19,7 @@ describe('actions', () => { beforeAll(async () => { app = await createMockServer({ - plugins: ['auth'], + plugins: ['field-sort', 'auth'], }); db = app.db; repo = db.getRepository('authenticators'); @@ -95,7 +95,7 @@ describe('actions', () => { process.env.INIT_ROOT_PASSWORD = '123456'; process.env.INIT_ROOT_NICKNAME = 'Test'; app = await createMockServer({ - plugins: ['auth', 'users'], + plugins: ['field-sort', 'auth', 'users'], }); db = app.db; agent = app.agent(); diff --git a/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/auth-model.test.ts b/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/auth-model.test.ts index 134972ac90..757d52dc34 100644 --- a/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/auth-model.test.ts +++ b/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/auth-model.test.ts @@ -18,7 +18,7 @@ describe('AuthModel', () => { beforeEach(async () => { app = await createMockServer({ - plugins: ['auth', 'users'], + plugins: ['field-sort', 'auth', 'users'], }); db = app.db; repo = db.getRepository('authenticators'); diff --git a/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/auth.test.ts b/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/auth.test.ts index c911251c93..ce23374eea 100644 --- a/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/auth.test.ts +++ b/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/auth.test.ts @@ -19,7 +19,7 @@ describe('auth', () => { beforeEach(async () => { app = await createMockServer({ - plugins: ['users', 'auth'], + plugins: ['field-sort', 'users', 'auth'], }); db = app.db; diff --git a/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/token-blacklist.test.ts b/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/token-blacklist.test.ts index aa476d912f..3601b4ec86 100644 --- a/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/token-blacklist.test.ts +++ b/packages/plugins/@nocobase/plugin-auth/src/server/__tests__/token-blacklist.test.ts @@ -19,7 +19,7 @@ describe('token-blacklist', () => { beforeAll(async () => { app = await createMockServer({ - plugins: ['auth'], + plugins: ['field-sort', 'auth'], }); db = app.db; repo = db.getRepository('tokenBlacklist'); diff --git a/packages/plugins/@nocobase/plugin-collection-sql/src/server/__tests__/actions.test.ts b/packages/plugins/@nocobase/plugin-collection-sql/src/server/__tests__/actions.test.ts index 0685eae2ce..f61371f9ee 100644 --- a/packages/plugins/@nocobase/plugin-collection-sql/src/server/__tests__/actions.test.ts +++ b/packages/plugins/@nocobase/plugin-collection-sql/src/server/__tests__/actions.test.ts @@ -18,7 +18,7 @@ describe('sql collection', () => { beforeEach(async () => { app = await createMockServer({ - plugins: ['data-source-main', 'error-handler', 'collection-sql'], + plugins: ['field-sort', 'data-source-main', 'error-handler', 'collection-sql'], }); db = app.db; db.options.underscored = false; diff --git a/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/prepare.ts b/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/prepare.ts index 73cbb6baad..be6b114658 100644 --- a/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/prepare.ts +++ b/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/prepare.ts @@ -16,6 +16,7 @@ export async function prepareApp(): Promise { plugins: [ 'acl', 'error-handler', + 'field-sort', 'users', 'ui-schema-storage', 'data-source-main', @@ -32,6 +33,7 @@ export async function createApp(options: any = {}) { acl: false, ...options, plugins: [ + 'field-sort', 'data-source-main', 'users', 'collection-tree', @@ -47,7 +49,14 @@ export async function createAppWithNoUsersPlugin(options: any = {}) { const app = await createMockServer({ acl: false, ...options, - plugins: ['data-source-main', 'collection-tree', 'error-handler', 'data-source-manager', 'ui-schema-storage'], + plugins: [ + 'field-sort', + 'data-source-main', + 'collection-tree', + 'error-handler', + 'data-source-manager', + 'ui-schema-storage', + ], }); return app; } diff --git a/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/sync.test.ts b/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/sync.test.ts index 2a1aae5043..f35c67e2fb 100644 --- a/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/sync.test.ts +++ b/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/sync.test.ts @@ -18,7 +18,7 @@ describe('tree collection sync', async () => { beforeEach(async () => { app = await createMockServer({ version: '1.3.0-alpha', - plugins: ['data-source-main', 'data-source-manager', 'error-handler', 'collection-tree'], + plugins: ['field-sort', 'data-source-main', 'data-source-manager', 'error-handler', 'collection-tree'], }); db = app.db; }); @@ -61,7 +61,7 @@ describe('collection tree migrate test', () => { beforeEach(async () => { app = await createMockServer({ version: '1.3.0-alpha', - plugins: ['data-source-main', 'data-source-manager', 'error-handler', 'collection-tree'], + plugins: ['field-sort', 'data-source-main', 'data-source-manager', 'error-handler', 'collection-tree'], }); db = app.db; repo = app.db.getRepository('applicationPlugins'); diff --git a/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/tree.test.ts b/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/tree.test.ts index 94bb64d0c5..2bf4d3fdd4 100644 --- a/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/tree.test.ts +++ b/packages/plugins/@nocobase/plugin-collection-tree/src/server/__tests__/tree.test.ts @@ -42,7 +42,8 @@ describe('tree', () => { }); const userPlugin = app.getPlugin('users'); - const agent = app.agent().login(user).set('X-With-ACL-Meta', true); + const agent = app.agent().login(user); + agent.set('X-With-ACL-Meta', 'true'); app.acl.allow('table_a', ['*']); app.acl.allow('collections', ['*']); diff --git a/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/cluster.test.ts b/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/cluster.test.ts index ce64564fc2..d920c0aced 100644 --- a/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/cluster.test.ts +++ b/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/cluster.test.ts @@ -13,7 +13,7 @@ describe('cluster', () => { let cluster; beforeEach(async () => { cluster = await createMockCluster({ - plugins: ['error-handler', 'data-source-main', 'ui-schema-storage'], + plugins: ['error-handler', 'field-sort', 'data-source-main', 'ui-schema-storage'], acl: false, }); }); diff --git a/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/through.test.ts b/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/through.test.ts index 4a7bc55c51..9464de85fd 100644 --- a/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/through.test.ts +++ b/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/through.test.ts @@ -16,7 +16,7 @@ describe('collections repository', () => { tablePrefix: 'through_', }, acl: false, - plugins: ['error-handler', 'data-source-main'], + plugins: ['error-handler', 'field-sort', 'data-source-main'], }); await app1 @@ -121,7 +121,7 @@ describe('collections repository', () => { await app1.destroy(); const app2 = await startMockServer({ - plugins: ['error-handler', 'data-source-main'], + plugins: ['error-handler', 'field-sort', 'data-source-main'], database: { tablePrefix: 'through_', database: app1.db.options.database, diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/api.test.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/api.test.ts index 6ca72cdd16..5978dec1e1 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/api.test.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/api.test.ts @@ -20,7 +20,7 @@ describe('api', () => { beforeAll(async () => { app = await createMockServer({ acl: true, - plugins: ['users', 'auth', 'data-visualization'], + plugins: ['field-sort', 'users', 'auth', 'data-visualization'], }); db = app.db; diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/external-data-source.test.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/external-data-source.test.ts index 32bd4d9bb9..64188cd2b2 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/external-data-source.test.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/external-data-source.test.ts @@ -19,7 +19,7 @@ describe('external data source', () => { beforeAll(async () => { process.env.INIT_ROOT_USERNAME = 'test'; app = await createMockServer({ - plugins: ['data-source-manager', 'users', 'acl'], + plugins: ['field-sort', 'data-source-manager', 'users', 'acl'], }); db = app.db; ctx = { diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/query.test.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/query.test.ts index 814aa29f69..0f38380655 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/query.test.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/server/__tests__/query.test.ts @@ -29,7 +29,7 @@ describe('query', () => { let db: Database; beforeAll(async () => { app = await createMockServer({ - plugins: ['data-source-manager', 'users', 'acl'], + plugins: ['field-sort', 'data-source-manager', 'users', 'acl'], }); db = app.db; db.options.underscored = true; diff --git a/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/belongs-to-array-field.test.ts b/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/belongs-to-array-field.test.ts index 5d0f9feee1..2fa2c42f66 100644 --- a/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/belongs-to-array-field.test.ts +++ b/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/belongs-to-array-field.test.ts @@ -17,7 +17,7 @@ describe('belongs to array field', () => { beforeEach(async () => { app = await createMockServer({ - plugins: ['field-m2m-array', 'data-source-manager', 'data-source-main', 'error-handler'], + plugins: ['field-m2m-array', 'data-source-manager', 'field-sort', 'data-source-main', 'error-handler'], }); db = app.db; fieldRepo = db.getRepository('fields'); diff --git a/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/m2m-array-bigint-api.test.ts b/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/m2m-array-bigint-api.test.ts index 5eef17ccda..daae9ce8b6 100644 --- a/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/m2m-array-bigint-api.test.ts +++ b/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/m2m-array-bigint-api.test.ts @@ -17,7 +17,7 @@ describe('m2m array api, bigInt targetKey', () => { beforeEach(async () => { app = await createMockServer({ - plugins: ['field-m2m-array', 'data-source-manager', 'data-source-main', 'error-handler'], + plugins: ['field-m2m-array', 'data-source-manager', 'field-sort', 'data-source-main', 'error-handler'], }); db = app.db; await db.getRepository('collections').create({ diff --git a/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/m2m-array-string-api.test.ts b/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/m2m-array-string-api.test.ts index 76e4cc79d0..79bfecd02d 100644 --- a/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/m2m-array-string-api.test.ts +++ b/packages/plugins/@nocobase/plugin-field-m2m-array/src/server/__tests__/m2m-array-string-api.test.ts @@ -17,7 +17,7 @@ describe('m2m array api, string targetKey', () => { beforeEach(async () => { app = await createMockServer({ - plugins: ['field-m2m-array', 'data-source-manager', 'data-source-main', 'error-handler'], + plugins: ['field-m2m-array', 'data-source-manager', 'field-sort', 'data-source-main', 'error-handler'], }); db = app.db; await db.getRepository('collections').create({ diff --git a/packages/plugins/@nocobase/plugin-field-sort/package.json b/packages/plugins/@nocobase/plugin-field-sort/package.json index 78bde7f07a..29fd0cca19 100644 --- a/packages/plugins/@nocobase/plugin-field-sort/package.json +++ b/packages/plugins/@nocobase/plugin-field-sort/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-field-sort", - "version": "1.3.0-alpha", + "version": "1.4.0-alpha", "main": "dist/server/index.js", "dependencies": {}, "peerDependencies": { diff --git a/packages/core/actions/src/__tests__/move-action.test.ts b/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/move-action.test.ts similarity index 96% rename from packages/core/actions/src/__tests__/move-action.test.ts rename to packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/move-action.test.ts index d9c6cf916d..8c85622d07 100644 --- a/packages/core/actions/src/__tests__/move-action.test.ts +++ b/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/move-action.test.ts @@ -7,22 +7,30 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ -import { mockServer, MockServer } from './index'; -import { registerActions } from '@nocobase/actions'; +import { createMockServer, MockServer } from '@nocobase/test'; import { Collection, Database } from '@nocobase/database'; import { waitSecond } from '@nocobase/test'; -describe('sort action', () => { - describe('associations', () => { - let api: MockServer; +import Plugin from '..'; +describe('sort action', () => { + let api: MockServer; + let db: Database; + + beforeEach(async () => { + api = await createMockServer({ + plugins: [Plugin, 'data-source-main', 'error-handler'], + }); + }); + + afterEach(async () => { + return api.destroy(); + }); + + describe('associations', () => { let UserCollection: Collection; beforeEach(async () => { - api = mockServer(); - - registerActions(api); - UserCollection = api.db.collection({ name: 'users', fields: [ @@ -67,10 +75,6 @@ describe('sort action', () => { } }); - afterEach(async () => { - return api.destroy(); - }); - it('should not move association items when association not sortable', async () => { const u1 = await api.db.getRepository('users').findOne({ filter: { @@ -143,7 +147,7 @@ describe('sort action', () => { }); expect(u1Posts.body).toMatchObject({ - rows: [ + data: [ { title: 'u1p2', }, @@ -162,12 +166,7 @@ describe('sort action', () => { }); describe('same scope', () => { - let api: MockServer; - beforeEach(async () => { - api = mockServer(); - - registerActions(api); api.db.collection({ name: 'tests', fields: [ @@ -202,7 +201,7 @@ describe('sort action', () => { }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't2', sort: 1, @@ -237,7 +236,7 @@ describe('sort action', () => { }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't3', sort: 1, @@ -272,7 +271,7 @@ describe('sort action', () => { sort: ['sort2'], }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't2', sort2: 1, @@ -306,7 +305,7 @@ describe('sort action', () => { sort: ['sort'], }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't3', sort: 0, @@ -329,14 +328,9 @@ describe('sort action', () => { }); describe('different scope', () => { - let api: MockServer; - let db: Database; - beforeEach(async () => { - api = mockServer(); db = api.db; - registerActions(api); api.db.collection({ name: 'tests', fields: [ @@ -495,7 +489,7 @@ describe('sort action', () => { }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't12', sort: 2, @@ -520,7 +514,7 @@ describe('sort action', () => { }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't21', sort: 1, @@ -561,7 +555,7 @@ describe('sort action', () => { }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't12', sort: 2, @@ -584,7 +578,7 @@ describe('sort action', () => { filter: { state: 2 }, }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't21', sort: 1, @@ -622,7 +616,7 @@ describe('sort action', () => { filter: { state: 1 }, }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't11', sort: 1, @@ -653,7 +647,7 @@ describe('sort action', () => { filter: { state: 2 }, }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't21', sort: 1, @@ -684,7 +678,7 @@ describe('sort action', () => { filter: { state: 1 }, }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't11', sort: 1, @@ -715,7 +709,7 @@ describe('sort action', () => { filter: { state: 2 }, }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't21', sort: 1, @@ -750,7 +744,7 @@ describe('sort action', () => { filter: { state: 1 }, }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't12', sort: 2, @@ -773,7 +767,7 @@ describe('sort action', () => { filter: { state: 2 }, }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't21', sort: 1, @@ -817,7 +811,7 @@ describe('sort action', () => { filter: { state: 1 }, }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't12', }, @@ -837,7 +831,7 @@ describe('sort action', () => { filter: { state: 2 }, }); expect(response.body).toMatchObject({ - rows: [ + data: [ { title: 't11', }, diff --git a/packages/core/actions/src/__tests__/sort-collection.test.ts b/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort-collection.test.ts similarity index 75% rename from packages/core/actions/src/__tests__/sort-collection.test.ts rename to packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort-collection.test.ts index 2b329033c7..a89c7c9199 100644 --- a/packages/core/actions/src/__tests__/sort-collection.test.ts +++ b/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort-collection.test.ts @@ -7,16 +7,23 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ -import { mockServer } from './index'; -import { SortAbleCollection } from '../actions'; import lodash from 'lodash'; +import Database from '@nocobase/database'; +import { createMockServer, MockServer } from '@nocobase/test'; +import { SortableCollection } from '../action'; +import Plugin from '..'; describe('sort collections', () => { - let app; + let app: MockServer; + let db: Database; let Post; beforeEach(async () => { - app = mockServer(); + app = await createMockServer({ + plugins: ['error-handler', Plugin, 'data-source-main'], + }); + + db = app.db; }); afterEach(async () => { @@ -50,6 +57,57 @@ describe('sort collections', () => { } }); + test('sortable=true', async () => { + const Test = db.collection({ + name: 'test', + sortable: true, + }); + + const model = Test.model; + + await db.sync(); + const instance = await model.create(); + expect(model.rawAttributes['sort']).toBeDefined(); + expect(instance.get('sort')).toBe(1); + }); + + test('sortable=string', async () => { + const Test = db.collection({ + name: 'test', + sortable: 'order', + }); + + const model = Test.model; + + await db.sync(); + const instance = await model.create(); + expect(model.rawAttributes['order']).toBeDefined(); + expect(instance.get('order')).toBe(1); + }); + + test('sortable=object', async () => { + const Test = db.collection({ + name: 'test', + sortable: { + name: 'sort', + scopeKey: 'status', + }, + fields: [{ type: 'string', name: 'status' }], + }); + + await db.sync(); + + const t1 = await Test.model.create({ status: 'publish' }); + const t2 = await Test.model.create({ status: 'publish' }); + const t3 = await Test.model.create({ status: 'draft' }); + const t4 = await Test.model.create({ status: 'draft' }); + + expect(t1.get('sort')).toBe(1); + expect(t2.get('sort')).toBe(2); + expect(t3.get('sort')).toBe(1); + expect(t4.get('sort')).toBe(2); + }); + test('forward insert', async () => { const t2 = await Post.repository.findOne({ filter: { @@ -62,7 +120,7 @@ describe('sort collections', () => { title: 't4', }, }); - const sortCollection = new SortAbleCollection(Post); + const sortCollection = new SortableCollection(Post); await sortCollection.move(t2.get('id'), t4.get('id')); @@ -95,7 +153,7 @@ describe('sort collections', () => { title: 't4', }, }); - const sortCollection = new SortAbleCollection(Post); + const sortCollection = new SortableCollection(Post); await sortCollection.move(t4.get('id'), t2.get('id')); @@ -173,7 +231,7 @@ describe('sort collections', () => { }, }); - const sortCollection = new SortAbleCollection(Post); + const sortCollection = new SortableCollection(Post); await sortCollection.move(s1t2.get('id'), s1t4.get('id')); const results = ( await Post.repository.find({ @@ -245,7 +303,7 @@ describe('sort collections', () => { }, }); - const sortCollection = new SortAbleCollection(Post); + const sortCollection = new SortableCollection(Post); await sortCollection.move(s1t1.get('id'), s2t3.get('id')); diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort.test.ts b/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort.test.ts index 562eb13a38..1e66e81f49 100644 --- a/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort.test.ts +++ b/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort.test.ts @@ -7,23 +7,24 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ -import { Database, mockDatabase } from '@nocobase/database'; -import { SortField } from '../sort-field'; +import { Database } from '@nocobase/database'; +import { createMockServer, MockServer } from '@nocobase/test'; + +import Plugin from '..'; describe('string field', () => { + let app: MockServer; let db: Database; beforeEach(async () => { - db = mockDatabase(); - await db.clean({ drop: true }); - - db.registerFieldTypes({ - sort: SortField, + app = await createMockServer({ + plugins: [Plugin, 'data-source-main', 'error-handler'], }); + db = app.db; }); afterEach(async () => { - await db.close(); + await app.destroy(); }); it('should init with camelCase scope key', async () => { diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/server/action.ts b/packages/plugins/@nocobase/plugin-field-sort/src/server/action.ts index 0df4884854..bebfcdb376 100644 --- a/packages/plugins/@nocobase/plugin-field-sort/src/server/action.ts +++ b/packages/plugins/@nocobase/plugin-field-sort/src/server/action.ts @@ -36,21 +36,21 @@ export async function move(ctx: Context, next) { sortField = `${repository.association.foreignKey}Sort`; } - const sortAbleCollection = new SortAbleCollection(repository.collection, sortField); + const sortableCollection = new SortableCollection(repository.collection, sortField); if (sourceId && targetId) { - await sortAbleCollection.move(sourceId, targetId, { + await sortableCollection.move(sourceId, targetId, { insertAfter: method === 'insertAfter', }); } // change scope if (sourceId && targetScope) { - await sortAbleCollection.changeScope(sourceId, targetScope, method); + await sortableCollection.changeScope(sourceId, targetScope, method); } if (sourceId && sticky) { - await sortAbleCollection.sticky(sourceId); + await sortableCollection.sticky(sourceId); } ctx.body = 'ok'; @@ -66,7 +66,7 @@ interface MoveOptions { insertAfter?: boolean; } -export class SortAbleCollection { +export class SortableCollection { collection: Collection; field: SortField; scopeKey: string; diff --git a/packages/plugins/@nocobase/plugin-file-manager/src/server/__tests__/index.ts b/packages/plugins/@nocobase/plugin-file-manager/src/server/__tests__/index.ts index 4f5c3b3bb9..50d3c82073 100644 --- a/packages/plugins/@nocobase/plugin-file-manager/src/server/__tests__/index.ts +++ b/packages/plugins/@nocobase/plugin-file-manager/src/server/__tests__/index.ts @@ -18,7 +18,7 @@ export async function getApp(options = {}): Promise { cors: { origin: '*', }, - plugins: ['users', 'auth', 'file-manager'], + plugins: ['field-sort', 'users', 'auth', 'file-manager'], }); app.use(async (ctx, next) => { diff --git a/packages/plugins/@nocobase/plugin-localization/src/server/__tests__/sync.test.ts b/packages/plugins/@nocobase/plugin-localization/src/server/__tests__/sync.test.ts index 561ec4fe6b..1551e57a97 100644 --- a/packages/plugins/@nocobase/plugin-localization/src/server/__tests__/sync.test.ts +++ b/packages/plugins/@nocobase/plugin-localization/src/server/__tests__/sync.test.ts @@ -22,6 +22,7 @@ describe('sync', () => { app = await createMockServer({ plugins: [ // 'data-source-manager', + 'field-sort', 'data-source-main', 'localization', 'ui-schema-storage', diff --git a/packages/plugins/@nocobase/plugin-multi-app-manager/src/server/__tests__/mock-get-schema.test.ts b/packages/plugins/@nocobase/plugin-multi-app-manager/src/server/__tests__/mock-get-schema.test.ts index f016f6c7d2..3fb6f39b91 100644 --- a/packages/plugins/@nocobase/plugin-multi-app-manager/src/server/__tests__/mock-get-schema.test.ts +++ b/packages/plugins/@nocobase/plugin-multi-app-manager/src/server/__tests__/mock-get-schema.test.ts @@ -44,7 +44,7 @@ describe('test with start', () => { }; const app = await createMockServer({ - plugins: ['multi-app-manager'], + plugins: ['field-sort', 'multi-app-manager'], }); const db = app.db; @@ -74,7 +74,7 @@ describe('test with start', () => { it('should install into difference database', async () => { const app = await createMockServer({ - plugins: ['multi-app-manager'], + plugins: ['field-sort', 'multi-app-manager'], }); const db = app.db; @@ -85,7 +85,7 @@ describe('test with start', () => { values: { name, options: { - plugins: ['ui-schema-storage'], + plugins: ['field-sort', 'ui-schema-storage'], }, }, context: { diff --git a/packages/plugins/@nocobase/plugin-multi-app-share-collection/src/server/__tests__/index.ts b/packages/plugins/@nocobase/plugin-multi-app-share-collection/src/server/__tests__/index.ts index f965544dea..9a9352fce5 100644 --- a/packages/plugins/@nocobase/plugin-multi-app-share-collection/src/server/__tests__/index.ts +++ b/packages/plugins/@nocobase/plugin-multi-app-share-collection/src/server/__tests__/index.ts @@ -13,7 +13,14 @@ export async function createApp(options = {}) { const app = await createMockServer({ acl: false, ...options, - plugins: ['users', 'error-handler', 'data-source-main', 'multi-app-manager', 'multi-app-share-collection'], + plugins: [ + 'field-sort', + 'users', + 'error-handler', + 'data-source-main', + 'multi-app-manager', + 'multi-app-share-collection', + ], }); return app; diff --git a/packages/plugins/@nocobase/plugin-snapshot-field/src/server/__tests__/fieldsHistory.test.ts b/packages/plugins/@nocobase/plugin-snapshot-field/src/server/__tests__/fieldsHistory.test.ts index 4cf166665b..6a7158ba1e 100644 --- a/packages/plugins/@nocobase/plugin-snapshot-field/src/server/__tests__/fieldsHistory.test.ts +++ b/packages/plugins/@nocobase/plugin-snapshot-field/src/server/__tests__/fieldsHistory.test.ts @@ -16,7 +16,7 @@ describe('actions', () => { app = await createMockServer({ registerActions: true, acl: false, - plugins: ['error-handler', 'users', 'ui-schema-storage', 'data-source-main', 'snapshot-field'], + plugins: ['error-handler', 'field-sort', 'users', 'ui-schema-storage', 'data-source-main', 'snapshot-field'], }); }); diff --git a/packages/plugins/@nocobase/plugin-snapshot-field/src/server/__tests__/snapshots.test.ts b/packages/plugins/@nocobase/plugin-snapshot-field/src/server/__tests__/snapshots.test.ts index d0e1407e63..48adce4f19 100644 --- a/packages/plugins/@nocobase/plugin-snapshot-field/src/server/__tests__/snapshots.test.ts +++ b/packages/plugins/@nocobase/plugin-snapshot-field/src/server/__tests__/snapshots.test.ts @@ -27,7 +27,7 @@ describe('actions', () => { app = await createMockServer({ registerActions: true, acl: false, - plugins: ['error-handler', 'users', 'ui-schema-storage', 'data-source-main', 'snapshot-field'], + plugins: ['error-handler', 'field-sort', 'users', 'ui-schema-storage', 'data-source-main', 'snapshot-field'], }); }); diff --git a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook-impl.test.ts b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook-impl.test.ts index 8e375ca816..ded50478ee 100644 --- a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook-impl.test.ts +++ b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook-impl.test.ts @@ -26,6 +26,7 @@ describe('server hooks', () => { registerActions: true, plugins: [ 'ui-schema-storage', + 'field-sort', 'data-source-main', 'field-sort', 'error-handler', diff --git a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook.test.ts b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook.test.ts index 1cf1b4adda..0ab94a035d 100644 --- a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook.test.ts +++ b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook.test.ts @@ -65,7 +65,7 @@ describe('server hooks', () => { beforeEach(async () => { app = await createMockServer({ registerActions: true, - plugins: ['ui-schema-storage', 'data-source-main', 'error-handler'], + plugins: ['ui-schema-storage', 'field-sort', 'data-source-main', 'error-handler'], }); db = app.db; diff --git a/packages/plugins/@nocobase/plugin-users/src/server/__tests__/actions.test.ts b/packages/plugins/@nocobase/plugin-users/src/server/__tests__/actions.test.ts index 592a504947..831aac71f0 100644 --- a/packages/plugins/@nocobase/plugin-users/src/server/__tests__/actions.test.ts +++ b/packages/plugins/@nocobase/plugin-users/src/server/__tests__/actions.test.ts @@ -23,7 +23,7 @@ describe('actions', () => { process.env.INIT_ROOT_PASSWORD = '123456'; process.env.INIT_ROOT_NICKNAME = 'Test'; app = await createMockServer({ - plugins: ['auth', 'users', 'acl', 'data-source-manager'], + plugins: ['field-sort', 'auth', 'users', 'acl', 'data-source-manager'], }); db = app.db; diff --git a/packages/plugins/@nocobase/plugin-users/src/server/__tests__/fields.test.ts b/packages/plugins/@nocobase/plugin-users/src/server/__tests__/fields.test.ts index 05e6b2d758..07dfcf08ed 100644 --- a/packages/plugins/@nocobase/plugin-users/src/server/__tests__/fields.test.ts +++ b/packages/plugins/@nocobase/plugin-users/src/server/__tests__/fields.test.ts @@ -18,7 +18,7 @@ describe('createdBy/updatedBy', () => { beforeEach(async () => { api = await createMockServer({ - plugins: ['acl', 'users', 'data-source-main', 'error-handler', 'data-source-manager'], + plugins: ['acl', 'field-sort', 'users', 'data-source-main', 'error-handler', 'data-source-manager'], }); db = api.db; diff --git a/packages/plugins/@nocobase/plugin-users/src/server/__tests__/model.test.ts b/packages/plugins/@nocobase/plugin-users/src/server/__tests__/model.test.ts index 8883f9f8fb..dada1e54dc 100644 --- a/packages/plugins/@nocobase/plugin-users/src/server/__tests__/model.test.ts +++ b/packages/plugins/@nocobase/plugin-users/src/server/__tests__/model.test.ts @@ -17,7 +17,7 @@ describe('models', () => { beforeEach(async () => { app = await createMockServer({ - plugins: ['auth', 'users'], + plugins: ['field-sort', 'auth', 'users'], }); db = app.db; }); diff --git a/packages/plugins/@nocobase/plugin-users/src/server/__tests__/role-users.test.ts b/packages/plugins/@nocobase/plugin-users/src/server/__tests__/role-users.test.ts index 5fdd261f02..fc4f9a08a3 100644 --- a/packages/plugins/@nocobase/plugin-users/src/server/__tests__/role-users.test.ts +++ b/packages/plugins/@nocobase/plugin-users/src/server/__tests__/role-users.test.ts @@ -18,7 +18,7 @@ describe('actions', () => { beforeAll(async () => { app = await createMockServer({ - plugins: ['acl', 'users', 'data-source-manager'], + plugins: ['acl', 'field-sort', 'users', 'data-source-manager'], }); db = app.db; repo = db.getRepository('users'); diff --git a/packages/plugins/@nocobase/plugin-workflow-test/src/server/index.ts b/packages/plugins/@nocobase/plugin-workflow-test/src/server/index.ts index 070b41c79d..786f1dc722 100644 --- a/packages/plugins/@nocobase/plugin-workflow-test/src/server/index.ts +++ b/packages/plugins/@nocobase/plugin-workflow-test/src/server/index.ts @@ -43,6 +43,7 @@ export async function getApp({ const app = await createMockServer({ ...options, plugins: [ + 'field-sort', [ 'workflow', {