fix: uuid field (#3736)
* fix: uuid test * chore: uuid test * fix: test * fix: uuid field name support edit --------- Co-authored-by: katherinehhh <katherine_15995@163.com>
This commit is contained in:
parent
54f6597b9d
commit
5153ce9ab2
@ -28,7 +28,6 @@ export class NanoidFieldInterface extends CollectionFieldInterface {
|
|||||||
type: 'string',
|
type: 'string',
|
||||||
title: '{{t("Field name")}}',
|
title: '{{t("Field name")}}',
|
||||||
required: true,
|
required: true,
|
||||||
'x-disabled': true,
|
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'Input',
|
'x-component': 'Input',
|
||||||
description:
|
description:
|
||||||
|
@ -30,7 +30,6 @@ export class UUIDFieldInterface extends CollectionFieldInterface {
|
|||||||
type: 'string',
|
type: 'string',
|
||||||
title: '{{t("Field name")}}',
|
title: '{{t("Field name")}}',
|
||||||
required: true,
|
required: true,
|
||||||
'x-disabled': true,
|
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'Input',
|
'x-component': 'Input',
|
||||||
description:
|
description:
|
||||||
|
@ -13,19 +13,20 @@ describe('string field', () => {
|
|||||||
await db.close();
|
await db.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('define', async () => {
|
it('should create uuid field', async () => {
|
||||||
const Test = db.collection({
|
const Test = db.collection({
|
||||||
name: 'tests',
|
name: 'tests',
|
||||||
autoGenId: false,
|
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
|
name: 'uuid',
|
||||||
type: 'uuid',
|
type: 'uuid',
|
||||||
name: 'id',
|
|
||||||
primaryKey: true,
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
await Test.sync();
|
await Test.sync();
|
||||||
await Test.model.create();
|
const item = await Test.model.create();
|
||||||
|
|
||||||
|
expect(item['uuid']).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -5,7 +5,7 @@ export class UuidField extends Field {
|
|||||||
constructor(options?: any, context?: FieldContext) {
|
constructor(options?: any, context?: FieldContext) {
|
||||||
super(
|
super(
|
||||||
{
|
{
|
||||||
defaultValue: DataTypes.UUIDV4,
|
defaultValue: new DataTypes.UUIDV4(),
|
||||||
...options,
|
...options,
|
||||||
},
|
},
|
||||||
context,
|
context,
|
||||||
|
@ -85,6 +85,43 @@ describe('dumper', () => {
|
|||||||
expect(items.length).toBe(1);
|
expect(items.length).toBe(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should dump and restore uuid field', async () => {
|
||||||
|
await db.getRepository('collections').create({
|
||||||
|
values: {
|
||||||
|
name: 'tests',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
type: 'uuid',
|
||||||
|
name: 'uuid_test',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
context: {},
|
||||||
|
});
|
||||||
|
|
||||||
|
await db.getRepository('tests').create({
|
||||||
|
values: {},
|
||||||
|
});
|
||||||
|
|
||||||
|
const dumper = new Dumper(app);
|
||||||
|
|
||||||
|
const result = await dumper.dump({
|
||||||
|
groups: new Set(['required', 'custom']),
|
||||||
|
});
|
||||||
|
|
||||||
|
const restorer = new Restorer(app, {
|
||||||
|
backUpFilePath: result.filePath,
|
||||||
|
});
|
||||||
|
|
||||||
|
await restorer.restore({
|
||||||
|
groups: new Set(['required', 'custom']),
|
||||||
|
});
|
||||||
|
|
||||||
|
const testCollection = app.db.getCollection('tests');
|
||||||
|
const items = await testCollection.repository.find();
|
||||||
|
expect(items.length).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
describe('id seq', () => {
|
describe('id seq', () => {
|
||||||
let allGroups;
|
let allGroups;
|
||||||
|
|
||||||
|
@ -412,12 +412,18 @@ export class Dumper extends AppMigrator {
|
|||||||
|
|
||||||
if (collectionField) {
|
if (collectionField) {
|
||||||
// is a field
|
// is a field
|
||||||
return {
|
const fieldAttributes: any = {
|
||||||
field: attr.field,
|
field: attr.field,
|
||||||
isCollectionField: true,
|
isCollectionField: true,
|
||||||
type: collectionField.type,
|
type: collectionField.type,
|
||||||
typeOptions: collectionField.options,
|
typeOptions: collectionField.options,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (fieldAttributes.typeOptions?.defaultValue?.constructor?.name === 'UUIDV4') {
|
||||||
|
delete fieldAttributes.typeOptions.defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fieldAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
import Database, { Collection as DBCollection } from '@nocobase/database';
|
||||||
|
import Application from '@nocobase/server';
|
||||||
|
import { createApp } from '..';
|
||||||
|
|
||||||
|
describe('uuid', () => {
|
||||||
|
let db: Database;
|
||||||
|
let app: Application;
|
||||||
|
let Collection: DBCollection;
|
||||||
|
let Field: DBCollection;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
app = await createApp();
|
||||||
|
db = app.db;
|
||||||
|
Collection = db.getCollection('collections');
|
||||||
|
Field = db.getCollection('fields');
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await app.destroy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create uuid field', async () => {
|
||||||
|
await Collection.repository.create({
|
||||||
|
values: {
|
||||||
|
name: 'tests',
|
||||||
|
},
|
||||||
|
context: {},
|
||||||
|
});
|
||||||
|
|
||||||
|
await Field.repository.create({
|
||||||
|
values: {
|
||||||
|
collectionName: 'tests',
|
||||||
|
type: 'uuid',
|
||||||
|
name: 'uuid',
|
||||||
|
},
|
||||||
|
context: {},
|
||||||
|
});
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
const resp = await app.agent().resource('tests').create({});
|
||||||
|
expect(resp.status).toBe(200);
|
||||||
|
|
||||||
|
const data = resp.body.data;
|
||||||
|
expect(data['uuid']).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user