munch-ease-frontend/tests/useAuth.multitenant.test.ts

62 lines
2.2 KiB
TypeScript

import { describe, it, expect, vi, beforeEach } from 'vitest'
vi.mock('@/api/auth', () => {
return {
currentUser: vi.fn(async () => ({ id: 42, email: 'grace@example.com', displayName: 'Grace Hopper' })),
login: vi.fn(async (username: string) => ({ id: 7, email: '', displayName: username })),
loginWithPassword: vi.fn(async (email: string) => ({ id: 8, email, displayName: email })),
logout: vi.fn(async () => {}),
createAccount: vi.fn(async () => {
throw new Error('createAccount not implemented yet')
}),
handleGoogleLogin: vi.fn(async () => {
throw new Error('handleGoogleLogin not implemented yet')
}),
}
})
import { useAuth, loadUser } from '@/composables/useAuth'
describe('useAuth (multitenant state)', () => {
beforeEach(() => {
// Reset modules and state between tests
vi.resetModules()
})
it('exposes households and activeHousehold state with setters', async () => {
const { user, households, activeHousehold, setHouseholds, setActiveHousehold } = useAuth()
expect(user.value).toBeNull()
expect(households.value).toEqual([])
expect(activeHousehold.value).toBeNull()
const hs = [
{ id: 1, name: 'Smiths', slug: 'the-smiths' },
{ id: 2, name: 'Johnsons', slug: 'the-johnsons' },
]
setHouseholds(hs)
expect(households.value.length).toBe(2)
setActiveHousehold(hs[1])
expect(activeHousehold.value?.slug).toBe('the-johnsons')
setActiveHousehold('the-smiths')
expect(activeHousehold.value?.slug).toBe('the-smiths')
})
it('supports loading current user, loginWithPassword, and logout clearing user', async () => {
const { user, loginWithPassword, logout } = useAuth()
// load current user
await loadUser()
expect(user.value?.displayName).toBe('Grace Hopper')
// login with email/password
await loginWithPassword('user@example.com', 'pw')
expect(user.value?.displayName).toBe('user@example.com')
// logout clears user
await logout()
expect(user.value).toBeNull()
})
it('keeps legacy login(username) available for now', async () => {
const { user, login } = useAuth()
await login('legacy-user')
expect(user.value?.displayName).toBe('legacy-user')
})
})