feat(forms): onboarding form/waiver step with required enforcement (Phase 4)
- scripts/027 (idempotent CHECK replace) + schema.sql Section 14: allow space_onboarding_steps.step_type = 'form'; referenced form id lives in the step's existing config.form_id (no new column) - finishOnboarding: a required form step is satisfied when a submission for config.form_id by the member exists (any version — re-sign is non-blocking / auto-satisfy); fails open if the form is missing or unpublished so a misconfig cannot trap a member. Probe uses the service client (submissions are forms.manage-only under RLS) - onboarding page enriches form steps with the published form def + prior-submission flag; onboarding-flow renders FormRenderer + waiver legal text/consent and submits via submitForm then marks the step done - customize: forms fetched and threaded to the onboarding panel; new "+ Form step" button + form picker writing config.form_id - validations/types/casts include 'form'; forms.test.ts +2 - docs: DATABASE_SCHEMA/DB_SCHEMA_MAP/API_REFERENCE/ARCHITECTURE/HANDOFF 287/287 tests, build exit 0. No deploy.
This commit is contained in:
@@ -5,6 +5,8 @@ import {
|
||||
submitFormSchema,
|
||||
formSchemaArray,
|
||||
formFieldSchema,
|
||||
onboardingStepTypeSchema,
|
||||
createOnboardingStepSchema,
|
||||
} from '@/lib/validations'
|
||||
import { parseFormSchema, validateAnswers, type FormField } from '@/lib/forms-schema'
|
||||
|
||||
@@ -110,6 +112,23 @@ describe('validateAnswers', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('onboarding form step (Phase 4)', () => {
|
||||
it('onboardingStepTypeSchema accepts "form" and rejects unknown', () => {
|
||||
expect(onboardingStepTypeSchema.safeParse('form').success).toBe(true)
|
||||
expect(onboardingStepTypeSchema.safeParse('content').success).toBe(true)
|
||||
expect(onboardingStepTypeSchema.safeParse('quiz').success).toBe(false)
|
||||
})
|
||||
|
||||
it('createOnboardingStepSchema accepts a form step with a form_id config', () => {
|
||||
const r = createOnboardingStepSchema.safeParse({
|
||||
step_type: 'form',
|
||||
title: 'Sign the liability waiver',
|
||||
config: { form_id: '11111111-1111-1111-1111-111111111111' },
|
||||
})
|
||||
expect(r.success).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
describe('parseFormSchema', () => {
|
||||
it('returns [] for malformed stored schema', () => {
|
||||
expect(parseFormSchema('not an array')).toEqual([])
|
||||
|
||||
Reference in New Issue
Block a user