mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-10-22 19:26:13 +02:00
cc1161a52a
An e2e test has been added that uses the new mock Segment server to verify that the three initial page metric events are sent correctly. Using the mock Segment server requires a special build with this mock Segment server hostname embedded, so a distinct job for building and running this test was required. As such, it was left out of the `run-all.sh` script.
120 lines
2.9 KiB
JavaScript
120 lines
2.9 KiB
JavaScript
const path = require('path')
|
|
const sinon = require('sinon')
|
|
const createStaticServer = require('../../development/create-static-server')
|
|
const {
|
|
createSegmentServer,
|
|
} = require('../../development/lib/create-segment-server')
|
|
const Ganache = require('./ganache')
|
|
const FixtureServer = require('./fixture-server')
|
|
const { buildWebDriver } = require('./webdriver')
|
|
|
|
const tinyDelayMs = 200
|
|
const regularDelayMs = tinyDelayMs * 2
|
|
const largeDelayMs = regularDelayMs * 2
|
|
|
|
const dappPort = 8080
|
|
|
|
async function withFixtures(options, testSuite) {
|
|
const {
|
|
dapp,
|
|
fixtures,
|
|
ganacheOptions,
|
|
driverOptions,
|
|
mockSegment,
|
|
title,
|
|
} = options
|
|
const fixtureServer = new FixtureServer()
|
|
const ganacheServer = new Ganache()
|
|
let dappServer
|
|
let segmentServer
|
|
let segmentSpy
|
|
|
|
let webDriver
|
|
try {
|
|
await ganacheServer.start(ganacheOptions)
|
|
await fixtureServer.start()
|
|
await fixtureServer.loadState(path.join(__dirname, 'fixtures', fixtures))
|
|
if (dapp) {
|
|
const dappDirectory = path.resolve(
|
|
__dirname,
|
|
'..',
|
|
'..',
|
|
'node_modules',
|
|
'@metamask',
|
|
'test-dapp',
|
|
'dist',
|
|
)
|
|
dappServer = createStaticServer(dappDirectory)
|
|
dappServer.listen(dappPort)
|
|
await new Promise((resolve, reject) => {
|
|
dappServer.on('listening', resolve)
|
|
dappServer.on('error', reject)
|
|
})
|
|
}
|
|
if (mockSegment) {
|
|
segmentSpy = sinon.spy()
|
|
segmentServer = createSegmentServer((_request, response, events) => {
|
|
for (const event of events) {
|
|
segmentSpy(event)
|
|
}
|
|
response.statusCode = 200
|
|
response.end()
|
|
})
|
|
await segmentServer.start(9090)
|
|
}
|
|
const { driver } = await buildWebDriver(driverOptions)
|
|
webDriver = driver
|
|
|
|
await testSuite({
|
|
driver,
|
|
segmentSpy,
|
|
})
|
|
|
|
if (process.env.SELENIUM_BROWSER === 'chrome') {
|
|
const errors = await driver.checkBrowserForConsoleErrors(driver)
|
|
if (errors.length) {
|
|
const errorReports = errors.map((err) => err.message)
|
|
const errorMessage = `Errors found in browser console:\n${errorReports.join(
|
|
'\n',
|
|
)}`
|
|
throw new Error(errorMessage)
|
|
}
|
|
}
|
|
} catch (error) {
|
|
if (webDriver) {
|
|
try {
|
|
await webDriver.verboseReportOnFailure(title)
|
|
} catch (verboseReportError) {
|
|
console.error(verboseReportError)
|
|
}
|
|
}
|
|
throw error
|
|
} finally {
|
|
await fixtureServer.stop()
|
|
await ganacheServer.quit()
|
|
if (webDriver) {
|
|
await webDriver.quit()
|
|
}
|
|
if (dappServer) {
|
|
await new Promise((resolve, reject) => {
|
|
dappServer.close((error) => {
|
|
if (error) {
|
|
return reject(error)
|
|
}
|
|
return resolve()
|
|
})
|
|
})
|
|
}
|
|
if (segmentServer) {
|
|
await segmentServer.stop()
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
tinyDelayMs,
|
|
regularDelayMs,
|
|
largeDelayMs,
|
|
withFixtures,
|
|
}
|