Yet another refacto. I improved many many mechanisms on this one including dnd. It is now end 2 end tested 🎉
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { chromium, FullConfig, Page } from '@playwright/test'
|
|
import { existsSync } from 'fs'
|
|
import {
|
|
getSignedInUser,
|
|
setupDatabase,
|
|
teardownDatabase,
|
|
} from './services/database'
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
require('dotenv').config({ path: '.env' })
|
|
|
|
async function globalSetup(config: FullConfig) {
|
|
const { baseURL } = config.projects[0].use
|
|
if (!baseURL) throw new Error('baseURL is missing')
|
|
if (!process.env.GITHUB_EMAIL || !process.env.GITHUB_PASSWORD)
|
|
throw new Error(
|
|
'GITHUB_EMAIL or GITHUB_PASSWORD are missing in the environment. They are required to log in.'
|
|
)
|
|
|
|
await teardownDatabase()
|
|
|
|
const signedInUser = await getSignedInUser(process.env.GITHUB_EMAIL as string)
|
|
if (!signedInUser || !existsSync('./playwright/authenticatedState.json')) {
|
|
const browser = await chromium.launch()
|
|
const page = await browser.newPage()
|
|
await signIn(page)
|
|
await page.context().storageState({
|
|
path: './playwright/authenticatedState.json',
|
|
})
|
|
}
|
|
|
|
await setupDatabase(process.env.GITHUB_EMAIL as string)
|
|
}
|
|
|
|
const signIn = async (page: Page) => {
|
|
await page.goto(`${process.env.PLAYWRIGHT_BUILDER_TEST_BASE_URL}/signin`)
|
|
await page.click('text=Continue with GitHub')
|
|
await page.fill('input[name="login"]', process.env.GITHUB_EMAIL as string)
|
|
await page.fill(
|
|
'input[name="password"]',
|
|
process.env.GITHUB_PASSWORD as string
|
|
)
|
|
await page.press('input[name="password"]', 'Enter')
|
|
try {
|
|
await page.locator('text=Authorize baptisteArno').click({ timeout: 3000 })
|
|
} catch {
|
|
return
|
|
}
|
|
await page.waitForNavigation({
|
|
url: `${process.env.PLAYWRIGHT_BUILDER_TEST_BASE_URL}/typebots`,
|
|
})
|
|
}
|
|
|
|
export default globalSetup
|