79 lines
2.9 KiB
TypeScript
79 lines
2.9 KiB
TypeScript
import { test, expect } from "@playwright/test";
|
|
|
|
// Shared State (Read + Write) — Preferences + Scratch Pad demo. The page
|
|
// publishes `agent.state.preferences` via setState, and the agent writes
|
|
// back via its `set_notes` tool. All three pills must hit
|
|
// shared-state-specific fixtures rather than falling through to the bare
|
|
// "hi" / "plan" catch-alls in feature-parity.json.
|
|
test.describe("Shared State (Read + Write)", () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto("/demos/shared-state-read-write");
|
|
});
|
|
|
|
test("preferences panel and agent scratch pad both mount", async ({
|
|
page,
|
|
}) => {
|
|
await expect(page.getByText("Your preferences")).toBeVisible({
|
|
timeout: 15000,
|
|
});
|
|
await expect(page.getByText("Agent Scratch pad")).toBeVisible({
|
|
timeout: 15000,
|
|
});
|
|
});
|
|
|
|
test("starter suggestions render", async ({ page }) => {
|
|
for (const title of ["Greet me", "Remember something", "Plan a weekend"]) {
|
|
await expect(page.getByRole("button", { name: title })).toBeVisible({
|
|
timeout: 15000,
|
|
});
|
|
}
|
|
});
|
|
|
|
// Regression for the wrong-fixture-fallthrough bug:
|
|
// The Greet me pill ("Say hi and introduce yourself.") was matching
|
|
// feature-parity.json's bare `userMessage: "hi"` fixture and replying
|
|
// with the generic showcase-assistant blurb ("Hi there! I'm your
|
|
// showcase assistant. I can help with weather, charts, meetings…").
|
|
// Likewise, Plan a weekend ("Suggest a weekend plan based on my
|
|
// interests.") was matching the bare `userMessage: "plan"` fixture and
|
|
// replying with a generic 5-step content-marketing plan. Fix: add
|
|
// d5-all.json fixtures with longer substring matchers that win first.
|
|
test("Greet me pill returns a shared-state-aware greeting, not the generic showcase blurb", async ({
|
|
page,
|
|
}) => {
|
|
test.setTimeout(120_000);
|
|
|
|
await page.getByRole("button", { name: /^Greet me$/i }).click();
|
|
|
|
const assistantMessage = page
|
|
.locator('[data-testid="copilot-assistant-message"]')
|
|
.last();
|
|
await expect(assistantMessage).toContainText(/shared-state co-pilot/i, {
|
|
timeout: 60_000,
|
|
});
|
|
// Negative assertion: the wrong-fixture response is gone.
|
|
await expect(assistantMessage).not.toContainText(
|
|
/showcase assistant\. I can help with weather, charts/i,
|
|
);
|
|
});
|
|
|
|
test("Plan a weekend pill returns an interests-aware plan, not the generic content-marketing plan", async ({
|
|
page,
|
|
}) => {
|
|
test.setTimeout(120_000);
|
|
|
|
await page.getByRole("button", { name: /^Plan a weekend$/i }).click();
|
|
|
|
const assistantMessage = page
|
|
.locator('[data-testid="copilot-assistant-message"]')
|
|
.last();
|
|
await expect(assistantMessage).toContainText(/interests panel/i, {
|
|
timeout: 60_000,
|
|
});
|
|
// Negative assertion: the wrong-fixture response is gone.
|
|
await expect(assistantMessage).not.toContainText(
|
|
/Research the topic.*Outline key points/is,
|
|
);
|
|
});
|
|
});
|