cycles-quartz/apps/transfers/frontend/tests/e2e/fixtures.ts
2024-08-28 10:07:41 +02:00

90 lines
2.9 KiB
TypeScript

import {
test as baseTest,
chromium,
expect,
BrowserContext,
} from '@playwright/test'
import path from 'path'
// Tests fixtures
const test = baseTest.extend<{}, { _globalContext: BrowserContext }>({
// Shared context for tests so Keplr initialization runs only once for all tests
_globalContext: [
async ({}, use) => {
const mnemonicWords = process.env.TEST_KEPLR_MNEMONIC!.split(' ')
const pathToExtension = path.join(
__dirname,
'extensions',
`keplr-extension-manifest-v3-v${process.env.TEST_KEPLR_EXTENSION_VERSION}`,
)
// We launch browser with the extension
const context = await chromium.launchPersistentContext('', {
headless: false,
args: [
`--disable-extensions-except=${pathToExtension}`,
`--load-extension=${pathToExtension}`,
],
})
const page = await context.waitForEvent('page')
const extensionId = /\/\/(.*?)\//.exec(page.url())![1]
// Keplr import wallet flow
await page.waitForURL(new RegExp(`${extensionId}/register.html`))
await expect(page.getByText('Import an existing wallet')).toBeVisible()
await page
.getByRole('button', { name: 'Import an existing wallet' })
.click()
await expect(
page.getByText('Use recovery phrase or private key'),
).toBeVisible()
await page
.getByRole('button', { name: 'Use recovery phrase or private key' })
.click()
await page.getByText('24 Words').click()
const seedInputs = await page.locator('input')
for (let i = 0; i < mnemonicWords.length; i++) {
await seedInputs.nth(i).fill(mnemonicWords[i])
}
await page.getByRole('button', { name: 'Import', exact: true }).click()
await page
.getByPlaceholder('e.g. Trading, NFT Vault, Investment')
.fill('Playwright Wallet')
const inputs = await page.getByPlaceholder(
'At least 8 characters in length',
)
for (let i = 0; i < (await inputs.count()); i++) {
await inputs.nth(i).fill(process.env.TEST_KEPLR_PASSWORD!)
}
await page.getByRole('button', { name: 'Next' }).click()
await expect(page.getByText('Select Chains')).toBeVisible()
await page.getByRole('button', { name: 'Save' }).click()
// Accept app suggested testnet info
await page.goto('/')
const addChainPage = await context.waitForEvent('page')
await addChainPage.getByRole('button', { name: 'Approve' }).click()
// Wait for App to load
await test.expect(page.getByText('Balance:')).toBeVisible()
await use(context)
await context.close()
},
{ scope: 'worker' },
],
context: async ({ _globalContext }, use) => {
await use(_globalContext)
},
page: async ({ context }, use) => {
const page = await context.newPage()
await use(page)
await page.close()
},
})
export default test