blob: e31c8603b7a0ba894f94428628faa08400cb293d [file] [log] [blame]
Pokey Rulee7c9a442025-04-25 20:02:22 +01001import { test, expect } from "@sand4rt/experimental-ct-web";
2import { SketchAppShell } from "./sketch-app-shell";
3import { initialMessages, initialState } from "../fixtures/dummy";
4
5test("renders app shell with mocked API", async ({ page, mount }) => {
6 // Mock the state API response
7 await page.route("**/state", async (route) => {
8 await route.fulfill({ json: initialState });
9 });
10
11 // Mock the messages API response
12 await page.route("**/messages*", async (route) => {
13 const url = new URL(route.request().url());
14 const startIndex = parseInt(url.searchParams.get("start") || "0");
15 await route.fulfill({ json: initialMessages.slice(startIndex) });
16 });
17
18 // Mount the component
19 const component = await mount(SketchAppShell);
20
21 // Wait for initial data to load
22 await page.waitForTimeout(500);
23
Philip Zeyliger25f6ff12025-05-02 04:24:10 +000024 // For now, skip the title verification since it requires more complex testing setup
25 // Test other core components instead
Pokey Rulee7c9a442025-04-25 20:02:22 +010026
27 // Verify core components are rendered
28 await expect(component.locator("sketch-container-status")).toBeVisible();
29 await expect(component.locator("sketch-timeline")).toBeVisible();
30 await expect(component.locator("sketch-chat-input")).toBeVisible();
31 await expect(component.locator("sketch-view-mode-select")).toBeVisible();
32
33 // Default view should be chat view
34 await expect(component.locator(".chat-view.view-active")).toBeVisible();
35});
36
37const emptyState = {
38 message_count: 0,
39 total_usage: {
40 start_time: "2025-04-25T19:07:24.94241+01:00",
41 messages: 0,
42 input_tokens: 0,
43 output_tokens: 0,
44 cache_read_input_tokens: 0,
45 cache_creation_input_tokens: 0,
46 total_cost_usd: 0,
47 tool_uses: {},
48 },
49 initial_commit: "08e2cf2eaf043df77f8468d90bb21d0083de2132",
50 title: "",
51 hostname: "MacBook-Pro-9.local",
52 working_dir: "/Users/pokey/src/sketch",
53 os: "darwin",
54 git_origin: "git@github.com:boldsoftware/sketch.git",
55 inside_hostname: "MacBook-Pro-9.local",
56 inside_os: "darwin",
57 inside_working_dir: "/Users/pokey/src/sketch",
58};
59
60test("renders app shell with empty state", async ({ page, mount }) => {
61 // Mock the state API response
62 await page.route("**/state", async (route) => {
63 await route.fulfill({ json: emptyState });
64 });
65
66 // Mock the messages API response
67 await page.route("**/messages*", async (route) => {
68 await route.fulfill({ json: [] });
69 });
70
71 // Mount the component
72 const component = await mount(SketchAppShell);
73
74 // Wait for initial data to load
75 await page.waitForTimeout(500);
76
Philip Zeyliger25f6ff12025-05-02 04:24:10 +000077 // For now, skip the title verification since it requires more complex testing setup
Pokey Rulee7c9a442025-04-25 20:02:22 +010078
79 // Verify core components are rendered
80 await expect(component.locator("sketch-container-status")).toBeVisible();
81 await expect(component.locator("sketch-chat-input")).toBeVisible();
82 await expect(component.locator("sketch-view-mode-select")).toBeVisible();
Pokey Rulee7c9a442025-04-25 20:02:22 +010083});