import { describe, expect, it } from 'vitest' import { productKeySchema, publicFeedbackPayloadSchema, publicFeedbackResponseSchema } from '../src/shared/contracts.js' const validFeedback = { schemaVersion: 1 as const, productKey: 'goodbuddy', category: 'bug' as const, title: '平台功能页签不可见', description: '打开设置中心的平台功能后,无法看到魔法笔记页签。', contactEmail: 'user@example.com', environment: { appVersion: '0.11.0', platform: 'windows' as const, architecture: 'x64' as const, locale: 'zh-CN' }, installationId: '00000000-0000-4000-8000-000000000001', clientRequestId: '00000000-0000-4000-8000-000000000002' } describe('feedback contracts', () => { it('accepts a bounded versioned GoodBuddy submission', () => { expect(publicFeedbackPayloadSchema.parse(validFeedback)).toEqual( validFeedback ) }) it('rejects unknown fields and oversized or malformed input', () => { expect( publicFeedbackPayloadSchema.safeParse({ ...validFeedback, secret: 'must not be accepted' }).success ).toBe(false) expect( publicFeedbackPayloadSchema.safeParse({ ...validFeedback, description: 'too short' }).success ).toBe(false) expect( publicFeedbackPayloadSchema.safeParse({ ...validFeedback, contactEmail: 'not-an-email' }).success ).toBe(false) }) it('uses stable lowercase product keys', () => { expect(productKeySchema.parse('mesa-writer')).toBe('mesa-writer') for (const invalid of ['GoodBuddy', '-goodbuddy', 'goodbuddy-', 'a', 'x_y']) { expect(productKeySchema.safeParse(invalid).success).toBe(false) } }) it('accepts references after the sequence exceeds six digits', () => { expect( publicFeedbackResponseSchema.parse({ reference: 'GOODBUDDY-1000000', duplicate: false }) ).toEqual({ reference: 'GOODBUDDY-1000000', duplicate: false }) }) })