feat: import Chinese-localized Buzz source snapshot
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
Signed-off-by: cls_宁波本机 <908705107@qq.com>
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
import { expect, test } from "@playwright/test";
|
||||
|
||||
import { waitForAnimations } from "../helpers/animations";
|
||||
import { installMockBridge, TEST_IDENTITIES } from "../helpers/bridge";
|
||||
|
||||
const SHOTS = "test-results/activity-scope-label";
|
||||
|
||||
const AGENT_PUBKEY = TEST_IDENTITIES.tyler.pubkey;
|
||||
const LONG_AGENT_NAME =
|
||||
"Observer Agent With An Exceptionally Long Display Name";
|
||||
const AGENTS_CHANNEL_ID = "94a444a4-c0a3-5966-ab05-530c6ddc2301"; // #agents
|
||||
|
||||
// Open the activity pane via profile → "View activity" (same ingress the
|
||||
// observer-feed screenshot spec uses).
|
||||
async function openActivityFromChannel(
|
||||
page: import("@playwright/test").Page,
|
||||
channelTestId: string,
|
||||
channelTitle: string,
|
||||
) {
|
||||
await page.goto("/", { waitUntil: "domcontentloaded" });
|
||||
await page.getByTestId(channelTestId).click();
|
||||
await expect(page.getByTestId("chat-title")).toHaveText(channelTitle);
|
||||
|
||||
const messageRow = page
|
||||
.getByTestId("message-row")
|
||||
.filter({ has: page.getByText("Observer Agent", { exact: false }) });
|
||||
await expect(messageRow.first()).toBeVisible({ timeout: 8_000 });
|
||||
await messageRow.first().getByRole("button").first().click();
|
||||
|
||||
const profilePanel = page.getByTestId("user-profile-panel");
|
||||
await expect(profilePanel).toBeVisible({ timeout: 10_000 });
|
||||
|
||||
const activityBtn = page.getByTestId(
|
||||
`user-profile-view-activity-${AGENT_PUBKEY}`,
|
||||
);
|
||||
await expect(activityBtn).toBeVisible({ timeout: 5_000 });
|
||||
await activityBtn.click();
|
||||
|
||||
const panel = page.getByTestId("agent-session-thread-panel");
|
||||
await expect(panel).toBeVisible({ timeout: 10_000 });
|
||||
return panel;
|
||||
}
|
||||
|
||||
test.describe("activity panel scope label", () => {
|
||||
test("channel-targeted pane shows the channel name", async ({ page }) => {
|
||||
await installMockBridge(page, {
|
||||
managedAgents: [
|
||||
{
|
||||
pubkey: AGENT_PUBKEY,
|
||||
name: "Observer Agent",
|
||||
status: "running" as const,
|
||||
channelNames: ["agents"],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const panel = await openActivityFromChannel(
|
||||
page,
|
||||
"channel-agents",
|
||||
"agents",
|
||||
);
|
||||
await expect(page.getByTestId("agent-session-agent-name")).toHaveText(
|
||||
"Observer Agent",
|
||||
);
|
||||
await expect(page.getByTestId("agent-session-agent-avatar")).toBeVisible();
|
||||
const scope = page.getByTestId("agent-session-scope-label");
|
||||
await expect(scope).toHaveText("Activity · #agents");
|
||||
const recency = page.getByTestId("agent-session-recency-label");
|
||||
await expect(recency).toHaveText("No updates yet");
|
||||
await expect(recency).toBeVisible();
|
||||
|
||||
// Simulate long-scope pressure deterministically: scope owns truncation
|
||||
// while the independently shrinking recency stays visible.
|
||||
await scope.evaluate((element) => {
|
||||
element.style.width = "5rem";
|
||||
element.style.flex = "none";
|
||||
});
|
||||
expect(
|
||||
await scope.evaluate((element) => element.scrollWidth),
|
||||
).toBeGreaterThan(await scope.evaluate((element) => element.clientWidth));
|
||||
await expect(recency).toBeVisible();
|
||||
|
||||
await page.getByTestId("agent-session-settings-menu-trigger").click();
|
||||
await page.getByTestId("agent-session-toggle-raw-feed").click();
|
||||
await expect(scope).toHaveText("Raw ACP activity · #agents");
|
||||
expect(
|
||||
await scope.evaluate((element) => element.scrollWidth),
|
||||
).toBeGreaterThan(await scope.evaluate((element) => element.clientWidth));
|
||||
await expect(recency).toHaveText("No updates yet");
|
||||
await expect(recency).toBeVisible();
|
||||
await page.keyboard.press("Escape");
|
||||
|
||||
await waitForAnimations(page);
|
||||
await panel.screenshot({ path: `${SHOTS}/01-channel-scoped.png` });
|
||||
});
|
||||
|
||||
test("unscoped pane shows All channels", async ({ page }) => {
|
||||
// The agent lives in #random only. Restoring an agentSession URL on
|
||||
// #agents (where the agent is not in the activity list) puts the pane in
|
||||
// all-channels scope — the state that looked silently broken before the
|
||||
// scope label existed. The app uses a hash router, so the deep link goes
|
||||
// in the hash.
|
||||
await installMockBridge(page, {
|
||||
managedAgents: [
|
||||
{
|
||||
pubkey: AGENT_PUBKEY,
|
||||
name: LONG_AGENT_NAME,
|
||||
status: "running" as const,
|
||||
channelNames: ["random"],
|
||||
},
|
||||
],
|
||||
searchProfiles: [
|
||||
{
|
||||
pubkey: AGENT_PUBKEY,
|
||||
displayName: LONG_AGENT_NAME,
|
||||
isAgent: true,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
await page.goto(
|
||||
`/#/channels/${AGENTS_CHANNEL_ID}?agentSession=${AGENT_PUBKEY}`,
|
||||
{ waitUntil: "domcontentloaded" },
|
||||
);
|
||||
await expect(page.getByTestId("chat-title")).toHaveText("agents");
|
||||
|
||||
const panel = page.getByTestId("agent-session-thread-panel");
|
||||
await expect(panel).toBeVisible({ timeout: 10_000 });
|
||||
await expect(page.getByTestId("agent-session-agent-name")).toHaveText(
|
||||
LONG_AGENT_NAME,
|
||||
);
|
||||
const agentName = page.getByTestId("agent-session-agent-name");
|
||||
expect(
|
||||
await agentName.evaluate((element) => element.scrollWidth),
|
||||
).toBeGreaterThan(
|
||||
await agentName.evaluate((element) => element.clientWidth),
|
||||
);
|
||||
const scope = page.getByTestId("agent-session-scope-label");
|
||||
await expect(scope).toHaveText("Activity · All channels");
|
||||
const recency = page.getByTestId("agent-session-recency-label");
|
||||
await expect(recency).toHaveText("No updates yet");
|
||||
await expect(recency).toBeVisible();
|
||||
|
||||
await page.setViewportSize({ width: 720, height: 700 });
|
||||
await expect(scope).toBeVisible();
|
||||
await expect(recency).toBeVisible();
|
||||
const recencyWidth = await recency.evaluate(
|
||||
(element) => element.clientWidth,
|
||||
);
|
||||
|
||||
await page.getByTestId("agent-session-settings-menu-trigger").click();
|
||||
await page.getByTestId("agent-session-toggle-raw-feed").click();
|
||||
await expect(scope).toHaveText("Raw ACP activity · All channels");
|
||||
await expect(recency).toBeVisible();
|
||||
expect(await recency.evaluate((element) => element.clientWidth)).toBe(
|
||||
recencyWidth,
|
||||
);
|
||||
await page.keyboard.press("Escape");
|
||||
|
||||
await waitForAnimations(page);
|
||||
await panel.screenshot({ path: `${SHOTS}/02-all-channels.png` });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user