e188922c0f
- REGISTRATION ortam değişkeni: invite_only (varsayılan) | open - invite_only: ilk hane serbest, sonrasında yalnızca davet koduyla katılım - Backend'de zorunlu: 403 registration_closed; GET /api/auth/registration - Kayıt ekranı: kayıt kapalıyken yalnızca davet kodu ve açıklama - Entegrasyon testleri: kayıt politikası (2) - Prettier ayarı eklendi (proje stiliyle uyumlu), kaynaklar biçimlendirildi Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
64 lines
2.2 KiB
TypeScript
64 lines
2.2 KiB
TypeScript
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')
|
||
})
|