Ver código fonte

refactor(app): remove dead e2e selectors, mock helpers, and unused imports

- selectors: permissionReject/AllowAlways/AllowOnce, sessionTodoDock/Toggle/List,
  projectClearNotifications, dropdownMenuTrigger
- mock: titleMatch, promptMatch, openaiModel, withMockOpenAI
- actions: withNoReplyPrompt, unused dropdownMenuTriggerSelector/Route imports
Kit Langton 2 semanas atrás
pai
commit
4453ff26f6

+ 1 - 23
packages/app/e2e/actions.ts

@@ -1,5 +1,5 @@
 import { base64Decode, base64Encode } from "@opencode-ai/util/encode"
 import { base64Decode, base64Encode } from "@opencode-ai/util/encode"
-import { expect, type Locator, type Page, type Route } from "@playwright/test"
+import { expect, type Locator, type Page } from "@playwright/test"
 import fs from "node:fs/promises"
 import fs from "node:fs/promises"
 import os from "node:os"
 import os from "node:os"
 import path from "node:path"
 import path from "node:path"
@@ -7,7 +7,6 @@ import { execSync } from "node:child_process"
 import { terminalAttr, type E2EWindow } from "../src/testing/terminal"
 import { terminalAttr, type E2EWindow } from "../src/testing/terminal"
 import { createSdk, modKey, resolveDirectory, serverUrl } from "./utils"
 import { createSdk, modKey, resolveDirectory, serverUrl } from "./utils"
 import {
 import {
-  dropdownMenuTriggerSelector,
   dropdownMenuContentSelector,
   dropdownMenuContentSelector,
   projectSwitchSelector,
   projectSwitchSelector,
   projectMenuTriggerSelector,
   projectMenuTriggerSelector,
@@ -43,27 +42,6 @@ export async function defocus(page: Page) {
     .catch(() => undefined)
     .catch(() => undefined)
 }
 }
 
 
-export async function withNoReplyPrompt<T>(page: Page, fn: () => Promise<T>) {
-  const urls = ["**/session/*/prompt_async", "**/session/*/message"]
-  const route = async (input: Route) => {
-    const body = input.request().postDataJSON()
-    await input.continue({
-      postData: JSON.stringify({ ...body, noReply: true }),
-      headers: {
-        ...input.request().headers(),
-        "content-type": "application/json",
-      },
-    })
-  }
-
-  await Promise.all(urls.map((url) => page.route(url, route)))
-  try {
-    return await fn()
-  } finally {
-    await Promise.all(urls.map((url) => page.unroute(url, route)))
-  }
-}
-
 async function terminalID(term: Locator) {
 async function terminalID(term: Locator) {
   const id = await term.getAttribute(terminalAttr)
   const id = await term.getAttribute(terminalAttr)
   if (id) return id
   if (id) return id

+ 0 - 41
packages/app/e2e/prompt/mock.ts

@@ -1,21 +1,9 @@
-import { createSdk } from "../utils"
-
-export const openaiModel = { providerID: "openai", modelID: "gpt-5.3-chat-latest" }
-
 type Hit = { body: Record<string, unknown> }
 type Hit = { body: Record<string, unknown> }
 
 
 export function bodyText(hit: Hit) {
 export function bodyText(hit: Hit) {
   return JSON.stringify(hit.body)
   return JSON.stringify(hit.body)
 }
 }
 
 
-export function titleMatch(hit: Hit) {
-  return bodyText(hit).includes("Generate a title for this conversation")
-}
-
-export function promptMatch(token: string) {
-  return (hit: Hit) => bodyText(hit).includes(token)
-}
-
 /**
 /**
  * Match requests whose body contains the exact serialized tool input.
  * Match requests whose body contains the exact serialized tool input.
  * The seed prompts embed JSON.stringify(input) in the prompt text, which
  * The seed prompts embed JSON.stringify(input) in the prompt text, which
@@ -25,32 +13,3 @@ export function inputMatch(input: unknown) {
   const escaped = JSON.stringify(JSON.stringify(input)).slice(1, -1)
   const escaped = JSON.stringify(JSON.stringify(input)).slice(1, -1)
   return (hit: Hit) => bodyText(hit).includes(escaped)
   return (hit: Hit) => bodyText(hit).includes(escaped)
 }
 }
-
-export async function withMockOpenAI<T>(input: { serverUrl: string; llmUrl: string; fn: () => Promise<T> }) {
-  const sdk = createSdk(undefined, input.serverUrl)
-  const prev = await sdk.global.config.get().then((res) => res.data ?? {})
-
-  try {
-    await sdk.global.config.update({
-      config: {
-        ...prev,
-        model: `${openaiModel.providerID}/${openaiModel.modelID}`,
-        enabled_providers: ["openai"],
-        provider: {
-          ...prev.provider,
-          openai: {
-            ...prev.provider?.openai,
-            options: {
-              ...prev.provider?.openai?.options,
-              apiKey: "test-key",
-              baseURL: input.llmUrl,
-            },
-          },
-        },
-      },
-    })
-    return await input.fn()
-  } finally {
-    await sdk.global.config.update({ config: prev })
-  }
-}

+ 0 - 11
packages/app/e2e/selectors.ts

@@ -4,13 +4,7 @@ export const terminalSelector = `${terminalPanelSelector} [data-component="termi
 export const sessionComposerDockSelector = '[data-component="session-prompt-dock"]'
 export const sessionComposerDockSelector = '[data-component="session-prompt-dock"]'
 export const questionDockSelector = '[data-component="dock-prompt"][data-kind="question"]'
 export const questionDockSelector = '[data-component="dock-prompt"][data-kind="question"]'
 export const permissionDockSelector = '[data-component="dock-prompt"][data-kind="permission"]'
 export const permissionDockSelector = '[data-component="dock-prompt"][data-kind="permission"]'
-export const permissionRejectSelector = `${permissionDockSelector} [data-slot="permission-footer-actions"] [data-component="button"]:nth-child(1)`
-export const permissionAllowAlwaysSelector = `${permissionDockSelector} [data-slot="permission-footer-actions"] [data-component="button"]:nth-child(2)`
-export const permissionAllowOnceSelector = `${permissionDockSelector} [data-slot="permission-footer-actions"] [data-component="button"]:nth-child(3)`
-export const sessionTodoDockSelector = '[data-component="session-todo-dock"]'
-export const sessionTodoToggleSelector = '[data-action="session-todo-toggle"]'
 export const sessionTodoToggleButtonSelector = '[data-action="session-todo-toggle-button"]'
 export const sessionTodoToggleButtonSelector = '[data-action="session-todo-toggle-button"]'
-export const sessionTodoListSelector = '[data-slot="session-todo-list"]'
 
 
 export const modelVariantCycleSelector = '[data-action="model-variant-cycle"]'
 export const modelVariantCycleSelector = '[data-action="model-variant-cycle"]'
 export const promptAgentSelector = '[data-component="prompt-agent-control"]'
 export const promptAgentSelector = '[data-component="prompt-agent-control"]'
@@ -40,9 +34,6 @@ export const projectMenuTriggerSelector = (slug: string) =>
 
 
 export const projectCloseMenuSelector = (slug: string) => `[data-action="project-close-menu"][data-project="${slug}"]`
 export const projectCloseMenuSelector = (slug: string) => `[data-action="project-close-menu"][data-project="${slug}"]`
 
 
-export const projectClearNotificationsSelector = (slug: string) =>
-  `[data-action="project-clear-notifications"][data-project="${slug}"]`
-
 export const projectWorkspacesToggleSelector = (slug: string) =>
 export const projectWorkspacesToggleSelector = (slug: string) =>
   `[data-action="project-workspaces-toggle"][data-project="${slug}"]`
   `[data-action="project-workspaces-toggle"][data-project="${slug}"]`
 
 
@@ -50,8 +41,6 @@ export const titlebarRightSelector = "#opencode-titlebar-right"
 
 
 export const popoverBodySelector = '[data-slot="popover-body"]'
 export const popoverBodySelector = '[data-slot="popover-body"]'
 
 
-export const dropdownMenuTriggerSelector = '[data-slot="dropdown-menu-trigger"]'
-
 export const dropdownMenuContentSelector = '[data-component="dropdown-menu-content"]'
 export const dropdownMenuContentSelector = '[data-component="dropdown-menu-content"]'
 
 
 export const inlineInputSelector = '[data-component="inline-input"]'
 export const inlineInputSelector = '[data-component="inline-input"]'