71 lines
2.2 KiB
TypeScript
71 lines
2.2 KiB
TypeScript
import { describe, it, expect, vi, beforeAll } from 'vitest'
|
|
import request from 'supertest'
|
|
|
|
vi.mock('./db.js', () => ({
|
|
prisma: {
|
|
$queryRaw: vi.fn().mockResolvedValue([{ '?column?': 1 }])
|
|
}
|
|
}))
|
|
|
|
const { createApp } = await import('./app.js')
|
|
|
|
describe('API smoke', () => {
|
|
const app = createApp()
|
|
|
|
beforeAll(() => {
|
|
process.env.SESSION_SECRET =
|
|
process.env.SESSION_SECRET ?? 'test-session-secret-minimum-32-characters-long'
|
|
process.env.ORIGIN = process.env.ORIGIN ?? 'http://localhost:5173'
|
|
process.env.RP_ID = process.env.RP_ID ?? 'localhost'
|
|
})
|
|
|
|
it('GET /api/health returns ok when database is reachable', async () => {
|
|
const res = await request(app).get('/api/health')
|
|
expect(res.status).toBe(200)
|
|
expect(res.body.status).toBe('ok')
|
|
expect(res.body.database).toBe('connected')
|
|
})
|
|
|
|
it('GET /api/logbooks requires session', async () => {
|
|
const res = await request(app).get('/api/logbooks')
|
|
expect(res.status).toBe(401)
|
|
expect(res.body.error).toMatch(/Unauthorized/i)
|
|
})
|
|
|
|
it('POST /api/sync/push requires session', async () => {
|
|
const res = await request(app)
|
|
.post('/api/sync/push')
|
|
.send({ items: [] })
|
|
expect(res.status).toBe(401)
|
|
expect(res.body.error).toMatch(/Unauthorized/i)
|
|
})
|
|
|
|
it('GET /api/collaboration/invite-details requires token query', async () => {
|
|
const res = await request(app).get('/api/collaboration/invite-details')
|
|
expect(res.status).toBe(400)
|
|
expect(res.body.error).toMatch(/Token/i)
|
|
})
|
|
|
|
it('POST /api/ai/summary requires session', async () => {
|
|
const res = await request(app)
|
|
.post('/api/ai/summary')
|
|
.send({ logbookId: 'x', entryId: 'y', context: {} })
|
|
expect(res.status).toBe(401)
|
|
expect(res.body.error).toMatch(/Unauthorized/i)
|
|
})
|
|
|
|
it('GET /api/ai/usage requires session', async () => {
|
|
const res = await request(app).get('/api/ai/usage')
|
|
expect(res.status).toBe(401)
|
|
expect(res.body.error).toMatch(/Unauthorized/i)
|
|
})
|
|
|
|
it('POST /api/ai/transcribe requires session', async () => {
|
|
const res = await request(app)
|
|
.post('/api/ai/transcribe')
|
|
.send({ audioDataUrl: 'data:audio/webm;base64,abcdef' })
|
|
expect(res.status).toBe(401)
|
|
expect(res.body.error).toMatch(/Unauthorized/i)
|
|
})
|
|
})
|