diff --git a/.gitignore b/.gitignore index e4538ec2..e49888f4 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ node-* .home coverage **/.DS_Store +test/videos +test/screenshots diff --git a/package.json b/package.json index c5f32a5f..1df87c1a 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,10 @@ "/lib/vscode", "/release-packages", "/release", - "/release-standalone" + "/release-standalone", + "/release-npm-package", + "/release-gcp", + "/release-images" ] } } diff --git a/test/goHome.test.ts b/test/goHome.test.ts index 3618254b..ea42dcbf 100644 --- a/test/goHome.test.ts +++ b/test/goHome.test.ts @@ -5,26 +5,29 @@ describe("login", () => { let page: Page let context: BrowserContext - beforeAll(async () => { + beforeAll(async (done) => { browser = await chromium.launch() // Create a new context with the saved storage state const storageState = JSON.parse(process.env.STORAGE || "") - context = await browser.newContext({ storageState }) + context = await browser.newContext({ storageState, recordVideo: { dir: "./test/videos/" } }) + done() }) - afterAll(async () => { + afterAll(async (done) => { // Remove password from local storage await context.clearCookies() await browser.close() await context.close() + done() }) - beforeEach(async () => { + beforeEach(async (done) => { page = await context.newPage() + done() }) - it("should see a 'Go Home' button in the Application Menu that goes to coder.com", async () => { + it("should see a 'Go Home' button in the Application Menu that goes to /healthz", async (done) => { const GO_HOME_URL = `${process.env.CODE_SERVER_ADDRESS}/healthz` let requestedGoHomeUrl = false page.on("request", (request) => { @@ -34,36 +37,43 @@ describe("login", () => { // only that it was made if (request.url() === GO_HOME_URL) { requestedGoHomeUrl = true - console.log("woooo =>>>", requestedGoHomeUrl) + expect(requestedGoHomeUrl).toBeTruthy() + + // This ensures Jest knows we're done here. + done() } }) + // Sometimes a dialog shows up when you navigate + // asking if you're sure you want to leave + // so we listen if it comes, we accept it + page.on("dialog", (dialog) => dialog.accept()) // waitUntil: "domcontentloaded" // In case the page takes a long time to load await page.goto(process.env.CODE_SERVER_ADDRESS || "http://localhost:8080", { waitUntil: "domcontentloaded" }) + + // For some odd reason, the login method used in globalSetup.ts + // I don't know if it's on playwright clearing our cookies by accident + // or if it's our cookies disappearing. + // This means we need an additional check to make sure we're logged in + // otherwise this test will hang and fail. + const currentPageURL = await page.url() + const isLoginPage = currentPageURL.includes("login") + if (isLoginPage) { + await page.fill(".password", process.env.PASSWORD || "password") + // Click the submit button and login + await page.click(".submit") + } + // Click the Application menu await page.click(".menubar-menu-button[title='Application Menu']") // See the Go Home button const goHomeButton = "a.action-menu-item span[aria-label='Go Home']" expect(await page.isVisible(goHomeButton)) - // Click it and navigate to coder.com + + // Click it and navigate to /healthz // NOTE: ran into issues of it failing intermittently // without having button: "middle" await page.click(goHomeButton, { button: "middle" }) - - // If there are unsaved changes it will show a dialog - // asking if you're sure you want to leave - await page.on("dialog", (dialog) => dialog.accept()) - - // If it takes longer than 3 seconds to navigate, something is wrong - await page.waitForRequest(GO_HOME_URL, { timeout: 10000 }) - expect(requestedGoHomeUrl).toBeTruthy() - - // // Make sure the response for GO_HOME_URL was successful - // const response = await page.waitForResponse( - // (response) => response.url() === GO_HOME_URL && response.status() === 200, - // ) - // We make sure a request was made to the GO_HOME_URL - // expect(response.ok()).toBeTruthy() }) }) diff --git a/test/login.test.ts b/test/login.test.ts index 460dbc30..5358adaa 100644 --- a/test/login.test.ts +++ b/test/login.test.ts @@ -24,7 +24,7 @@ describe("login", () => { await context.clearCookies() }) - it("should be able to login with the password from config.yml", async () => { + it("should be able to login", async () => { await page.goto(process.env.CODE_SERVER_ADDRESS || "http://localhost:8080") // Type in password await page.fill(".password", process.env.PASSWORD || "password")