Files
copilotkit__copilotkit/showcase/packages/ms-agent-python/tests/e2e/gen-ui-agent.spec.ts
Jordan Ritter b6fcafe4cd feat: all 17 showcase packages to 9-demo parity with Sales Dashboard hero
Every package: 9 demos (agentic-chat hero, hitl MeetingTimePicker, tool-rendering,
gen-ui-tool-based Chart Generator, gen-ui-agent A2UI dynamic, shared-state-read/
write/streaming, subagents), 7 backend tools, Playwright e2e tests per demo.
Cross-cutting: debug routes, error boundaries, camelCase SSE, generate_a2ui
conversation context, spring-ai JSON weather, langroid adapter fixes.

# Conflicts:
#	showcase/packages/ag2/manifest.yaml
#	showcase/packages/ag2/src/agents/agent.py
#	showcase/packages/ag2/src/app/api/debug/route.ts
#	showcase/packages/ag2/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/ag2/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/ag2/src/app/demos/hitl/page.tsx
#	showcase/packages/ag2/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/ag2/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/ag2/tests/e2e/hitl.spec.ts
#	showcase/packages/ag2/tsconfig.json
#	showcase/packages/agno/manifest.yaml
#	showcase/packages/agno/src/agents/main.py
#	showcase/packages/agno/src/app/api/debug/route.ts
#	showcase/packages/agno/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/agno/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/agno/src/app/demos/hitl/page.tsx
#	showcase/packages/agno/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/agno/tsconfig.json
#	showcase/packages/claude-sdk-python/manifest.yaml
#	showcase/packages/claude-sdk-python/src/agents/agent.py
#	showcase/packages/claude-sdk-python/src/app/api/debug/route.ts
#	showcase/packages/claude-sdk-python/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/claude-sdk-python/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/claude-sdk-python/src/app/demos/hitl/page.tsx
#	showcase/packages/claude-sdk-python/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/claude-sdk-python/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/claude-sdk-python/tests/e2e/hitl.spec.ts
#	showcase/packages/claude-sdk-python/tsconfig.json
#	showcase/packages/claude-sdk-typescript/.gitignore
#	showcase/packages/claude-sdk-typescript/src/app/api/debug/route.ts
#	showcase/packages/claude-sdk-typescript/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/claude-sdk-typescript/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/claude-sdk-typescript/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/claude-sdk-typescript/tests/e2e/hitl.spec.ts
#	showcase/packages/crewai-crews/manifest.yaml
#	showcase/packages/crewai-crews/src/agents/crew.py
#	showcase/packages/crewai-crews/src/agents/tools/custom_tool.py
#	showcase/packages/crewai-crews/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/crewai-crews/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/google-adk/manifest.yaml
#	showcase/packages/google-adk/src/agents/main.py
#	showcase/packages/google-adk/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/google-adk/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/google-adk/src/app/demos/hitl/page.tsx
#	showcase/packages/langgraph-fastapi/src/app/api/debug/route.ts
#	showcase/packages/langgraph-fastapi/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/langgraph-fastapi/src/app/demos/hitl/page.tsx
#	showcase/packages/langgraph-fastapi/tests/e2e/hitl.spec.ts
#	showcase/packages/langgraph-fastapi/tsconfig.json
#	showcase/packages/langgraph-python/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/langgraph-python/src/app/demos/hitl/page.tsx
#	showcase/packages/langgraph-python/tests/e2e/agentic-chat.spec.ts
#	showcase/packages/langgraph-python/tests/e2e/hitl.spec.ts
#	showcase/packages/langgraph-python/tests/e2e/shared-state-streaming.spec.ts
#	showcase/packages/langgraph-python/tests/e2e/shared-state-write.spec.ts
#	showcase/packages/langgraph-python/tests/e2e/subagents.spec.ts
#	showcase/packages/langgraph-python/tsconfig.json
#	showcase/packages/langgraph-typescript/.gitignore
#	showcase/packages/langgraph-typescript/src/agent/graph.ts
#	showcase/packages/langgraph-typescript/src/app/api/debug/route.ts
#	showcase/packages/langgraph-typescript/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/langgraph-typescript/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/langgraph-typescript/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/langgraph-typescript/tests/e2e/hitl.spec.ts
#	showcase/packages/langroid/src/agents/agent.py
#	showcase/packages/langroid/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/langroid/src/app/demos/hitl/page.tsx
#	showcase/packages/langroid/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/llamaindex/manifest.yaml
#	showcase/packages/llamaindex/src/agents/agent.py
#	showcase/packages/llamaindex/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/llamaindex/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/llamaindex/src/app/demos/hitl/page.tsx
#	showcase/packages/llamaindex/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/mastra/.gitignore
#	showcase/packages/mastra/package.json
#	showcase/packages/mastra/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/mastra/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/mastra/src/mastra/agents/index.ts
#	showcase/packages/mastra/src/mastra/tools/index.ts
#	showcase/packages/mastra/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/mastra/tests/e2e/hitl.spec.ts
#	showcase/packages/ms-agent-dotnet/agent/Program.cs
#	showcase/packages/ms-agent-dotnet/manifest.yaml
#	showcase/packages/ms-agent-dotnet/src/app/api/debug/route.ts
#	showcase/packages/ms-agent-dotnet/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/ms-agent-dotnet/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/ms-agent-dotnet/src/app/demos/hitl/page.tsx
#	showcase/packages/ms-agent-dotnet/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/ms-agent-dotnet/tests/e2e/hitl.spec.ts
#	showcase/packages/ms-agent-dotnet/tsconfig.json
#	showcase/packages/ms-agent-python/src/agents/agent.py
#	showcase/packages/ms-agent-python/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/ms-agent-python/src/app/demos/hitl/page.tsx
#	showcase/packages/ms-agent-python/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/pydantic-ai/manifest.yaml
#	showcase/packages/pydantic-ai/src/agents/agent.py
#	showcase/packages/pydantic-ai/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/pydantic-ai/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/pydantic-ai/src/app/demos/hitl/page.tsx
#	showcase/packages/spring-ai/manifest.yaml
#	showcase/packages/spring-ai/src/app/api/debug/route.ts
#	showcase/packages/spring-ai/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/spring-ai/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/spring-ai/src/app/demos/hitl/page.tsx
#	showcase/packages/spring-ai/src/app/demos/tool-rendering/page.tsx
#	showcase/packages/spring-ai/src/main/java/com/copilotkit/showcase/springai/AgentConfig.java
#	showcase/packages/spring-ai/src/main/java/com/copilotkit/showcase/springai/tools/WeatherTool.java
#	showcase/packages/spring-ai/tests/e2e/gen-ui-tool-based.spec.ts
#	showcase/packages/spring-ai/tests/e2e/hitl.spec.ts
#	showcase/packages/spring-ai/tsconfig.json
#	showcase/packages/strands/manifest.yaml
#	showcase/packages/strands/src/agents/agent.py
#	showcase/packages/strands/src/app/demos/agentic-chat/page.tsx
#	showcase/packages/strands/src/app/demos/gen-ui-tool-based/page.tsx
#	showcase/packages/strands/src/app/demos/hitl/page.tsx
#	showcase/packages/strands/src/app/demos/tool-rendering/page.tsx
#	showcase/shell/src/data/registry.json
2026-04-13 19:57:58 -07:00

64 lines
2.4 KiB
TypeScript

import { test, expect } from "@playwright/test";
test.describe("Agentic Generative UI", () => {
test.beforeEach(async ({ page }) => {
await page.goto("/demos/gen-ui-agent");
});
test("page loads with chat input", async ({ page }) => {
await expect(page.getByPlaceholder("Type a message")).toBeVisible();
});
test("sends message and gets assistant response", async ({ page }) => {
const input = page.getByPlaceholder("Type a message");
await input.fill("Hello");
await input.press("Enter");
await expect(page.locator('[data-role="assistant"]').first()).toBeVisible({
timeout: 30000,
});
});
test("message list container exists", async ({ page }) => {
// The custom messageView renders a container with data-testid
await expect(
page.locator('[data-testid="copilot-message-list"]'),
).toBeVisible({ timeout: 10000 });
});
test("complex task triggers task progress tracker", async ({ page }) => {
const input = page.getByPlaceholder("Type a message");
await input.fill(
"Create a comprehensive dashboard showing sales metrics, revenue trends, and customer segments",
);
await input.press("Enter");
// The TaskProgress component should appear when the agent reports steps
const taskProgress = page.locator('[data-testid="task-progress"]');
await expect(taskProgress).toBeVisible({ timeout: 60000 });
// Should show a "Task Progress" heading
await expect(taskProgress.getByText("Task Progress")).toBeVisible();
// Should show a completion counter like "X/Y Complete"
await expect(taskProgress.getByText(/\d+\/\d+\s*Complete/)).toBeVisible();
// Step descriptions should be visible
const stepTexts = page.locator('[data-testid="task-step-text"]');
await expect(stepTexts.first()).toBeVisible({ timeout: 5000 });
});
test("task progress shows progress bar", async ({ page }) => {
const input = page.getByPlaceholder("Type a message");
await input.fill("Build a report analyzing quarterly performance data");
await input.press("Enter");
const taskProgress = page.locator('[data-testid="task-progress"]');
await expect(taskProgress).toBeVisible({ timeout: 60000 });
// The progress bar is a rounded-full div inside the tracker
const progressBar = taskProgress.locator(".rounded-full").first();
await expect(progressBar).toBeVisible();
});
});