import { expect, test } from "@playwright/test" import { mockOpenCodeServer } from "../utils/mock-server" import { expectAppVisible } from "../utils/waits" const directory = "C:/OpenCode/NewProject" test("creates a session in a new project and selects its model", async ({ page }) => { await mockOpenCodeServer(page, { directory, project: { id: "proj_model_selection_flow", worktree: directory, vcs: "git", name: "NewProject", time: { created: 1_700_000_000_000, updated: 1_700_000_000_000 }, sandboxes: [], }, provider: () => ({ all: [ { id: "opencode", name: "OpenCode", models: { "free-model": { id: "free-model", name: "Free Model", cost: { input: 0, output: 0 }, limit: { context: 200_000 }, }, }, }, { id: "opencode-go", name: "OpenCode Go", models: { "go-model-1": { id: "go-model-1", name: "Go Model 1", cost: { input: 1, output: 1 }, limit: { context: 200_000 }, }, }, }, ], connected: ["opencode", "opencode-go"], default: { providerID: "opencode", modelID: "free-model" }, }), sessions: [], pageMessages: () => ({ items: [] }), fileList: (path) => path ? [] : [{ name: "NewProject", path: "NewProject", absolute: directory, type: "directory", ignored: false }], findFiles: () => ["NewProject"], }) await page.addInitScript(() => { localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } })) localStorage.setItem("opencode.global.dat:server", JSON.stringify({ projects: { local: [] } })) localStorage.setItem( "opencode.global.dat:model", JSON.stringify({ user: [ { providerID: "opencode", modelID: "free-model", visibility: "show" }, { providerID: "opencode-go", modelID: "go-model-1", visibility: "show" }, ], recent: [], variant: {}, }), ) }) await page.goto("/") const addProject = page.locator('[data-action="home-add-project-row"]') await expectAppVisible(addProject) await addProject.click() await page.locator("[data-directory-path]").click() await page.locator('[data-action="home-new-session"]').click() await expectAppVisible(page.locator('[data-component="prompt-input-v2"]')) const modelControl = page.locator('[data-action="prompt-model"]') await modelControl.click() await expect(page.locator('[data-option-key="opencode:free-model"]')).toBeVisible() const goModel = page.locator('[data-option-key="opencode-go:go-model-1"]') await expect(goModel).toBeVisible() await goModel.click() await expect(modelControl).toContainText("Go Model 1") })