diff --git a/web/src/features/creator/CreatorPages.test.jsx b/web/src/features/creator/CreatorPages.test.jsx index 5964e39..67c86b3 100644 --- a/web/src/features/creator/CreatorPages.test.jsx +++ b/web/src/features/creator/CreatorPages.test.jsx @@ -349,6 +349,32 @@ describe("creator pages", () => { expect(dataProvider.create).not.toHaveBeenCalled(); }); + it("shows the environment reason when competitor preview is unavailable", async () => { + const dataProvider = provider({ + create: vi.fn().mockRejectedValue({ + status: 503, + message: "creator capability is unavailable", + body: { + error: "creator capability is unavailable", + reason: + "creator capability is unavailable: start account environment: gateway unavailable", + }, + }), + }); + renderPage(, dataProvider); + fireEvent.click(await screen.findByRole("button", { name: "添加监听" })); + fireEvent.change( + screen.getByLabelText("分享内容或链接", { exact: false }), + { target: { value: "https://v.douyin.com/share-a/" } }, + ); + fireEvent.click(screen.getByRole("button", { name: "解析并预览作者" })); + expect( + await screen.findByText( + "环境不可用(503):creator capability is unavailable: start account environment: gateway unavailable", + ), + ).toBeTruthy(); + }); + it("merges owned and monitored accounts and filters by source", async () => { const owned = { id: "account-a", @@ -486,12 +512,19 @@ describe("creator pages", () => { renderPage(, dataProvider); fireEvent.click(await screen.findByRole("button", { name: "添加监听" })); fireEvent.change(screen.getByLabelText("分享内容或链接", { exact: false }), { - target: { value: "复制打开抖音 https://v.douyin.com/share-a/。" }, + target: { + value: + "5.38 复制打开抖音,看看【木子不写代码的作品】Github 零基础终极教程! 这是你能看到最完整... https://v.douyin.com/9CdUScDai0U/ TyT:/ :5pm 06/24 L@J.vF", + }, }); const tagInput = screen.getByLabelText("TAGS"); fireEvent.change(tagInput, { target: { value: "重点监测" } }); fireEvent.keyDown(tagInput, { key: "Enter", code: "Enter" }); - expect(await screen.findByText(/已提取链接:https:\/\/v\.douyin\.com\/share-a/)).toBeTruthy(); + expect( + await screen.findByText( + /已提取链接:https:\/\/v\.douyin\.com\/9CdUScDai0U\//, + ), + ).toBeTruthy(); fireEvent.click(screen.getByRole("button", { name: "解析并预览作者" })); expect(await screen.findByText("作者预览")).toBeTruthy(); expect(dataProvider.create).toHaveBeenCalledWith( @@ -499,7 +532,7 @@ describe("creator pages", () => { resource: "creator-competitor-preview", variables: { platform: "douyin", - share_url: "https://v.douyin.com/share-a/", + share_url: "https://v.douyin.com/9CdUScDai0U/", }, }), ); @@ -511,7 +544,7 @@ describe("creator pages", () => { resource: "creator-competitors", variables: { platform: "douyin", - share_url: "https://v.douyin.com/share-a/", + share_url: "https://v.douyin.com/9CdUScDai0U/", tags: ["重点监测"], }, }), diff --git a/web/src/features/creator/competitors/CreatorCompetitorsPage.jsx b/web/src/features/creator/competitors/CreatorCompetitorsPage.jsx index 8ca3a4e..24125b9 100644 --- a/web/src/features/creator/competitors/CreatorCompetitorsPage.jsx +++ b/web/src/features/creator/competitors/CreatorCompetitorsPage.jsx @@ -183,8 +183,8 @@ export function CreatorCompetitorsPage() { }); } catch (parseError) { setNotice({ - variant: "default", - text: parseError.message || "分享内容解析失败", + variant: "destructive", + text: conflictMessage(parseError, "分享内容解析失败"), }); } finally { setBusy(false);