This commit is contained in:
2026-04-17 14:50:58 +08:00
parent fa646581c2
commit 3d7c05cdcb
2 changed files with 81 additions and 2 deletions
@@ -0,0 +1,79 @@
import { describe, it, expect, vi, beforeEach } from 'vitest'
import { setActivePinia, createPinia } from 'pinia'
vi.mock('@/utils/request', () => ({
api: {
get: vi.fn(),
post: vi.fn(),
put: vi.fn(),
patch: vi.fn(),
delete: vi.fn(),
},
}))
import { api } from '@/utils/request'
import { useAdminApiKeyStore } from '../admin-api-key'
const emptyPage = { items: [], total: 0, page: 1, per_page: 15 }
describe('useAdminApiKeyStore', () => {
beforeEach(() => {
setActivePinia(createPinia())
vi.restoreAllMocks()
})
describe('fetchAllKeys — enabled 查询参数契约', () => {
it('enabled=true 应序列化为 1(后端期望 integer 0/1', async () => {
vi.mocked(api.get).mockResolvedValueOnce(emptyPage)
const store = useAdminApiKeyStore()
store.filters.enabled = true
await store.fetchAllKeys()
expect(api.get).toHaveBeenCalledWith(
'/api/v1/admin/api-keys',
expect.objectContaining({ enabled: 1 }),
)
})
it('enabled=false 应序列化为 0', async () => {
vi.mocked(api.get).mockResolvedValueOnce(emptyPage)
const store = useAdminApiKeyStore()
store.filters.enabled = false
await store.fetchAllKeys()
expect(api.get).toHaveBeenCalledWith(
'/api/v1/admin/api-keys',
expect.objectContaining({ enabled: 0 }),
)
})
it('enabled=undefined 应保持 undefined(不触发筛选)', async () => {
vi.mocked(api.get).mockResolvedValueOnce(emptyPage)
const store = useAdminApiKeyStore()
await store.fetchAllKeys()
expect(api.get).toHaveBeenCalledWith(
'/api/v1/admin/api-keys',
expect.objectContaining({ enabled: undefined }),
)
})
})
describe('toggleUserApiKeyEnabled — 请求体字段名契约', () => {
it('应发送 api_key_enabled 字段(后端 UserController::updateApiKeyEnabled 读取该字段)', async () => {
vi.mocked(api.patch).mockResolvedValueOnce(undefined)
vi.mocked(api.get).mockResolvedValueOnce(emptyPage)
const store = useAdminApiKeyStore()
await store.toggleUserApiKeyEnabled(42, true)
expect(api.patch).toHaveBeenCalledWith(
'/api/v1/users/42/api-key-enabled',
{ api_key_enabled: true },
)
})
})
})
+2 -2
View File
@@ -21,7 +21,7 @@ export const useAdminApiKeyStore = defineStore('admin-api-key', () => {
page: pagination.page, page: pagination.page,
per_page: pagination.per_page, per_page: pagination.per_page,
user_id: filters.user_id, user_id: filters.user_id,
enabled: filters.enabled, enabled: filters.enabled === undefined ? undefined : filters.enabled ? 1 : 0,
}) })
keys.value = data.items keys.value = data.items
pagination.total = data.total pagination.total = data.total
@@ -57,7 +57,7 @@ export const useAdminApiKeyStore = defineStore('admin-api-key', () => {
async function toggleUserApiKeyEnabled(userId: number, enabled: boolean) { async function toggleUserApiKeyEnabled(userId: number, enabled: boolean) {
try { try {
await api.patch(`/api/v1/users/${userId}/api-key-enabled`, { enabled }) await api.patch(`/api/v1/users/${userId}/api-key-enabled`, { api_key_enabled: enabled })
await fetchAllKeys() await fetchAllKeys()
} catch (err: unknown) { } catch (err: unknown) {
const msg = err instanceof Error ? err.message : '操作失败' const msg = err instanceof Error ? err.message : '操作失败'