munch-ease-frontend/tests/auth.refresh.api.test.ts

46 lines
1.7 KiB
TypeScript
Raw Normal View History

import { describe, it, expect, beforeEach } from 'vitest'
import { server, http, HttpResponse } from './test-setup'
import { currentUser, logout } from '@/api/auth'
import { api } from '@/api/client'
describe('auth refresh (currentUser)', () => {
beforeEach(async () => {
await logout()
})
it('currentUser refresh sets auth token (no user in response)', async () => {
server.use(
http.post('*/api/v1/auth/refresh', () =>
HttpResponse.json({ accessToken: 'ref-123', tokenType: 'bearer', user: { id: 9, email: 'ref@example.com', displayName: 'Refreshed' } })
)
)
const user = await currentUser()
expect(user).not.toBeNull()
// Subsequent API call should include Authorization header
server.use(
http.get('*/api/v1/users/me/households', ({ request }) => {
const auth = request.headers.get('authorization')
expect(auth?.toLowerCase()).toBe('bearer ref-123')
return HttpResponse.json([])
})
)
const res = await api.GET('/api/v1/users/me/households', { params: {} })
expect(res.response.ok).toBe(true)
})
it('returns null if refresh fails', async () => {
server.use(http.post('*/api/v1/auth/refresh', () => HttpResponse.json({ message: 'not logged in' }, { status: 401 })))
const user = await currentUser()
expect(user).toBeNull()
server.use(
http.get('*/api/v1/users/me/households', ({ request }) => {
const auth = request.headers.get('authorization')
expect(auth).toBeFalsy()
return HttpResponse.json([])
})
)
const res = await api.GET('/api/v1/users/me/households', { params: {} })
expect(res.response.ok).toBe(true)
})
})