mirror of
https://github.com/coder/code-server.git
synced 2026-09-19 14:01:28 +02:00
98 lines
3.3 KiB
TypeScript
98 lines
3.3 KiB
TypeScript
import { test as base } from "@playwright/test"
|
|
import * as path from "path"
|
|
import { getMaybeProxiedCodeServer } from "../utils/helpers"
|
|
import { describe, test, expect } from "./baseFixture"
|
|
|
|
function runTestExtensionTests() {
|
|
// This will only work if the test extension is loaded into code-server.
|
|
test("should have access to VSCODE_PROXY_URI", async ({ codeServerPage }) => {
|
|
const address = await getMaybeProxiedCodeServer(codeServerPage)
|
|
|
|
await codeServerPage.waitForTestExtensionLoaded()
|
|
await codeServerPage.executeCommandViaMenus("code-server: Get proxy URI")
|
|
|
|
// Remove end slash in address.
|
|
const normalizedAddress = address.replace(/\/+$/, "")
|
|
await expect(codeServerPage.page.getByText(`Info: proxyUri: ${normalizedAddress}/proxy/{{port}}/`)).toBeVisible()
|
|
})
|
|
|
|
runExternalUriTests()
|
|
}
|
|
|
|
function runExternalUriTests(proxyEndpointTemplate?: string) {
|
|
const cases = [
|
|
{
|
|
name: "path",
|
|
input: "http://127.0.0.1:1234/my/path",
|
|
suffix: "/my/path",
|
|
},
|
|
{
|
|
name: "query and fragment",
|
|
input: "http://localhost:1234/my/path?token=abc&mode=preview#section",
|
|
suffix: "/my/path?token%3Dabc%26mode%3Dpreview#section",
|
|
},
|
|
{
|
|
name: "encoded components",
|
|
input: "http://0.0.0.0:1234/my%20path/%23file?token=a%20b#my%20section",
|
|
suffix: "/my%20path/%23file?token%3Da%20b#my%20section",
|
|
},
|
|
{
|
|
name: "root path",
|
|
input: "http://127.0.0.1:1234/",
|
|
suffix: "/",
|
|
},
|
|
]
|
|
|
|
for (const { name, input, suffix } of cases) {
|
|
test(`asExternalUri should preserve ${name}`, async ({ codeServerPage }) => {
|
|
const address = await getMaybeProxiedCodeServer(codeServerPage)
|
|
const normalizedAddress = address.replace(/\/+$/, "")
|
|
const proxyBase = proxyEndpointTemplate
|
|
? new URL(proxyEndpointTemplate.replace("{{port}}", "1234"), `${normalizedAddress}/`).toString()
|
|
: `${normalizedAddress}/proxy/1234/`
|
|
|
|
await codeServerPage.waitForTestExtensionLoaded()
|
|
await codeServerPage.executeCommandViaMenus("code-server: asExternalUri test")
|
|
|
|
const inputBox = codeServerPage.page.locator(".quick-input-widget input")
|
|
await inputBox.fill(input)
|
|
await inputBox.press("Enter")
|
|
|
|
// The test extension displays URI.toString(), which also encodes query delimiters.
|
|
const output = `${proxyBase.replace(/\/$/, "")}${suffix}`
|
|
await expect(
|
|
codeServerPage.page.getByText(`Info: input: ${input} output: ${output}`, { exact: true }),
|
|
).toBeVisible()
|
|
})
|
|
}
|
|
}
|
|
|
|
const flags = ["--disable-workspace-trust", "--extensions-dir", path.join(__dirname, "./extensions")]
|
|
|
|
describe("Extensions", flags, {}, () => {
|
|
runTestExtensionTests()
|
|
})
|
|
|
|
for (const proxyEndpointTemplate of ["./proxy/{{port}}", "https://{{port}}-workspace.example.com"]) {
|
|
describe(
|
|
`Extensions with VSCODE_PROXY_URI=${proxyEndpointTemplate}`,
|
|
flags,
|
|
{ VSCODE_PROXY_URI: proxyEndpointTemplate },
|
|
() => {
|
|
runExternalUriTests(proxyEndpointTemplate)
|
|
},
|
|
)
|
|
}
|
|
|
|
if (process.env.USE_PROXY !== "1") {
|
|
describe("Extensions with --cert", [...flags, "--cert"], {}, () => {
|
|
runTestExtensionTests()
|
|
})
|
|
} else {
|
|
base.describe("Extensions with --cert", () => {
|
|
base.skip("skipped because USE_PROXY is set", () => {
|
|
// Playwright will not show this without a function.
|
|
})
|
|
})
|
|
}
|