Files
diff-viewer-extension/tests/fixtures.ts

67 lines
2.3 KiB
TypeScript
Raw Normal View History

// From https://playwright.dev/docs/chrome-extensions#testing
import {
test as base,
chromium,
Worker,
type BrowserContext,
} from '@playwright/test'
import path, { dirname } from 'path'
import { fileURLToPath } from 'url';
import * as dotenv from 'dotenv'
dotenv.config()
export const test = base.extend<{
context: BrowserContext
extensionId: string
background: Worker
authorizedBackground: Worker
}>({
context: async ({}, use) => {
// Due to change to type: module, https://stackoverflow.com/a/50052194
const __dirname = dirname(fileURLToPath(import.meta.url));
const pathToExtension = path.join(__dirname, '..', 'build')
const context = await chromium.launchPersistentContext('', {
headless: false,
args: [
`--headless=new`, // headless mode that allows for extensions
`--disable-extensions-except=${pathToExtension}`,
`--load-extension=${pathToExtension}`,
],
})
await use(context)
await context.close()
},
background: async ({ context }, use) => {
let [background] = context.serviceWorkers()
if (!background)
background = await context.waitForEvent('serviceworker')
// Wait for the chrome object to be available
await new Promise(resolve => setTimeout(resolve, 100))
await use(background)
},
authorizedBackground: async ({ background }, use) => {
// Load the env tokens in storage for auth
const githubToken = process.env.GITHUB_TOKEN
const kittycadToken = process.env.KITTYCAD_TOKEN
await background.evaluate(
async ([githubToken, kittycadToken]) => {
await chrome.storage.local.set({
ktk: kittycadToken, // from src/chrome/storage.ts
gtk: githubToken, // from src/chrome/storage.ts
})
},
[githubToken, kittycadToken]
)
// Wait for background auth
await new Promise(resolve => setTimeout(resolve, 2000))
await use(background)
},
extensionId: async ({ background }, use) => {
const extensionId = background.url().split('/')[2]
await use(extensionId)
},
})
export const expect = test.expect