test(ci): add exporter heading levels and a11y typography smoke; update MAIN_PLAN
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import { createFormStore, type FormFieldInput, type FormState, type FormField } from '@/lib/state/formStore'
|
||||
|
||||
const text = (name: string, label = name): FormFieldInput => ({ type: 'text', name, label, required: false })
|
||||
|
||||
describe('form store', () => {
|
||||
it('필드 추가/삭제/이동/업데이트와 action URL, spam 옵션을 관리한다', () => {
|
||||
const useForm = createFormStore()
|
||||
|
||||
// 초기
|
||||
let s: FormState = useForm.getState()
|
||||
expect(s.fields.length).toBe(0)
|
||||
expect(s.actionUrl).toBe('')
|
||||
expect(s.spam.honeypotFieldName).toBe('_hp')
|
||||
|
||||
// 추가
|
||||
useForm.getState().addField(text('name', 'Name'))
|
||||
useForm.getState().addField(text('email', 'Email'))
|
||||
useForm.getState().addField({ type: 'select', name: 'plan', label: 'Plan', required: true, options: ['A','B'] })
|
||||
s = useForm.getState()
|
||||
expect(s.fields.map((f: FormField) => f.name)).toEqual(['name','email','plan'])
|
||||
|
||||
// 이동 (0 -> 2)
|
||||
useForm.getState().moveField(0, 2)
|
||||
s = useForm.getState()
|
||||
expect(s.fields.map((f: FormField) => f.name)).toEqual(['email','plan','name'])
|
||||
|
||||
// 업데이트
|
||||
useForm.getState().updateField(1, { label: 'Pricing Plan', required: false })
|
||||
s = useForm.getState()
|
||||
expect(s.fields[1].label).toBe('Pricing Plan')
|
||||
expect(s.fields[1].required).toBe(false)
|
||||
|
||||
// 삭제
|
||||
useForm.getState().removeField(0)
|
||||
s = useForm.getState()
|
||||
expect(s.fields.map((f: FormField) => f.name)).toEqual(['plan','name'])
|
||||
|
||||
// action & spam
|
||||
useForm.getState().setActionUrl('https://example.com/form')
|
||||
useForm.getState().setSpam({ honeypotFieldName: '_trap', minSubmitSeconds: 3 })
|
||||
s = useForm.getState()
|
||||
expect(s.actionUrl).toBe('https://example.com/form')
|
||||
expect(s.spam.honeypotFieldName).toBe('_trap')
|
||||
expect(s.spam.minSubmitSeconds).toBe(3)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user