Files
Genarrative/src/services/big-fish-gallery/bigFishGalleryClient.test.ts
T
2026-04-30 17:49:07 +08:00

57 lines
1.5 KiB
TypeScript

import { beforeEach, expect, test, vi } from 'vitest';
import { ApiClientError } from '../apiClient';
const { requestJsonMock } = vi.hoisted(() => ({
requestJsonMock: vi.fn(),
}));
vi.mock('../apiClient', async (importOriginal) => {
const actual = await importOriginal<typeof import('../apiClient')>();
return {
...actual,
requestJson: requestJsonMock,
};
});
import { likeBigFishGalleryWork, listBigFishGallery } from './bigFishGalleryClient';
beforeEach(() => {
requestJsonMock.mockReset();
});
test('listBigFishGallery returns empty items when public gallery is not ready', async () => {
requestJsonMock.mockRejectedValueOnce(
new ApiClientError({
message: '读取大鱼吃小鱼广场失败',
status: 400,
code: 'HTTP_400',
}),
);
await expect(listBigFishGallery()).resolves.toEqual({ items: [] });
});
test('listBigFishGallery keeps non-gallery-read errors visible', async () => {
const error = new ApiClientError({
message: '服务暂不可用',
status: 503,
code: 'HTTP_503',
});
requestJsonMock.mockRejectedValueOnce(error);
await expect(listBigFishGallery()).rejects.toBe(error);
});
test('likeBigFishGalleryWork posts to authenticated like route', async () => {
requestJsonMock.mockResolvedValueOnce({ items: [] });
await likeBigFishGalleryWork('big-fish-session-1');
expect(requestJsonMock).toHaveBeenCalledWith(
'/api/runtime/big-fish/gallery/big-fish-session-1/like',
expect.objectContaining({ method: 'POST' }),
'点赞大鱼吃小鱼作品失败',
);
});