feat(signup): community guidelines agreement and policies routes
Introduces /community-guidelines and /policies/{privacy,terms,[slug]} pages,
swaps the signup/invite checkbox from agreedToTerms to agreedToGuidelines,
adds Member.agreement.acceptedAt, and stamps the field when a Helcim
customer is created.
This commit is contained in:
parent
e0d11e47f4
commit
c5e901ed24
13 changed files with 1292 additions and 54 deletions
|
|
@ -6,7 +6,8 @@ import {
|
|||
memberProfileUpdateSchema,
|
||||
eventRegistrationSchema,
|
||||
paymentVerifySchema,
|
||||
adminEventCreateSchema
|
||||
adminEventCreateSchema,
|
||||
seriesTicketPurchaseSchema
|
||||
} from '../../../server/utils/schemas.js'
|
||||
import { validateBody } from '../../../server/utils/validateBody.js'
|
||||
|
||||
|
|
@ -183,6 +184,42 @@ describe('memberProfileUpdateSchema', () => {
|
|||
})
|
||||
})
|
||||
|
||||
describe('seriesTicketPurchaseSchema', () => {
|
||||
const validBody = {
|
||||
name: 'Test User',
|
||||
email: 'test@example.com',
|
||||
ticketType: 'member'
|
||||
}
|
||||
|
||||
it('accepts member, public, and guest ticket types', () => {
|
||||
for (const ticketType of ['member', 'public', 'guest']) {
|
||||
const result = seriesTicketPurchaseSchema.safeParse({ ...validBody, ticketType })
|
||||
expect(result.success).toBe(true)
|
||||
}
|
||||
})
|
||||
|
||||
it('rejects a body missing ticketType (closes pricing-mismatch gap)', () => {
|
||||
const { ticketType, ...rest } = validBody
|
||||
const result = seriesTicketPurchaseSchema.safeParse(rest)
|
||||
expect(result.success).toBe(false)
|
||||
})
|
||||
|
||||
it('rejects null ticketType', () => {
|
||||
const result = seriesTicketPurchaseSchema.safeParse({ ...validBody, ticketType: null })
|
||||
expect(result.success).toBe(false)
|
||||
})
|
||||
|
||||
it('rejects an unknown ticketType value', () => {
|
||||
const result = seriesTicketPurchaseSchema.safeParse({ ...validBody, ticketType: 'vip' })
|
||||
expect(result.success).toBe(false)
|
||||
})
|
||||
|
||||
it('rejects empty-string ticketType', () => {
|
||||
const result = seriesTicketPurchaseSchema.safeParse({ ...validBody, ticketType: '' })
|
||||
expect(result.success).toBe(false)
|
||||
})
|
||||
})
|
||||
|
||||
// --- validateBody integration tests ---
|
||||
|
||||
describe('validateBody', () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue