feat: OpenMesh 基础平台与 MD/PDF 转换技能
- 后端: coworker 智能体框架, WS API, 文件上传, 附件处理 - 前端: Open WebUI, 文件全量走 upload API (含 MD/TXT/JSON 等文本类) - 技能: md-to-office (pandoc + wkhtmltopdf) - 修复: 上传文件路径丢失, Agent 搜索浪费, 输出文件跑到 uploads/ - 打包: PyInstaller one-dir, 预打包 pandoc/wkhtmltopdf/chromium
This commit is contained in:
62
surfaces/gui/e2e/connector-page.spec.ts
Normal file
62
surfaces/gui/e2e/connector-page.spec.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
// Slack config is a detail SUBPAGE under Connectors (UX-DECISIONS §21): the list row
|
||||
// navigates to it, and the §19 flows — parked senders (Allow & deliver / Allow / ×)
|
||||
// and "listening" sessions — are filed under the workspace they belong to.
|
||||
import { expect } from "@playwright/test";
|
||||
import { test } from "./fixtures";
|
||||
|
||||
async function openSlackPage(page) {
|
||||
await page.goto("/");
|
||||
await page.getByTestId("account-row").click();
|
||||
await page.getByRole("button", { name: "Connectors", exact: true }).click();
|
||||
await page.getByTestId("connector-slack").click();
|
||||
}
|
||||
|
||||
test("list row status + navigation to the Slack page", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await page.getByTestId("account-row").click();
|
||||
await page.getByRole("button", { name: "Connectors", exact: true }).click();
|
||||
|
||||
const row = page.getByTestId("connector-slack");
|
||||
await expect(row).toContainText("2 workspaces · relay");
|
||||
await row.click();
|
||||
await expect(page.getByTestId("slack-workspaces")).toBeVisible();
|
||||
// signed out (fixture default) → the status line leads with the actionable layer
|
||||
await expect(page.getByTestId("slack-mode-badge")).toContainText("Sign-in needed");
|
||||
});
|
||||
|
||||
test("parked sender files under ITS workspace; Allow & deliver adds to that allow-list only", async ({
|
||||
page,
|
||||
}) => {
|
||||
await openSlackPage(page);
|
||||
|
||||
// pk1 belongs to T1DL — its Waiting row renders in that workspace's group only.
|
||||
const t1 = page.getByTestId("slack-workspace-T1DL");
|
||||
await expect(t1.getByTestId("waiting-pk1")).toContainText("Maya");
|
||||
await expect(t1.getByTestId("waiting-pk1")).toContainText("in #ocw-test");
|
||||
await expect(t1.getByTestId("waiting-pk1")).toContainText("hey ocw, can you summarize this thread?");
|
||||
await expect(page.getByTestId("slack-workspace-T2AC").getByTestId("waiting-pk1")).toHaveCount(0);
|
||||
|
||||
await page.getByTestId("parked-allow-deliver-pk1").click();
|
||||
await expect(page.getByTestId("waiting-pk1")).toHaveCount(0);
|
||||
// The sender lands on the T1DL allow-list; the sibling workspace stays empty.
|
||||
await expect(t1).toContainText("U0NEW");
|
||||
await expect(page.getByTestId("slack-workspace-T2AC")).not.toContainText("U0NEW");
|
||||
});
|
||||
|
||||
test("parked sender can be dismissed without allowing", async ({ page }) => {
|
||||
await openSlackPage(page);
|
||||
await page.getByTestId("parked-dismiss-pk1").click();
|
||||
await expect(page.getByTestId("waiting-pk1")).toHaveCount(0);
|
||||
await expect(page.getByTestId("slack-workspace-T1DL")).not.toContainText("U0NEW");
|
||||
});
|
||||
|
||||
test("sessions listening in a workspace: listed with unsubscribe", async ({ page }) => {
|
||||
await openSlackPage(page);
|
||||
|
||||
const t1 = page.getByTestId("slack-workspace-T1DL");
|
||||
await expect(t1.getByTestId("listening-slack")).toContainText("Weekly plan 1");
|
||||
await expect(t1.getByTestId("listening-slack")).toContainText("#ocw-test");
|
||||
|
||||
await t1.getByTitle("Unsubscribe this session").click();
|
||||
await expect(t1.getByTestId("listening-slack")).toHaveCount(0); // row hides when empty
|
||||
});
|
||||
Reference in New Issue
Block a user