-
Notifications
You must be signed in to change notification settings - Fork 6k
refactor: move vscode tests to e2e #5911
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
fb2533c
wip: migrate vscode tests to e2e
jsjoeio 6c8db6c
feat: add codeWorkspace to global setup
jsjoeio c7199fd
refactor: only use dir in spawn when we should
jsjoeio 42b873f
wip: migrate more tests
jsjoeio 033728a
refactor: move all vscode tests to e2e
jsjoeio 99b6e05
refactor(ci): move unit to own job
jsjoeio 466a04a
fixup: add codecov to unit test step
jsjoeio c32e427
Update test/e2e/models/CodeServer.ts
jsjoeio f3bc47b
Update test/e2e/models/CodeServer.ts
jsjoeio 6f7fefe
docs: add note about intercept requests
jsjoeio 116ae64
refactor: rm unused clean() calls
jsjoeio 5295c27
refactor: delete duplicate test
jsjoeio f5f89c5
refactor: update 'should not redirect' test
jsjoeio File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -139,6 +139,55 @@ jobs: | |
if: steps.changed-files.outputs.any_changed == 'true' | ||
run: yarn lint:ts | ||
|
||
test-unit: | ||
name: Run unit tests | ||
runs-on: ubuntu-20.04 | ||
timeout-minutes: 5 | ||
steps: | ||
- name: Checkout repo | ||
uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 2 | ||
|
||
- name: Get changed files | ||
id: changed-files | ||
uses: tj-actions/[email protected] | ||
with: | ||
files: | | ||
**/*.ts | ||
files_ignore: | | ||
lib/vscode/** | ||
|
||
- name: Install Node.js v16 | ||
if: steps.changed-files.outputs.any_changed == 'true' | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: "16" | ||
|
||
- name: Fetch dependencies from cache | ||
if: steps.changed-files.outputs.any_changed == 'true' | ||
id: cache-node-modules | ||
uses: actions/cache@v3 | ||
with: | ||
path: "**/node_modules" | ||
key: yarn-build-${{ hashFiles('**/yarn.lock') }} | ||
restore-keys: | | ||
yarn-build- | ||
|
||
- name: Install dependencies | ||
if: steps.changed-files.outputs.any_changed == 'true' && steps.cache-node-modules.outputs.cache-hit != 'true' | ||
run: SKIP_SUBMODULE_DEPS=1 yarn --frozen-lockfile | ||
|
||
- name: Run unit tests | ||
if: steps.changed-files.outputs.any_changed == 'true' | ||
run: yarn test:unit | ||
|
||
- name: Upload coverage report to Codecov | ||
uses: codecov/codecov-action@v3 | ||
with: | ||
token: ${{ secrets.CODECOV_TOKEN }} | ||
if: success() | ||
|
||
build: | ||
name: Build code-server | ||
runs-on: ubuntu-20.04 | ||
|
@@ -206,19 +255,6 @@ jobs: | |
if: steps.cache-vscode.outputs.cache-hit != 'true' | ||
run: yarn build:vscode | ||
|
||
# Our code imports code from VS Code's `out` directory meaning VS Code | ||
# must be built before running these tests. | ||
# TODO: Move to its own step? | ||
- name: Run code-server unit tests | ||
run: yarn test:unit | ||
if: success() | ||
|
||
- name: Upload coverage report to Codecov | ||
uses: codecov/codecov-action@v3 | ||
with: | ||
token: ${{ secrets.CODECOV_TOKEN }} | ||
if: success() | ||
|
||
# The release package does not contain any native modules | ||
# and is neutral to architecture/os/libc version. | ||
- name: Create release package | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
import { describe, test, expect } from "./baseFixture" | ||
import { clean, tmpdir } from "../utils/helpers" | ||
import * as path from "path" | ||
import { promises as fs } from "fs" | ||
|
||
const routes = ["/", "/vscode", "/vscode/"] | ||
|
||
describe("VS Code Routes", ["--disable-workspace-trust"], {}, async () => { | ||
const testName = "vscode-routes-default" | ||
test.beforeAll(async () => { | ||
await clean(testName) | ||
}) | ||
|
||
test("should load all route variations", async ({ codeServerPage }) => { | ||
for (const route of routes) { | ||
await codeServerPage.navigate(route) | ||
|
||
// Check there were no redirections | ||
const url = new URL(codeServerPage.page.url()) | ||
expect(url.pathname).toBe(route) | ||
|
||
// TODO@jsjoeio | ||
// now that we are in a proper browser instead of scraping the HTML we | ||
// could possibly intercept requests to make sure assets are loading from | ||
// the right spot. | ||
// | ||
// Check that page loaded from correct route | ||
const html = await codeServerPage.page.innerHTML("html") | ||
switch (route) { | ||
case "/": | ||
case "/vscode/": | ||
expect(html).toMatch(/src="\.\/[a-z]+-[0-9a-z]+\/static\//) | ||
break | ||
case "/vscode": | ||
expect(html).toMatch(/src="\.\/vscode\/[a-z]+-[0-9a-z]+\/static\//) | ||
break | ||
} | ||
jsjoeio marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
}) | ||
}) | ||
|
||
const CODE_WORKSPACE_DIR = process.env.CODE_WORKSPACE_DIR || "" | ||
describe("VS Code Routes with code-workspace", ["--disable-workspace-trust", CODE_WORKSPACE_DIR], {}, async () => { | ||
test("should redirect to the passed in workspace using human-readable query", async ({ codeServerPage }) => { | ||
const url = new URL(codeServerPage.page.url()) | ||
expect(url.pathname).toBe("/") | ||
expect(url.search).toBe(`?workspace=${CODE_WORKSPACE_DIR}`) | ||
}) | ||
}) | ||
|
||
const CODE_FOLDER_DIR = process.env.CODE_FOLDER_DIR || "" | ||
describe("VS Code Routes with code-workspace", ["--disable-workspace-trust", CODE_FOLDER_DIR], {}, async () => { | ||
test("should redirect to the passed in folder using human-readable query", async ({ codeServerPage }) => { | ||
const url = new URL(codeServerPage.page.url()) | ||
expect(url.pathname).toBe("/") | ||
expect(url.search).toBe(`?folder=${CODE_FOLDER_DIR}`) | ||
}) | ||
}) | ||
|
||
describe( | ||
jsjoeio marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"VS Code Routes with ignore-last-opened", | ||
["--disable-workspace-trust", "--ignore-last-opened"], | ||
{}, | ||
async () => { | ||
test("should not redirect", async ({ codeServerPage }) => { | ||
const folder = process.env.CODE_FOLDER_DIR | ||
|
||
await codeServerPage.navigate(`/`) | ||
await codeServerPage.navigate(`/?folder=${folder}`) | ||
await codeServerPage.navigate(`/`) | ||
|
||
const url = new URL(codeServerPage.page.url()) | ||
expect(url.pathname).toBe("/") | ||
expect(url.search).toBe("") | ||
}) | ||
}, | ||
) | ||
|
||
describe( | ||
"VS Code Routes with no workspace or folder", | ||
["--disable-workspace-trust"], | ||
{}, | ||
async () => { | ||
test("should redirect to last query folder/workspace", async ({ codeServerPage }) => { | ||
const folder = process.env.CODE_FOLDER_DIR | ||
const workspace = process.env.CODE_WORKSPACE_DIR | ||
await codeServerPage.navigate(`/?folder=${folder}&workspace=${workspace}`) | ||
|
||
// If you visit again without query parameters it will re-attach them by | ||
// redirecting. It should always redirect to the same route. | ||
for (const route of routes) { | ||
await codeServerPage.navigate(route) | ||
const url = new URL(codeServerPage.page.url()) | ||
expect(url.pathname).toBe(route) | ||
expect(url.search).toBe(`?folder=${folder}&workspace=${workspace}`) | ||
} | ||
}) | ||
}, | ||
) | ||
|
||
describe( | ||
"VS Code Routes with no workspace or folder", | ||
["--disable-workspace-trust"], | ||
{}, | ||
async () => { | ||
test("should not redirect if ew passed in", async ({ codeServerPage }) => { | ||
const folder = process.env.CODE_FOLDER_DIR | ||
const workspace = process.env.CODE_WORKSPACE_DIR | ||
await codeServerPage.navigate(`/?folder=${folder}&workspace=${workspace}`) | ||
|
||
// Closing the folder should stop the redirecting. | ||
await codeServerPage.navigate("/?ew=true") | ||
let url = new URL(codeServerPage.page.url()) | ||
expect(url.pathname).toBe("/") | ||
expect(url.search).toBe("?ew=true") | ||
}) | ||
}, | ||
) |
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.