Skip to content

Commit 262cccd

Browse files
committed
feat: add test to visit go home in app menu
1 parent fb7b96d commit 262cccd

File tree

4 files changed

+30
-23
lines changed

4 files changed

+30
-23
lines changed

.github/workflows/ci.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ jobs:
2424
test:
2525
needs: linux-amd64
2626
runs-on: ubuntu-latest
27+
env:
28+
PASSWORD: e45432jklfdsab
29+
CODE_SERVER_ADDRESS: http://localhost:8080
2730
steps:
2831
- uses: actions/checkout@v1
2932
- name: Download release packages
@@ -37,7 +40,7 @@ jobs:
3740
- uses: microsoft/playwright-github-action@v1
3841
- name: Install dependencies and run tests
3942
run: |
40-
node ./release-packages/code-server*-linux-amd64 &
43+
node ./release-packages/code-server*-linux-amd64 --home CODE_SERVER_ADDRESS/test-home &
4144
yarn --frozen-lockfile
4245
yarn test
4346
pkill node

ci/dev/test.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ main() {
99
# information. We must also run it from the root otherwise coverage will not
1010
# include our source files.
1111
cd "$OLDPWD"
12-
./test/node_modules/.bin/jest "$@"
12+
# We use the same environment variables set in ci.yml in the test job
13+
PASSWORD=e45432jklfdsab CODE_SERVER_ADDRESS=http://localhost:8080 ./test/node_modules/.bin/jest "$@"
1314
}
1415

1516
main "$@"

test/goHome.test.ts

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
11
import { chromium, Page, Browser, BrowserContext } from "playwright"
22

3-
// NOTE: this is hard-coded and passed as an environment variable
4-
// See the test job in ci.yml
5-
const PASSWORD = "e45432jklfdsab"
6-
73
describe("login", () => {
84
let browser: Browser
95
let page: Page
106
let context: BrowserContext
117

128
beforeAll(async () => {
13-
browser = await chromium.launch({ headless: false })
9+
browser = await chromium.launch()
1410
context = await browser.newContext()
1511
})
1612

1713
afterAll(async () => {
1814
await browser.close()
15+
await context.close()
1916
})
2017

2118
beforeEach(async () => {
@@ -29,22 +26,32 @@ describe("login", () => {
2926
})
3027

3128
it("should see a 'Go Home' button in the Application Menu that goes to coder.com", async () => {
32-
await page.goto("http://localhost:8080")
29+
// waitUntil: "networkidle"
30+
// In case the page takes a long time to load
31+
await page.goto(process.env.CODE_SERVER_ADDRESS || "http://localhost:8080", { waitUntil: "networkidle" })
3332
// Type in password
34-
await page.fill(".password", PASSWORD)
33+
await page.fill(".password", process.env.PASSWORD || "password")
3534
// Click the submit button and login
3635
await page.click(".submit")
37-
// Click the Applicaiton menu
36+
// Click the Application menu
3837
await page.click(".menubar-menu-button[title='Application Menu']")
3938
// See the Go Home button
40-
const goHomeButton = ".home-bar[aria-label='Home'] li"
39+
const goHomeButton = "a.action-menu-item span[aria-label='Go Home']"
4140
expect(await page.isVisible(goHomeButton))
42-
// Hover over element without clicking
43-
await page.hover(goHomeButton)
44-
// Click the top left corner of the element
41+
// Click it and navigate to coder.com
4542
await page.click(goHomeButton)
46-
// Note: we have to click on <li> in the Go Home button for it to work
47-
// Land on coder.com
48-
// expect(await page.url()).toBe("https://coder.com/")
43+
44+
// If there are unsaved changes it will show a dialog
45+
// asking if you're sure you want to leave
46+
page.on("dialog", (dialog) => dialog.accept())
47+
48+
// We give it a second to load in case playwright moves too quickly
49+
// This resolves after 'networkidle'
50+
await page.waitForLoadState("networkidle")
51+
52+
// We do this rather than using something like http://coder.com or an outside url
53+
// so that it's guaranteed to pass everytime
54+
expect(await page.url()).toBe(`${process.env.CODE_SERVER_ADDRESS}/test-home`)
55+
expect(await page.title()).toBe(`404 - code-server`)
4956
})
5057
})

test/login.test.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import { chromium, Page, Browser, BrowserContext } from "playwright"
22

3-
// NOTE: this is hard-coded and passed as an environment variable
4-
// See the test job in ci.yml
5-
const PASSWORD = "e45432jklfdsab"
6-
73
describe("login", () => {
84
let browser: Browser
95
let page: Page
@@ -29,9 +25,9 @@ describe("login", () => {
2925
})
3026

3127
it("should be able to login with the password from config.yml", async () => {
32-
await page.goto("http://localhost:8080")
28+
await page.goto(process.env.CODE_SERVER_ADDRESS || "http://localhost:8080")
3329
// Type in password
34-
await page.fill(".password", PASSWORD)
30+
await page.fill(".password", process.env.PASSWORD || "password")
3531
// Click the submit button and login
3632
await page.click(".submit")
3733
// See the editor

0 commit comments

Comments
 (0)