Initial commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
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
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user