mirror of https://github.com/coder/coder.git
72 lines
1.9 KiB
TypeScript
72 lines
1.9 KiB
TypeScript
import { test } from "@playwright/test";
|
|
import { randomUUID } from "crypto";
|
|
import {
|
|
createTemplate,
|
|
createWorkspace,
|
|
openTerminalWindow,
|
|
startAgent,
|
|
stopAgent,
|
|
} from "../helpers";
|
|
import { beforeCoderTest } from "../hooks";
|
|
|
|
test.beforeEach(({ page }) => beforeCoderTest(page));
|
|
|
|
test("web terminal", async ({ context, page }) => {
|
|
const token = randomUUID();
|
|
const template = await createTemplate(page, {
|
|
apply: [
|
|
{
|
|
apply: {
|
|
resources: [
|
|
{
|
|
agents: [
|
|
{
|
|
token,
|
|
displayApps: {
|
|
webTerminal: true,
|
|
},
|
|
order: 0,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
});
|
|
const workspaceName = await createWorkspace(page, template);
|
|
const agent = await startAgent(page, token);
|
|
const terminal = await openTerminalWindow(page, context, workspaceName);
|
|
|
|
await terminal.waitForSelector("div.xterm-rows", {
|
|
state: "visible",
|
|
});
|
|
|
|
// Workaround: delay next steps as "div.xterm-rows" can be recreated/reattached
|
|
// after a couple of milliseconds.
|
|
await terminal.waitForTimeout(2000);
|
|
|
|
// Ensure that we can type in it
|
|
await terminal.keyboard.type("echo he${justabreak}llo123456");
|
|
await terminal.keyboard.press("Enter");
|
|
|
|
// Check if "echo" command was executed
|
|
// try-catch is used temporarily to find the root cause: https://github.com/coder/coder/actions/runs/6176958762/job/16767089943
|
|
try {
|
|
await terminal.waitForSelector(
|
|
'div.xterm-rows div:text-matches("hello123456")',
|
|
{
|
|
state: "visible",
|
|
timeout: 10 * 1000,
|
|
},
|
|
);
|
|
} catch (error) {
|
|
const pageContent = await terminal.content();
|
|
// eslint-disable-next-line no-console -- Let's see what is inside of xterm-rows
|
|
console.log("Unable to find echoed text:", pageContent);
|
|
throw error;
|
|
}
|
|
|
|
await stopAgent(agent);
|
|
});
|