1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-26 12:29:06 +01:00
metamask-extension/test/helper.js
Mark Stacey a6f2156386
Update account options menu design (#8654)
The `AccountDetailsDropdown` component has been rewritten to use the
new `Menu` component, and to follow the latest designs.

This should be functionally equivalent. A couple of the icons have
changed, but that's about it.

Support for a subtitle was added to `MenuItem` to support the `origin`
subtitle used for the explorer link for custom RPC endpoints.

A few adjustments were required to `test/helper.js` to accommodate
the use of `Menu` from a JSDOM context (this is the first time it's
been used in a unit test). A `popover-content` element was added to the
fake DOM, and another global was added that `react-popper` used
internally.

An additional driver method (`clickPoint`) was added to the e2e driver
to allow clicking the background behind the menu to dismiss it. This
wasn't possible using the `clickElement` method, because that method
would refuse to click an obscured element. The only non-obscured
element to click was the menu backdrop, and that didn't work either
because the center was obscured by the menu (Selenium clicks the center
of whichever element is targeted).
2020-05-27 12:31:53 -03:00

92 lines
2.4 KiB
JavaScript

import Ganache from 'ganache-core'
import nock from 'nock'
import Enzyme from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'
import log from 'loglevel'
nock.disableNetConnect()
nock.enableNetConnect('localhost')
// catch rejections that are still unhandled when tests exit
const unhandledRejections = new Map()
process.on('unhandledRejection', (reason, promise) => {
console.log('Unhandled rejection:', reason)
unhandledRejections.set(promise, reason)
})
process.on('rejectionHandled', (promise) => {
console.log(`handled: ${unhandledRejections.get(promise)}`)
unhandledRejections.delete(promise)
})
process.on('exit', () => {
if (unhandledRejections.size > 0) {
console.error(`Found ${unhandledRejections.size} unhandled rejections:`)
for (const reason of unhandledRejections.values()) {
console.error('Unhandled rejection: ', reason)
}
process.exit(1)
}
})
Enzyme.configure({ adapter: new Adapter() })
// ganache server
const server = Ganache.server()
server.listen(8545)
server.on('error', console.error)
server.on('clientError', console.error)
log.setDefaultLevel(5)
global.log = log
//
// polyfills
//
// dom
const { JSDOM } = require('jsdom')
const jsdom = new JSDOM()
global.window = jsdom.window
// required by `trezor-connect/node_modules/whatwg-fetch`
global.self = window
// required by `dom-helpers` and various other libraries
global.document = window.document
// required by `react-tippy`
global.navigator = window.navigator
global.Element = window.Element
// required by `react-popper`
global.HTMLElement = window.HTMLElement
// required by any components anchored on `popover-content`
const popoverContent = window.document.createElement('div')
popoverContent.setAttribute('id', 'popover-content')
window.document.body.appendChild(popoverContent)
// delete AbortController added by jsdom so it can be polyfilled correctly below
delete window.AbortController
// fetch
const fetch = require('node-fetch')
const { Headers, Request, Response } = fetch
Object.assign(window, { fetch, Headers, Request, Response })
require('abortcontroller-polyfill/dist/polyfill-patch-fetch')
// localStorage
window.localStorage = {}
// override metamask-logo
window.requestAnimationFrame = () => {}
// crypto.getRandomValues
if (!window.crypto) {
window.crypto = {}
}
if (!window.crypto.getRandomValues) {
window.crypto.getRandomValues = require('polyfill-crypto.getrandomvalues')
}