62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
|
|
vi.mock('@/api/auth', () => {
|
|
return {
|
|
currentUser: vi.fn(async () => ({ id: 42, name: 'Grace Hopper' })),
|
|
login: vi.fn(async (username: string) => ({ id: 7, name: username })),
|
|
loginWithPassword: vi.fn(async (email: string) => ({ id: 8, name: 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?.name).toBe('Grace Hopper')
|
|
// login with email/password
|
|
await loginWithPassword('user@example.com', 'pw')
|
|
expect(user.value?.name).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?.name).toBe('legacy-user')
|
|
})
|
|
})
|