75 lines
2.3 KiB
TypeScript
75 lines
2.3 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
import api from '../../api';
|
|
import { aiChatApi } from './api';
|
|
|
|
describe('AI chat API adapter', () => {
|
|
afterEach(() => vi.restoreAllMocks());
|
|
|
|
it('unwraps the backend success/data response', async () => {
|
|
vi.spyOn(api, 'get').mockResolvedValue({
|
|
success: true,
|
|
data: [
|
|
{
|
|
id: 1,
|
|
title: '会话',
|
|
lockedSkillKey: null,
|
|
createdAt: '2026-07-23T00:00:00.000Z',
|
|
updatedAt: '2026-07-23T00:00:00.000Z',
|
|
lastMessageAt: null,
|
|
},
|
|
],
|
|
});
|
|
|
|
await expect(aiChatApi.listConversations()).resolves.toMatchObject([{ id: 1, title: '会话' }]);
|
|
});
|
|
|
|
it('loads every history page in chronological page order', async () => {
|
|
vi.spyOn(api, 'get')
|
|
.mockResolvedValueOnce({
|
|
success: true,
|
|
data: { items: [{ id: 1 }], total: 101, page: 1, limit: 100 },
|
|
})
|
|
.mockResolvedValueOnce({
|
|
success: true,
|
|
data: { items: [{ id: 101 }], total: 101, page: 2, limit: 100 },
|
|
});
|
|
|
|
const page = await aiChatApi.listMessages(3);
|
|
expect(page.items.map((item) => item.id)).toEqual([1, 101]);
|
|
});
|
|
|
|
it('confirmReviewStep posts to the per-section confirm endpoint', async () => {
|
|
const updated = {
|
|
id: 'review-1',
|
|
title: '批量导入',
|
|
status: 'pending',
|
|
sections: [
|
|
{ key: 'students', type: 'students', title: '学生', status: 'submitted' },
|
|
],
|
|
};
|
|
vi.spyOn(api, 'post').mockResolvedValue({ success: true, data: updated });
|
|
|
|
await expect(aiChatApi.confirmReviewStep('review-1', 'students')).resolves.toEqual(updated);
|
|
expect(api.post).toHaveBeenCalledWith(
|
|
'/ai/chat/reviews/review-1/steps/students/confirm',
|
|
);
|
|
});
|
|
|
|
it('confirmReviewGroup posts to the per-type confirm endpoint', async () => {
|
|
const updated = {
|
|
id: 'review-1',
|
|
title: '批量导入',
|
|
status: 'pending',
|
|
sections: [
|
|
{ key: 'checkins_a', type: 'checkins', title: '入住A', status: 'submitted' },
|
|
],
|
|
};
|
|
vi.spyOn(api, 'post').mockResolvedValue({ success: true, data: updated });
|
|
|
|
await expect(aiChatApi.confirmReviewGroup('review-1', 'checkins')).resolves.toEqual(updated);
|
|
expect(api.post).toHaveBeenCalledWith(
|
|
'/ai/chat/reviews/review-1/types/checkins/confirm',
|
|
);
|
|
});
|
|
});
|