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);