From 67fea783bb46820dae8ab97bc9c3687d6fe72bc0 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Tue, 29 Oct 2024 10:29:41 +0000 Subject: [PATCH] Support boolean and bigint fields having default values. --- .../server/src/api/routes/tests/row.spec.ts | 56 +++++++++++++++++++ packages/shared-core/src/table.ts | 4 +- .../types/src/documents/app/table/schema.ts | 14 +++++ 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/packages/server/src/api/routes/tests/row.spec.ts b/packages/server/src/api/routes/tests/row.spec.ts index 2980803fbc..1cb6afe58b 100644 --- a/packages/server/src/api/routes/tests/row.spec.ts +++ b/packages/server/src/api/routes/tests/row.spec.ts @@ -835,6 +835,62 @@ describe.each([ }) }) + describe("boolean column", () => { + beforeAll(async () => { + table = await config.api.table.save( + saveTableRequest({ + schema: { + active: { + name: "active", + type: FieldType.BOOLEAN, + default: "true", + }, + }, + }) + ) + }) + + it("creates a new row with a default value successfully", async () => { + const row = await config.api.row.save(table._id!, {}) + expect(row.active).toEqual(true) + }) + + it("does not use default value if value specified", async () => { + const row = await config.api.row.save(table._id!, { + active: false, + }) + expect(row.active).toEqual(false) + }) + }) + + describe("bigint column", () => { + beforeAll(async () => { + table = await config.api.table.save( + saveTableRequest({ + schema: { + bigNumber: { + name: "bigNumber", + type: FieldType.BIGINT, + default: "1234567890", + }, + }, + }) + ) + }) + + it("creates a new row with a default value successfully", async () => { + const row = await config.api.row.save(table._id!, {}) + expect(row.bigNumber).toEqual("1234567890") + }) + + it("does not use default value if value specified", async () => { + const row = await config.api.row.save(table._id!, { + bigNumber: "9876543210", + }) + expect(row.bigNumber).toEqual("9876543210") + }) + }) + describe("bindings", () => { describe("string column", () => { beforeAll(async () => { diff --git a/packages/shared-core/src/table.ts b/packages/shared-core/src/table.ts index 73e3ad6cb7..5402439d9c 100644 --- a/packages/shared-core/src/table.ts +++ b/packages/shared-core/src/table.ts @@ -57,12 +57,12 @@ const allowDefaultColumnByType: Record = { [FieldType.STRING]: true, [FieldType.OPTIONS]: true, [FieldType.ARRAY]: true, + [FieldType.BIGINT]: true, + [FieldType.BOOLEAN]: true, [FieldType.AUTO]: false, [FieldType.INTERNAL]: false, [FieldType.BARCODEQR]: false, - [FieldType.BIGINT]: false, - [FieldType.BOOLEAN]: false, [FieldType.FORMULA]: false, [FieldType.AI]: false, [FieldType.ATTACHMENTS]: false, diff --git a/packages/types/src/documents/app/table/schema.ts b/packages/types/src/documents/app/table/schema.ts index 45d0aa78d2..9e4555e1a2 100644 --- a/packages/types/src/documents/app/table/schema.ts +++ b/packages/types/src/documents/app/table/schema.ts @@ -198,6 +198,16 @@ interface BaseFieldSchema extends UIFieldMetadata { subtype?: never } +interface BooleanFieldMetadata extends BaseFieldSchema { + type: FieldType.BOOLEAN + default?: string +} + +interface BigIntFieldMetadata extends BaseFieldSchema { + type: FieldType.BIGINT + default?: string +} + interface OtherFieldMetadata extends BaseFieldSchema { type: Exclude< FieldType, @@ -214,6 +224,8 @@ interface OtherFieldMetadata extends BaseFieldSchema { | FieldType.STRING | FieldType.ARRAY | FieldType.OPTIONS + | FieldType.BOOLEAN + | FieldType.BIGINT > } @@ -233,6 +245,8 @@ export type FieldSchema = | BBReferenceSingleFieldMetadata | ArrayFieldMetadata | OptionsFieldMetadata + | BooleanFieldMetadata + | BigIntFieldMetadata export interface TableSchema { [key: string]: FieldSchema