mirror of https://github.com/coder/code-server.git
Merge pull request #3271 from cdr/jsjoeio/check-connection-e2e
feat(testing): add isConnected check
This commit is contained in:
commit
f5a30330b7
|
@ -38,6 +38,10 @@ test.describe("CodeServer", () => {
|
||||||
expect(await codeServer.isEditorVisible()).toBe(true)
|
expect(await codeServer.isEditorVisible()).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test("should always have a connection", options, async ({ page }) => {
|
||||||
|
expect(await codeServer.isConnected()).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
test("should show the Integrated Terminal", options, async ({ page }) => {
|
test("should show the Integrated Terminal", options, async ({ page }) => {
|
||||||
await codeServer.focusTerminal()
|
await codeServer.focusTerminal()
|
||||||
expect(await page.isVisible("#terminal")).toBe(true)
|
expect(await page.isVisible("#terminal")).toBe(true)
|
||||||
|
|
|
@ -30,7 +30,7 @@ test.describe("login", () => {
|
||||||
await page.waitForLoadState("networkidle")
|
await page.waitForLoadState("networkidle")
|
||||||
// We do this because occassionally code-server doesn't load on Firefox
|
// We do this because occassionally code-server doesn't load on Firefox
|
||||||
// but loads if you reload once or twice
|
// but loads if you reload once or twice
|
||||||
await codeServer.reloadUntilEditorIsVisible()
|
await codeServer.reloadUntilEditorIsReady()
|
||||||
// Make sure the editor actually loaded
|
// Make sure the editor actually loaded
|
||||||
expect(await codeServer.isEditorVisible()).toBe(true)
|
expect(await codeServer.isEditorVisible()).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
|
@ -25,7 +25,7 @@ test.describe("logout", () => {
|
||||||
await page.waitForLoadState("networkidle")
|
await page.waitForLoadState("networkidle")
|
||||||
// We do this because occassionally code-server doesn't load on Firefox
|
// We do this because occassionally code-server doesn't load on Firefox
|
||||||
// but loads if you reload once or twice
|
// but loads if you reload once or twice
|
||||||
await codeServer.reloadUntilEditorIsVisible()
|
await codeServer.reloadUntilEditorIsReady()
|
||||||
// Make sure the editor actually loaded
|
// Make sure the editor actually loaded
|
||||||
expect(await codeServer.isEditorVisible()).toBe(true)
|
expect(await codeServer.isEditorVisible()).toBe(true)
|
||||||
|
|
||||||
|
|
|
@ -20,17 +20,20 @@ export class CodeServer {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the editor is visible
|
* Checks if the editor is visible
|
||||||
* and reloads until it is
|
* and that we are connected to the host
|
||||||
|
*
|
||||||
|
* Reload until both checks pass
|
||||||
*/
|
*/
|
||||||
async reloadUntilEditorIsVisible() {
|
async reloadUntilEditorIsReady() {
|
||||||
const editorIsVisible = await this.isEditorVisible()
|
const editorIsVisible = await this.isEditorVisible()
|
||||||
|
const editorIsConnected = await this.isConnected()
|
||||||
let reloadCount = 0
|
let reloadCount = 0
|
||||||
|
|
||||||
// Occassionally code-server timeouts in Firefox
|
// Occassionally code-server timeouts in Firefox
|
||||||
// we're not sure why
|
// we're not sure why
|
||||||
// but usually a reload or two fixes it
|
// but usually a reload or two fixes it
|
||||||
// TODO@jsjoeio @oxy look into Firefox reconnection/timeout issues
|
// TODO@jsjoeio @oxy look into Firefox reconnection/timeout issues
|
||||||
while (!editorIsVisible) {
|
while (!editorIsVisible && !editorIsConnected) {
|
||||||
// When a reload happens, we want to wait for all resources to be
|
// When a reload happens, we want to wait for all resources to be
|
||||||
// loaded completely. Hence why we use that instead of DOMContentLoaded
|
// loaded completely. Hence why we use that instead of DOMContentLoaded
|
||||||
// Read more: https://thisthat.dev/dom-content-loaded-vs-load/
|
// Read more: https://thisthat.dev/dom-content-loaded-vs-load/
|
||||||
|
@ -38,8 +41,8 @@ export class CodeServer {
|
||||||
// Give it an extra second just in case it's feeling extra slow
|
// Give it an extra second just in case it's feeling extra slow
|
||||||
await this.page.waitForTimeout(1000)
|
await this.page.waitForTimeout(1000)
|
||||||
reloadCount += 1
|
reloadCount += 1
|
||||||
if (await this.isEditorVisible()) {
|
if ((await this.isEditorVisible()) && (await this.isConnected)) {
|
||||||
console.log(` Editor became visible after ${reloadCount} reloads`)
|
console.log(` Editor became ready after ${reloadCount} reloads`)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
await this.page.reload()
|
await this.page.reload()
|
||||||
|
@ -56,6 +59,19 @@ export class CodeServer {
|
||||||
return await this.page.isVisible(this.editorSelector)
|
return await this.page.isVisible(this.editorSelector)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the editor is visible
|
||||||
|
*/
|
||||||
|
async isConnected() {
|
||||||
|
await this.page.waitForLoadState("networkidle")
|
||||||
|
|
||||||
|
const host = new URL(CODE_SERVER_ADDRESS).host
|
||||||
|
const hostSelector = `[title="Editing on ${host}"]`
|
||||||
|
await this.page.waitForSelector(hostSelector)
|
||||||
|
|
||||||
|
return await this.page.isVisible(hostSelector)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Focuses Integrated Terminal
|
* Focuses Integrated Terminal
|
||||||
* by using "Terminal: Focus Terminal"
|
* by using "Terminal: Focus Terminal"
|
||||||
|
@ -90,12 +106,12 @@ export class CodeServer {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Navigates to CODE_SERVER_ADDRESS
|
* Navigates to CODE_SERVER_ADDRESS
|
||||||
* and reloads until the editor is visible
|
* and reloads until the editor is ready
|
||||||
*
|
*
|
||||||
* Helpful for running before tests
|
* Helpful for running before tests
|
||||||
*/
|
*/
|
||||||
async setup() {
|
async setup() {
|
||||||
await this.navigate()
|
await this.navigate()
|
||||||
await this.reloadUntilEditorIsVisible()
|
await this.reloadUntilEditorIsReady()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue