|
| 1 | +import { promises as fs } from "fs" |
| 2 | +import * as path from "path" |
1 | 3 | import { Page } from "playwright"
|
2 |
| -import { CODE_SERVER_ADDRESS } from "../../utils/constants" |
| 4 | +import { CODE_SERVER_ADDRESS, workspaceDir } from "../../utils/constants" |
| 5 | +import { tmpdir } from "../../utils/helpers" |
| 6 | + |
3 | 7 | // This is a Page Object Model
|
4 | 8 | // We use these to simplify e2e test authoring
|
5 | 9 | // See Playwright docs: https://playwright.dev/docs/pom/
|
6 | 10 | export class CodeServer {
|
7 |
| - page: Page |
8 |
| - editorSelector = "div.monaco-workbench" |
| 11 | + private readonly editorSelector = "div.monaco-workbench" |
9 | 12 |
|
10 |
| - constructor(page: Page) { |
11 |
| - this.page = page |
12 |
| - } |
| 13 | + constructor(public readonly page: Page) {} |
13 | 14 |
|
14 | 15 | /**
|
15 |
| - * Navigates to CODE_SERVER_ADDRESS |
| 16 | + * Navigates to CODE_SERVER_ADDRESS. It will open a newly created random |
| 17 | + * directory. |
16 | 18 | */
|
17 | 19 | async navigate() {
|
18 |
| - await this.page.goto(CODE_SERVER_ADDRESS, { waitUntil: "networkidle" }) |
| 20 | + const dir = await this.createWorkspace() |
| 21 | + await this.page.goto(`${CODE_SERVER_ADDRESS}?folder=${dir}`, { waitUntil: "networkidle" }) |
19 | 22 | }
|
20 | 23 |
|
21 | 24 | /**
|
@@ -113,4 +116,20 @@ export class CodeServer {
|
113 | 116 | await this.navigate()
|
114 | 117 | await this.reloadUntilEditorIsReady()
|
115 | 118 | }
|
| 119 | + |
| 120 | + /** |
| 121 | + * Create a random workspace and seed it with settings. |
| 122 | + */ |
| 123 | + private async createWorkspace(): Promise<string> { |
| 124 | + const dir = await tmpdir(workspaceDir) |
| 125 | + await fs.mkdir(path.join(dir, ".vscode")) |
| 126 | + await fs.writeFile( |
| 127 | + path.join(dir, ".vscode/settings.json"), |
| 128 | + JSON.stringify({ |
| 129 | + "workbench.startupEditor": "none", |
| 130 | + }), |
| 131 | + "utf8", |
| 132 | + ) |
| 133 | + return dir |
| 134 | + } |
116 | 135 | }
|
0 commit comments