mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 09:20:22 +08:00
fix(frontend): relax system import limits
This commit is contained in:
85
frontend/src/api/__tests__/admin-import-timeout.spec.ts
Normal file
85
frontend/src/api/__tests__/admin-import-timeout.spec.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import type { AggregateImportRequest, ConfigImportRequest, UsersImportRequest } from '@/api/admin'
|
||||
|
||||
const { postMock } = vi.hoisted(() => ({
|
||||
postMock: vi.fn(),
|
||||
}))
|
||||
|
||||
vi.mock('@/api/client', () => ({
|
||||
default: {
|
||||
post: postMock,
|
||||
},
|
||||
}))
|
||||
|
||||
import { adminApi } from '@/api/admin'
|
||||
|
||||
const SYSTEM_DATA_IMPORT_TIMEOUT_MS = 10 * 60 * 1000
|
||||
|
||||
describe('adminApi system data import timeouts', () => {
|
||||
beforeEach(() => {
|
||||
postMock.mockReset()
|
||||
postMock.mockResolvedValue({ data: {} })
|
||||
})
|
||||
|
||||
it('uses a long timeout for config imports', async () => {
|
||||
const payload = {
|
||||
version: '1',
|
||||
exported_at: '2026-01-01T00:00:00.000Z',
|
||||
global_models: [],
|
||||
providers: [],
|
||||
merge_mode: 'skip',
|
||||
} satisfies ConfigImportRequest
|
||||
|
||||
await adminApi.importConfig(payload)
|
||||
|
||||
expect(postMock).toHaveBeenCalledWith(
|
||||
'/api/admin/system/config/import',
|
||||
payload,
|
||||
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
|
||||
)
|
||||
})
|
||||
|
||||
it('uses a long timeout for user imports', async () => {
|
||||
const payload = {
|
||||
version: '1',
|
||||
exported_at: '2026-01-01T00:00:00.000Z',
|
||||
users: [],
|
||||
merge_mode: 'skip',
|
||||
} satisfies UsersImportRequest
|
||||
|
||||
await adminApi.importUsers(payload)
|
||||
|
||||
expect(postMock).toHaveBeenCalledWith(
|
||||
'/api/admin/system/users/import',
|
||||
payload,
|
||||
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
|
||||
)
|
||||
})
|
||||
|
||||
it('uses a long timeout for aggregate imports', async () => {
|
||||
const payload = {
|
||||
version: '1',
|
||||
exported_at: '2026-01-01T00:00:00.000Z',
|
||||
config_data: {
|
||||
version: '1',
|
||||
exported_at: '2026-01-01T00:00:00.000Z',
|
||||
global_models: [],
|
||||
providers: [],
|
||||
},
|
||||
user_data: {
|
||||
version: '1',
|
||||
exported_at: '2026-01-01T00:00:00.000Z',
|
||||
users: [],
|
||||
},
|
||||
merge_mode: 'skip',
|
||||
} satisfies AggregateImportRequest
|
||||
|
||||
await adminApi.importAggregateData(payload)
|
||||
|
||||
expect(postMock).toHaveBeenCalledWith(
|
||||
'/api/admin/system/data/import',
|
||||
payload,
|
||||
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
|
||||
)
|
||||
})
|
||||
})
|
||||
@@ -4,6 +4,8 @@ import { cachedRequest, buildCacheKey } from '@/utils/cache'
|
||||
import type { BillingSummary } from './auth'
|
||||
import type { ApiKeyInstallSession, InstallSessionTargetSystem, InstallTargetCli } from './me'
|
||||
|
||||
const SYSTEM_DATA_IMPORT_TIMEOUT_MS = 10 * 60 * 1000
|
||||
|
||||
function extractConflictPayload(error: unknown): ManualUsageCleanupConflict | null {
|
||||
if (!axios.isAxiosError(error) || error.response?.status !== 409) {
|
||||
return null
|
||||
@@ -854,7 +856,8 @@ export const adminApi = {
|
||||
async importConfig(data: ConfigImportRequest): Promise<ConfigImportResponse> {
|
||||
const response = await apiClient.post<ConfigImportResponse>(
|
||||
'/api/admin/system/config/import',
|
||||
data
|
||||
data,
|
||||
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
|
||||
)
|
||||
return response.data
|
||||
},
|
||||
@@ -869,7 +872,8 @@ export const adminApi = {
|
||||
async importUsers(data: UsersImportRequest): Promise<UsersImportResponse> {
|
||||
const response = await apiClient.post<UsersImportResponse>(
|
||||
'/api/admin/system/users/import',
|
||||
data
|
||||
data,
|
||||
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
|
||||
)
|
||||
return response.data
|
||||
},
|
||||
@@ -884,7 +888,8 @@ export const adminApi = {
|
||||
async importAggregateData(data: AggregateImportRequest): Promise<AggregateImportResponse> {
|
||||
const response = await apiClient.post<AggregateImportResponse>(
|
||||
'/api/admin/system/data/import',
|
||||
data
|
||||
data,
|
||||
{ timeout: SYSTEM_DATA_IMPORT_TIMEOUT_MS }
|
||||
)
|
||||
return response.data
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user