Files
Genarrative/src/services/creatorProfileClient.test.ts
T
lhk229 51cb05f418
Project CI / AI game creator shell Rust crates (push) Successful in 5m56s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 6m36s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 7m37s
Project CI / Backend tests (push) Successful in 9m22s
Project CI / Frontend tests (push) Successful in 4m40s
Project CI / AI game creator shell web tests (push) Successful in 3m50s
Project CI / Repository checks (push) Successful in 6m30s
Project CI / Native shell tests (push) Successful in 8m32s
补充创作者主页与关注粉丝工程文档 (#638)
本 PR 补齐创作者主页与关注粉丝功能的产品合同和工程设计,供后续按里程碑实施;本次只修改文档。

桌面导航第四项进入自己的创作者主页,“我的”移到第五项。游戏详情可进入作者主页并关注/取消关注;自己或他人的关注、粉丝列表均公开可查看,点击用户头像或昵称可进入其主页。本人支持取消/重新关注、回关和移除粉丝,并明确两个关注方向独立。

工程设计包含关系表与 DTO、认证和事务边界、跨页状态同步、共享组件、深链及验收要求,拆分关系查询和页面交互两个里程碑。按用户要求,游戏列表沿用最多 48 项的现有限制,不增加游戏目录分页改造。

验证:
- 已合入最新 origin/master(21c79f54a);共享决策记录冲突保留双方新增内容。
- npm run check:encoding 通过。
- npm run check:doc-index 通过。
- git diff --check 与暂存差异检查通过。
- 相对 master 仅六份文档发生变化;没有业务代码或 schema 修改,未执行业务测试或部署。

Reviewed-on: #638
Co-authored-by: Linghong <ink29535@proton.me>
Co-committed-by: Linghong <ink29535@proton.me>
2026-10-05 22:05:11 +08:00

42 lines
1.4 KiB
TypeScript

import { beforeEach, expect, it, vi } from 'vitest';
import {
changeCreatorRelationship,
getCreator,
getCreatorConnections,
} from './creatorProfileClient';
const request = vi.hoisted(() => vi.fn());
vi.mock('./apiClient', () => ({ requestJson: request }));
beforeEach(() => request.mockReset());
it('公开主页请求独立于登录态', async () => {
await getCreator('a/b');
expect(request.mock.calls[0]?.[0]).toBe('/api/creators/a%2Fb');
expect(request.mock.calls[0]?.[3]).toEqual({
skipAuth: true,
skipRefresh: true,
});
});
it('列表游标编码,游客不附带凭证', async () => {
await getCreatorConnections('a', 'followers', 'x+y', false);
expect(request.mock.calls[0]?.[0]).toBe(
'/api/creators/a/followers?limit=20&cursor=x%2By',
);
expect(request.mock.calls[0]?.[3]).toEqual({
skipAuth: true,
skipRefresh: true,
});
});
it.each([
['follow', 'PUT', '/api/creators/b/follow'],
['unfollow', 'DELETE', '/api/creators/b/follow'],
['remove-follower', 'DELETE', '/api/creators/me/followers/b'],
] as const)('%s 不自动重放写请求', async (action, method, path) => {
await changeCreatorRelationship('b', action);
expect(request.mock.calls[0]?.[0]).toBe(path);
expect(request.mock.calls[0]?.[1]).toEqual({ method });
expect(request.mock.calls[0]?.[3]).toEqual({
skipRefresh: true,
retry: { maxRetries: 0 },
});
});