mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-27 07:16:19 +09:00
feat: basic api server
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
import { describe, it, expect, beforeEach } from 'vitest'
|
||||
import { getTestClient } from './setup'
|
||||
|
||||
describe('Settings API', () => {
|
||||
const client = getTestClient()
|
||||
const testUserId = 'test-user-settings-123'
|
||||
|
||||
describe('GET /settings/:userId', () => {
|
||||
it('should get settings successfully', async () => {
|
||||
const response = await client.settings({
|
||||
userId: testUserId,
|
||||
}).get()
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.data).toBeDefined()
|
||||
// 可能返回 success: false 如果设置不存在
|
||||
expect(response.data?.success !== undefined).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
describe('POST /settings', () => {
|
||||
it('should create settings successfully', async () => {
|
||||
const settingsData = {
|
||||
userId: testUserId,
|
||||
defaultChatModel: null,
|
||||
defaultEmbeddingModel: null,
|
||||
defaultSummaryModel: null,
|
||||
}
|
||||
|
||||
const response = await client.settings.post(settingsData)
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.data).toBeDefined()
|
||||
expect(response.data?.success).toBe(true)
|
||||
expect(response.data?.data).toBeDefined()
|
||||
})
|
||||
|
||||
it('should create settings with model IDs', async () => {
|
||||
const settingsData = {
|
||||
userId: `${testUserId}-with-models`,
|
||||
defaultChatModel: '00000000-0000-0000-0000-000000000001',
|
||||
defaultEmbeddingModel: '00000000-0000-0000-0000-000000000002',
|
||||
defaultSummaryModel: '00000000-0000-0000-0000-000000000003',
|
||||
}
|
||||
|
||||
const response = await client.settings.post(settingsData)
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.data).toBeDefined()
|
||||
expect(response.data?.success).toBe(true)
|
||||
})
|
||||
|
||||
it('should return error for invalid UUID format', async () => {
|
||||
const invalidData = {
|
||||
userId: testUserId,
|
||||
defaultChatModel: 'invalid-uuid',
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const response = await client.settings.post(invalidData as any)
|
||||
|
||||
expect([400, 422]).toContain(response.status)
|
||||
})
|
||||
|
||||
it('should return error for missing userId', async () => {
|
||||
const invalidData = {
|
||||
defaultChatModel: null,
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const response = await client.settings.post(invalidData as any)
|
||||
|
||||
expect([400, 422]).toContain(response.status)
|
||||
})
|
||||
})
|
||||
|
||||
describe('PUT /settings/:userId', () => {
|
||||
it('should update settings successfully', async () => {
|
||||
// 先创建设置
|
||||
await client.settings.post({
|
||||
userId: `${testUserId}-update`,
|
||||
defaultChatModel: null,
|
||||
})
|
||||
|
||||
const updateData = {
|
||||
defaultChatModel: '00000000-0000-0000-0000-000000000001',
|
||||
defaultEmbeddingModel: '00000000-0000-0000-0000-000000000002',
|
||||
defaultSummaryModel: null,
|
||||
}
|
||||
|
||||
const response = await client.settings({
|
||||
userId: `${testUserId}-update`,
|
||||
}).put(updateData)
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.data).toBeDefined()
|
||||
expect(response.data?.success).toBe(true)
|
||||
expect(response.data?.data).toBeDefined()
|
||||
})
|
||||
|
||||
it('should return error for non-existent settings', async () => {
|
||||
const updateData = {
|
||||
defaultChatModel: '00000000-0000-0000-0000-000000000001',
|
||||
}
|
||||
|
||||
const response = await client.settings({
|
||||
userId: 'non-existent-user',
|
||||
}).put(updateData)
|
||||
|
||||
expect(response.status).toBe(200) // API 返回 200 但 success: false
|
||||
expect(response.data?.success).toBe(false)
|
||||
expect(response.data?.error).toBeDefined()
|
||||
})
|
||||
})
|
||||
|
||||
describe('PATCH /settings', () => {
|
||||
it('should upsert settings successfully', async () => {
|
||||
const settingsData = {
|
||||
userId: `${testUserId}-upsert`,
|
||||
defaultChatModel: '00000000-0000-0000-0000-000000000001',
|
||||
defaultEmbeddingModel: null,
|
||||
defaultSummaryModel: null,
|
||||
}
|
||||
|
||||
const response = await client.settings.patch(settingsData)
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.data).toBeDefined()
|
||||
expect(response.data?.success).toBe(true)
|
||||
expect(response.data?.data).toBeDefined()
|
||||
})
|
||||
|
||||
it('should update existing settings on upsert', async () => {
|
||||
const userId = `${testUserId}-upsert-update`
|
||||
|
||||
// 先创建
|
||||
await client.settings.post({
|
||||
userId,
|
||||
defaultChatModel: null,
|
||||
})
|
||||
|
||||
// 然后 upsert
|
||||
const upsertData = {
|
||||
userId,
|
||||
defaultChatModel: '00000000-0000-0000-0000-000000000001',
|
||||
}
|
||||
|
||||
const response = await client.settings.patch(upsertData)
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.data?.success).toBe(true)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user