mirror of
https://github.com/anomalyco/opencode.git
synced 2026-02-01 22:48:16 +00:00
test(app): change language test (#11295)
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { serverName } from "./utils"
|
import { serverName } from "../utils"
|
||||||
|
|
||||||
test("home renders and shows core entrypoints", async ({ page }) => {
|
test("home renders and shows core entrypoints", async ({ page }) => {
|
||||||
await page.goto("/")
|
await page.goto("/")
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { dirPath, promptSelector } from "./utils"
|
import { dirPath, promptSelector } from "../utils"
|
||||||
|
|
||||||
test("project route redirects to /session", async ({ page, directory, slug }) => {
|
test("project route redirects to /session", async ({ page, directory, slug }) => {
|
||||||
await page.goto(dirPath(directory))
|
await page.goto(dirPath(directory))
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { modKey } from "./utils"
|
import { modKey } from "../utils"
|
||||||
|
|
||||||
test("search palette opens and closes", async ({ page, gotoSession }) => {
|
test("search palette opens and closes", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { serverName, serverUrl } from "./utils"
|
import { serverName, serverUrl } from "../utils"
|
||||||
|
|
||||||
const DEFAULT_SERVER_URL_KEY = "opencode.settings.dat:defaultServerUrl"
|
const DEFAULT_SERVER_URL_KEY = "opencode.settings.dat:defaultServerUrl"
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { promptSelector } from "./utils"
|
import { promptSelector } from "../utils"
|
||||||
|
|
||||||
test("can open an existing session and type into the prompt", async ({ page, sdk, gotoSession }) => {
|
test("can open an existing session and type into the prompt", async ({ page, sdk, gotoSession }) => {
|
||||||
const title = `e2e smoke ${Date.now()}`
|
const title = `e2e smoke ${Date.now()}`
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { modKey, promptSelector } from "./utils"
|
import { modKey, promptSelector } from "../utils"
|
||||||
|
|
||||||
test("titlebar back/forward navigates between sessions", async ({ page, slug, sdk, gotoSession }) => {
|
test("titlebar back/forward navigates between sessions", async ({ page, slug, sdk, gotoSession }) => {
|
||||||
await page.setViewportSize({ width: 1400, height: 800 })
|
await page.setViewportSize({ width: 1400, height: 800 })
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { modKey } from "./utils"
|
import { modKey } from "../utils"
|
||||||
|
|
||||||
test("can open a file tab from the search palette", async ({ page, gotoSession }) => {
|
test("can open a file tab from the search palette", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
|
|
||||||
test.skip("file tree can expand folders and open a file", async ({ page, gotoSession }) => {
|
test.skip("file tree can expand folders and open a file", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { modKey } from "./utils"
|
import { modKey } from "../utils"
|
||||||
|
|
||||||
test("smoke file viewer renders real file content", async ({ page, gotoSession }) => {
|
test("smoke file viewer renders real file content", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { promptSelector } from "./utils"
|
import { promptSelector } from "../utils"
|
||||||
|
|
||||||
test("smoke model selection updates prompt footer", async ({ page, gotoSession }) => {
|
test("smoke model selection updates prompt footer", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { modKey, promptSelector } from "./utils"
|
import { modKey, promptSelector } from "../utils"
|
||||||
|
|
||||||
test("hiding a model removes it from the model picker", async ({ page, gotoSession }) => {
|
test("hiding a model removes it from the model picker", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { promptSelector } from "./utils"
|
import { promptSelector } from "../utils"
|
||||||
|
|
||||||
test("context panel can be opened from the prompt", async ({ page, sdk, gotoSession }) => {
|
test("context panel can be opened from the prompt", async ({ page, sdk, gotoSession }) => {
|
||||||
const title = `e2e smoke context ${Date.now()}`
|
const title = `e2e smoke context ${Date.now()}`
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { promptSelector } from "./utils"
|
import { promptSelector } from "../utils"
|
||||||
|
|
||||||
test("smoke @mention inserts file pill token", async ({ page, gotoSession }) => {
|
test("smoke @mention inserts file pill token", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { promptSelector } from "./utils"
|
import { promptSelector } from "../utils"
|
||||||
|
|
||||||
test("smoke /open opens file picker dialog", async ({ page, gotoSession }) => {
|
test("smoke /open opens file picker dialog", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { promptSelector } from "./utils"
|
import { promptSelector } from "../utils"
|
||||||
|
|
||||||
function sessionIDFromUrl(url: string) {
|
function sessionIDFromUrl(url: string) {
|
||||||
const match = /\/session\/([^/?#]+)/.exec(url)
|
const match = /\/session\/([^/?#]+)/.exec(url)
|
||||||
39
packages/app/e2e/settings/settings-language.spec.ts
Normal file
39
packages/app/e2e/settings/settings-language.spec.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import { test, expect } from "../fixtures"
|
||||||
|
import { modKey, settingsLanguageSelectSelector } from "../utils"
|
||||||
|
|
||||||
|
test("smoke changing language updates settings labels", async ({ page, gotoSession }) => {
|
||||||
|
await page.addInitScript(() => {
|
||||||
|
localStorage.setItem("opencode.global.dat:language", JSON.stringify({ locale: "en" }))
|
||||||
|
})
|
||||||
|
|
||||||
|
await gotoSession()
|
||||||
|
|
||||||
|
const dialog = page.getByRole("dialog")
|
||||||
|
|
||||||
|
await page.keyboard.press(`${modKey}+Comma`).catch(() => undefined)
|
||||||
|
|
||||||
|
const opened = await dialog
|
||||||
|
.waitFor({ state: "visible", timeout: 3000 })
|
||||||
|
.then(() => true)
|
||||||
|
.catch(() => false)
|
||||||
|
|
||||||
|
if (!opened) {
|
||||||
|
await page.getByRole("button", { name: "Settings" }).first().click()
|
||||||
|
await expect(dialog).toBeVisible()
|
||||||
|
}
|
||||||
|
|
||||||
|
const heading = dialog.getByRole("heading", { level: 2 })
|
||||||
|
await expect(heading).toHaveText("General")
|
||||||
|
|
||||||
|
const select = dialog.locator(settingsLanguageSelectSelector)
|
||||||
|
await expect(select).toBeVisible()
|
||||||
|
await select.locator('[data-slot="select-select-trigger"]').click()
|
||||||
|
|
||||||
|
await page.locator('[data-slot="select-select-item"]').filter({ hasText: "Deutsch" }).click()
|
||||||
|
|
||||||
|
await expect(heading).toHaveText("Allgemein")
|
||||||
|
|
||||||
|
await select.locator('[data-slot="select-select-trigger"]').click()
|
||||||
|
await page.locator('[data-slot="select-select-item"]').filter({ hasText: "English" }).click()
|
||||||
|
await expect(heading).toHaveText("General")
|
||||||
|
})
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { modKey, promptSelector } from "./utils"
|
import { modKey, promptSelector } from "../utils"
|
||||||
|
|
||||||
test("smoke providers settings opens provider selector", async ({ page, gotoSession }) => {
|
test("smoke providers settings opens provider selector", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { modKey } from "./utils"
|
import { modKey } from "../utils"
|
||||||
|
|
||||||
test("smoke settings dialog opens, switches tabs, closes", async ({ page, gotoSession }) => {
|
test("smoke settings dialog opens, switches tabs, closes", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,33 +1,7 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { modKey, promptSelector } from "./utils"
|
import { modKey, promptSelector } from "../utils"
|
||||||
|
|
||||||
type Locator = {
|
test("sidebar session links navigate to the selected session", async ({ page, slug, sdk, gotoSession }) => {
|
||||||
first: () => Locator
|
|
||||||
getAttribute: (name: string) => Promise<string | null>
|
|
||||||
scrollIntoViewIfNeeded: () => Promise<void>
|
|
||||||
click: () => Promise<void>
|
|
||||||
}
|
|
||||||
|
|
||||||
type Page = {
|
|
||||||
locator: (selector: string) => Locator
|
|
||||||
keyboard: {
|
|
||||||
press: (key: string) => Promise<void>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type Fixtures = {
|
|
||||||
page: Page
|
|
||||||
slug: string
|
|
||||||
sdk: {
|
|
||||||
session: {
|
|
||||||
create: (input: { title: string }) => Promise<{ data?: { id?: string } }>
|
|
||||||
delete: (input: { sessionID: string }) => Promise<unknown>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gotoSession: (sessionID?: string) => Promise<void>
|
|
||||||
}
|
|
||||||
|
|
||||||
test("sidebar session links navigate to the selected session", async ({ page, slug, sdk, gotoSession }: Fixtures) => {
|
|
||||||
const stamp = Date.now()
|
const stamp = Date.now()
|
||||||
|
|
||||||
const one = await sdk.session.create({ title: `e2e sidebar nav 1 ${stamp}` }).then((r) => r.data)
|
const one = await sdk.session.create({ title: `e2e sidebar nav 1 ${stamp}` }).then((r) => r.data)
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { modKey } from "./utils"
|
import { modKey } from "../utils"
|
||||||
|
|
||||||
test("sidebar can be collapsed and expanded", async ({ page, gotoSession }) => {
|
test("sidebar can be collapsed and expanded", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { promptSelector, terminalSelector, terminalToggleKey } from "./utils"
|
import { promptSelector, terminalSelector, terminalToggleKey } from "../utils"
|
||||||
|
|
||||||
test("smoke terminal mounts and can create a second tab", async ({ page, gotoSession }) => {
|
test("smoke terminal mounts and can create a second tab", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { test, expect } from "./fixtures"
|
import { test, expect } from "../fixtures"
|
||||||
import { terminalSelector, terminalToggleKey } from "./utils"
|
import { terminalSelector, terminalToggleKey } from "../utils"
|
||||||
|
|
||||||
test("terminal panel can be toggled", async ({ page, gotoSession }) => {
|
test("terminal panel can be toggled", async ({ page, gotoSession }) => {
|
||||||
await gotoSession()
|
await gotoSession()
|
||||||
@@ -14,6 +14,8 @@ export const promptSelector = '[data-component="prompt-input"]'
|
|||||||
export const terminalSelector = '[data-component="terminal"]'
|
export const terminalSelector = '[data-component="terminal"]'
|
||||||
export const modelVariantCycleSelector = '[data-action="model-variant-cycle"]'
|
export const modelVariantCycleSelector = '[data-action="model-variant-cycle"]'
|
||||||
|
|
||||||
|
export const settingsLanguageSelectSelector = '[data-action="settings-language"]'
|
||||||
|
|
||||||
export function createSdk(directory?: string) {
|
export function createSdk(directory?: string) {
|
||||||
return createOpencodeClient({ baseUrl: serverUrl, directory, throwOnError: true })
|
return createOpencodeClient({ baseUrl: serverUrl, directory, throwOnError: true })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,6 +154,7 @@ export const SettingsGeneral: Component = () => {
|
|||||||
description={language.t("settings.general.row.language.description")}
|
description={language.t("settings.general.row.language.description")}
|
||||||
>
|
>
|
||||||
<Select
|
<Select
|
||||||
|
data-action="settings-language"
|
||||||
options={languageOptions()}
|
options={languageOptions()}
|
||||||
current={languageOptions().find((o) => o.value === language.locale())}
|
current={languageOptions().find((o) => o.value === language.locale())}
|
||||||
value={(o) => o.value}
|
value={(o) => o.value}
|
||||||
|
|||||||
Reference in New Issue
Block a user