refactor: add login to config.js for e2e tests

This commit is contained in:
Joe Previte 2021-04-13 17:15:07 -07:00
parent 52586706c4
commit 7ea6d22b3e
No known key found for this signature in database
GPG Key ID: 2C91590C6B742C24
2 changed files with 67 additions and 8 deletions

View File

@ -1,10 +1,64 @@
import { ChromiumEnv, FirefoxEnv, WebKitEnv, test, setConfig, PlaywrightOptions } from "@playwright/test" import {
ChromiumEnv,
FirefoxEnv,
WebKitEnv,
test,
setConfig,
PlaywrightOptions,
Config,
globalSetup,
} from "@playwright/test"
import * as crypto from "crypto"
import path from "path"
import { PASSWORD } from "./utils/constants"
import * as wtfnode from "./utils/wtfnode"
setConfig({ // Playwright doesn't like that ../src/node/util has an enum in it
testDir: "e2e", // Search for tests in this directory. // so I had to copy hash in separately
timeout: 30000, // Each test is given 30 seconds. const hash = (str: string): string => {
return crypto.createHash("sha256").update(str).digest("hex")
}
const cookieToStore = {
sameSite: "Lax" as const,
name: "key",
value: hash(PASSWORD),
domain: "localhost",
path: "/",
expires: -1,
httpOnly: false,
secure: false,
}
globalSetup(async () => {
console.log("\n🚨 Running Global Setup for Jest End-to-End Tests")
console.log("👋 Please hang tight...")
if (process.env.WTF_NODE) {
wtfnode.setup()
}
const storage = {
cookies: [cookieToStore],
}
// Save storage state and store as an env variable
// More info: https://playwright.dev/docs/auth?_highlight=authe#reuse-authentication-state
process.env.STORAGE = JSON.stringify(storage)
console.log("✅ Global Setup for Jest End-to-End Tests is now complete.")
}) })
const config: Config = {
testDir: path.join(__dirname, "e2e"), // Search for tests in this directory.
timeout: 30000, // Each test is given 30 seconds.
}
if (process.env.CI) {
config.retries = 2 // Retry failing tests 2 times
}
setConfig(config)
const options: PlaywrightOptions = { const options: PlaywrightOptions = {
headless: true, // Run tests in headless browsers. headless: true, // Run tests in headless browsers.
video: "retain-on-failure", video: "retain-on-failure",

View File

@ -6,11 +6,16 @@ import { CODE_SERVER_ADDRESS, STORAGE } from "../utils/constants"
test.describe("globalSetup", () => { test.describe("globalSetup", () => {
// Create a new context with the saved storage state // Create a new context with the saved storage state
// so we don't have to logged in // so we don't have to logged in
const options: any = {}
// TODO@jsjoeio
// Fix this once https://github.com/microsoft/playwright-test/issues/240
// is fixed
if (STORAGE) {
const storageState = JSON.parse(STORAGE) || {} const storageState = JSON.parse(STORAGE) || {}
const options = { options.contextOptions = {
contextOptions: {
storageState, storageState,
}, }
} }
test("should keep us logged in using the storageState", options, async ({ page }) => { test("should keep us logged in using the storageState", options, async ({ page }) => {
await page.goto(CODE_SERVER_ADDRESS, { waitUntil: "networkidle" }) await page.goto(CODE_SERVER_ADDRESS, { waitUntil: "networkidle" })