refactor: add login to config.js for e2e tests
This commit is contained in:
parent
52586706c4
commit
7ea6d22b3e
@ -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",
|
||||||
|
@ -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 storageState = JSON.parse(STORAGE) || {}
|
const options: any = {}
|
||||||
const options = {
|
|
||||||
contextOptions: {
|
// TODO@jsjoeio
|
||||||
|
// Fix this once https://github.com/microsoft/playwright-test/issues/240
|
||||||
|
// is fixed
|
||||||
|
if (STORAGE) {
|
||||||
|
const storageState = JSON.parse(STORAGE) || {}
|
||||||
|
options.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" })
|
||||||
|
Reference in New Issue
Block a user