/** * Description Validation Test * * Tests for the 400-character description validation across App and Dataset * creation and editing workflows to ensure consistent validation behavior. */ describe('Description Validation Logic', () => { // Simulate backend validation function const validateDescriptionLength = (description?: string | null) => { if (description && description.length > 400) throw new Error('Description cannot exceed 400 characters.') return description } describe('Backend Validation Function', () => { test('allows description within 400 characters', () => { const validDescription = 'x'.repeat(400) expect(() => validateDescriptionLength(validDescription)).not.toThrow() expect(validateDescriptionLength(validDescription)).toBe(validDescription) }) test('allows empty description', () => { expect(() => validateDescriptionLength('')).not.toThrow() expect(() => validateDescriptionLength(null)).not.toThrow() expect(() => validateDescriptionLength(undefined)).not.toThrow() }) test('rejects description exceeding 400 characters', () => { const invalidDescription = 'x'.repeat(401) expect(() => validateDescriptionLength(invalidDescription)).toThrow( 'Description cannot exceed 400 characters.', ) }) }) describe('Backend Validation Consistency', () => { test('App and Dataset have consistent validation limits', () => { const maxLength = 400 const validDescription = 'x'.repeat(maxLength) const invalidDescription = 'x'.repeat(maxLength + 1) // Both should accept exactly 400 characters expect(validDescription.length).toBe(400) expect(() => validateDescriptionLength(validDescription)).not.toThrow() // Both should reject 401 characters expect(invalidDescription.length).toBe(401) expect(() => validateDescriptionLength(invalidDescription)).toThrow() }) test('validation error messages are consistent', () => { const expectedErrorMessage = 'Description cannot exceed 400 characters.' // This would be the error message from both App and Dataset backend validation expect(expectedErrorMessage).toBe('Description cannot exceed 400 characters.') const invalidDescription = 'x'.repeat(401) try { validateDescriptionLength(invalidDescription) } catch (error) { expect((error as Error).message).toBe(expectedErrorMessage) } }) }) describe('Character Length Edge Cases', () => { const testCases = [ { length: 0, shouldPass: true, description: 'empty description' }, { length: 1, shouldPass: true, description: '1 character' }, { length: 399, shouldPass: true, description: '399 characters' }, { length: 400, shouldPass: true, description: '400 characters (boundary)' }, { length: 401, shouldPass: false, description: '401 characters (over limit)' }, { length: 500, shouldPass: false, description: '500 characters' }, { length: 1000, shouldPass: false, description: '1000 characters' }, ] testCases.forEach(({ length, shouldPass, description }) => { test(`handles ${description} correctly`, () => { const testDescription = length > 0 ? 'x'.repeat(length) : '' expect(testDescription.length).toBe(length) if (shouldPass) { expect(() => validateDescriptionLength(testDescription)).not.toThrow() expect(validateDescriptionLength(testDescription)).toBe(testDescription) } else { expect(() => validateDescriptionLength(testDescription)).toThrow( 'Description cannot exceed 400 characters.', ) } }) }) }) })