mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
a6f2156386
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).
92 lines
2.4 KiB
JavaScript
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')
|
|
}
|