import { describe, expect, it } from 'vitest' import { loginSchema, normalizeInviteCode, registerSchema } from './schemas' const base = { name: 'Suphi', email: 'a@b.co', password: '12345678', mode: 'new' as const, household_name: '', invite_code: '', } const issues = (r: { success: boolean error?: { issues: { path: PropertyKey[]; message: string }[] } }) => Object.fromEntries((r.error?.issues ?? []).map((i) => [i.path.join('.'), i.message])) describe('loginSchema', () => { it('boş alanlarda Türkçe mesaj', () => { expect(issues(loginSchema.safeParse({ email: '', password: '', remember_me: true }))).toEqual({ email: 'E-posta gerekli', password: 'Şifre gerekli', }) }) it('geçersiz e-posta', () => { expect( issues(loginSchema.safeParse({ email: 'abc', password: 'x', remember_me: false })).email, ).toBe('Geçerli bir e-posta adresi girin') }) it('e-postadaki boşlukları kırpar', () => { const r = loginSchema.safeParse({ email: ' a@b.co ', password: 'x', remember_me: true }) expect(r.success && r.data.email).toBe('a@b.co') }) }) describe('registerSchema', () => { it('geçerli yeni hane kaydı', () => { expect(registerSchema.safeParse(base).success).toBe(true) }) it('kısa şifre ve boş ad', () => { expect(issues(registerSchema.safeParse({ ...base, name: ' ', password: '123' }))).toEqual({ name: 'Adını yaz', password: 'Şifre en az 8 karakter olmalı', }) }) it('davet modunda kod zorunlu ve 8 karakter', () => { expect(issues(registerSchema.safeParse({ ...base, mode: 'join' })).invite_code).toBe( 'Davet kodunu yaz', ) expect( issues(registerSchema.safeParse({ ...base, mode: 'join', invite_code: 'ABC' })).invite_code, ).toBe('Davet kodu 8 karakter olmalı') expect( registerSchema.safeParse({ ...base, mode: 'join', invite_code: 'abcd-efgh' }).success, ).toBe(true) }) it('yeni hane modunda davet kodu yok sayılır', () => { expect(registerSchema.safeParse({ ...base, invite_code: 'x' }).success).toBe(true) }) }) it('normalizeInviteCode', () => { expect(normalizeInviteCode(' abcd-efgh ')).toBe('ABCDEFGH') })