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

57 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-11-01 02:44:58 +00:00
import { describe, it, expect, vi, beforeEach } from 'vitest'
vi.mock('@/api/auth', () => {
return {
2025-11-01 02:52:33 +00:00
currentUser: vi.fn(async () => ({ id: 42, email: 'grace@example.com', displayName: 'Grace Hopper' })),
loginWithPassword: vi.fn(async (email: string) => ({ id: 8, email, displayName: email })),
2025-11-01 02:44:58 +00:00
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()
2025-11-01 02:52:33 +00:00
expect(user.value?.displayName).toBe('Grace Hopper')
2025-11-01 02:44:58 +00:00
// login with email/password
2025-11-01 02:52:33 +00:00
await loginWithPassword('user@example.com', 'pw')
expect(user.value?.displayName).toBe('user@example.com')
2025-11-01 02:44:58 +00:00
// logout clears user
await logout()
expect(user.value).toBeNull()
})
})