From 9250ca8305cbb7d04dc1973b8b83346784fc361a Mon Sep 17 00:00:00 2001 From: Philip Okugbe <16838612+Philipinho@users.noreply.github.com> Date: Wed, 21 Oct 2026 20:48:49 +0100 Subject: [PATCH] fix: default page content format to json (#2596) --- .../src/core/page/dto/create-page.dto.spec.ts | 16 ++++++++++++++++ .../server/src/core/page/dto/create-page.dto.ts | 2 +- .../src/core/page/dto/update-page.dto.spec.ts | 17 +++++++++++++++++ .../server/src/core/page/dto/update-page.dto.ts | 2 +- 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 apps/server/src/core/page/dto/create-page.dto.spec.ts create mode 100644 apps/server/src/core/page/dto/update-page.dto.spec.ts diff --git a/apps/server/src/core/page/dto/create-page.dto.spec.ts b/apps/server/src/core/page/dto/create-page.dto.spec.ts new file mode 100644 index 00000000..a919c06d --- /dev/null +++ b/apps/server/src/core/page/dto/create-page.dto.spec.ts @@ -0,0 +1,16 @@ +import { plainToInstance } from 'class-transformer'; +import { validate } from 'class-validator'; +import { CreatePageDto } from './create-page.dto'; + +describe('CreatePageDto', () => { + it('defaults format to json when content is sent without one', async () => { + const dto = plainToInstance(CreatePageDto, { + spaceId: '0199f2a4-8c1e-7b3a-9d4e-2f6a8b1c3d5e', + content: { type: 'doc', content: [] }, + }); + const errors = await validate(dto); + + expect(errors.flatMap((e) => Object.keys(e.constraints ?? {}))).toEqual([]); + expect(dto.format).toBe('json'); + }); +}); diff --git a/apps/server/src/core/page/dto/create-page.dto.ts b/apps/server/src/core/page/dto/create-page.dto.ts index 2cad291c..261d8922 100644 --- a/apps/server/src/core/page/dto/create-page.dto.ts +++ b/apps/server/src/core/page/dto/create-page.dto.ts @@ -32,5 +32,5 @@ export class CreatePageDto { @ValidateIf((o) => o.content !== undefined) @Transform(({ value }) => value?.toLowerCase() ?? 'json') @IsIn(['json', 'markdown', 'html']) - format?: ContentFormat; + format?: ContentFormat = 'json'; } diff --git a/apps/server/src/core/page/dto/update-page.dto.spec.ts b/apps/server/src/core/page/dto/update-page.dto.spec.ts new file mode 100644 index 00000000..f8edfd39 --- /dev/null +++ b/apps/server/src/core/page/dto/update-page.dto.spec.ts @@ -0,0 +1,17 @@ +import { plainToInstance } from 'class-transformer'; +import { validate } from 'class-validator'; +import { UpdatePageDto } from './update-page.dto'; + +describe('UpdatePageDto', () => { + it('defaults format to json when content is sent without one', async () => { + const dto = plainToInstance(UpdatePageDto, { + pageId: '0199f2a4-8c1e-7b3a-9d4e-2f6a8b1c3d5e', + content: { type: 'doc', content: [] }, + operation: 'replace', + }); + const errors = await validate(dto); + + expect(errors.flatMap((e) => Object.keys(e.constraints ?? {}))).toEqual([]); + expect(dto.format).toBe('json'); + }); +}); diff --git a/apps/server/src/core/page/dto/update-page.dto.ts b/apps/server/src/core/page/dto/update-page.dto.ts index 026b3076..1e139f2d 100644 --- a/apps/server/src/core/page/dto/update-page.dto.ts +++ b/apps/server/src/core/page/dto/update-page.dto.ts @@ -20,5 +20,5 @@ export class UpdatePageDto extends PartialType(CreatePageDto) { @ValidateIf((o) => o.content !== undefined) @Transform(({ value }) => value?.toLowerCase() ?? 'json') @IsIn(['json', 'markdown', 'html']) - format?: ContentFormat; + format?: ContentFormat = 'json'; }