diff --git a/dbal/ts/src/core/validation/validate-component-hierarchy-create.test.ts b/dbal/ts/src/core/validation/validate-component-hierarchy-create.test.ts new file mode 100644 index 000000000..1382dfd3d --- /dev/null +++ b/dbal/ts/src/core/validation/validate-component-hierarchy-create.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from 'vitest' +import { validateComponentHierarchyCreate } from './validate-component-hierarchy-create' + +describe('validateComponentHierarchyCreate', () => { + const base = { + pageId: '550e8400-e29b-41d4-a716-446655440000', + componentType: 'Hero', + order: 0, + props: { title: 'Hello' }, + } + + it.each([ + { data: base }, + { data: { ...base, parentId: '00000000-0000-0000-0000-000000000000' } }, + ])('accepts %s', ({ data }) => { + expect(validateComponentHierarchyCreate(data)).toEqual([]) + }) + + it.each([ + { data: { ...base, pageId: 'not-a-uuid' }, message: 'pageId must be a valid UUID' }, + { data: { ...base, componentType: 'a'.repeat(101) }, message: 'componentType must be 1-100 characters' }, + { data: { ...base, order: -1 }, message: 'order must be a non-negative integer' }, + { data: { ...base, props: [] }, message: 'props must be an object' }, + ])('rejects %s', ({ data, message }) => { + expect(validateComponentHierarchyCreate(data)).toContain(message) + }) +}) diff --git a/dbal/ts/src/core/validation/validate-page-update.test.ts b/dbal/ts/src/core/validation/validate-page-update.test.ts index 061400e24..f687faeb6 100644 --- a/dbal/ts/src/core/validation/validate-page-update.test.ts +++ b/dbal/ts/src/core/validation/validate-page-update.test.ts @@ -1,34 +1,19 @@ -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' import { validatePageUpdate } from './validate-page-update' describe('validatePageUpdate', () => { it.each([ - { name: 'empty', data: {}, expected: [] }, - { - name: 'invalid slug', - data: { slug: 'Bad Slug' }, - expected: ['Invalid slug format'], - }, - { - name: 'invalid title', - data: { title: '' }, - expected: ['Invalid title (must be 1-200 characters)'], - }, - { - name: 'invalid level', - data: { level: 6 }, - expected: ['Invalid level (must be 0-5)'], - }, - { - name: 'multiple invalid', - data: { slug: 'Bad Slug', title: '', level: 6 }, - expected: [ - 'Invalid slug format', - 'Invalid title (must be 1-200 characters)', - 'Invalid level (must be 0-5)', - ], - }, - ])('returns errors for $name', ({ data, expected }) => { - expect(validatePageUpdate(data)).toEqual(expected) + { data: { title: 'Updated' } }, + { data: { level: 5 } }, + ])('accepts %s', ({ data }) => { + expect(validatePageUpdate(data)).toEqual([]) + }) + + it.each([ + { data: { slug: 'Bad Slug' }, message: 'Invalid slug format (lowercase alphanumeric, hyphen, slash, 1-255 chars)' }, + { data: { layout: [] }, message: 'Layout must be an object' }, + { data: { isActive: 'no' as unknown as boolean }, message: 'isActive must be a boolean' }, + ])('rejects %s', ({ data, message }) => { + expect(validatePageUpdate(data)).toContain(message) }) })