mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
unit tests for watchAsset
This commit is contained in:
parent
3a3732eb24
commit
6ccf2811e7
@ -1,6 +1,7 @@
|
||||
const assert = require('assert')
|
||||
const ObservableStore = require('obs-store')
|
||||
const PreferencesController = require('../../../../app/scripts/controllers/preferences')
|
||||
const sinon = require('sinon')
|
||||
|
||||
describe('preferences controller', function () {
|
||||
let preferencesController
|
||||
@ -339,5 +340,114 @@ describe('preferences controller', function () {
|
||||
assert.deepEqual(tokensSecond, initialTokensSecond, 'tokens equal for same network')
|
||||
})
|
||||
})
|
||||
|
||||
describe('on watchAsset', function () {
|
||||
var stubNext, stubEnd, stubHandleWatchAssetERC20, asy, req, res
|
||||
const sandbox = sinon.createSandbox()
|
||||
|
||||
beforeEach(() => {
|
||||
req = {params: {}}
|
||||
res = {}
|
||||
asy = {next: () => {}, end: () => {}}
|
||||
stubNext = sandbox.stub(asy, 'next')
|
||||
stubEnd = sandbox.stub(asy, 'end').returns(0)
|
||||
stubHandleWatchAssetERC20 = sandbox.stub(preferencesController, '_handleWatchAssetERC20')
|
||||
})
|
||||
after(() => {
|
||||
sandbox.restore()
|
||||
})
|
||||
|
||||
it('should do anything if method not corresponds', async function () {
|
||||
const asy = {next: () => {}, end: () => {}}
|
||||
var stubNext = sandbox.stub(asy, 'next')
|
||||
var stubEnd = sandbox.stub(asy, 'end').returns(0)
|
||||
req.method = 'metamask'
|
||||
await preferencesController.requestWatchAsset(req, res, asy.next, asy.end)
|
||||
sandbox.assert.notCalled(stubEnd)
|
||||
sandbox.assert.called(stubNext)
|
||||
})
|
||||
it('should do something if method is supported', async function () {
|
||||
const asy = {next: () => {}, end: () => {}}
|
||||
var stubNext = sandbox.stub(asy, 'next')
|
||||
var stubEnd = sandbox.stub(asy, 'end').returns(0)
|
||||
req.method = 'metamask_watchAsset'
|
||||
req.params.type = 'someasset'
|
||||
await preferencesController.requestWatchAsset(req, res, asy.next, asy.end)
|
||||
sandbox.assert.called(stubEnd)
|
||||
sandbox.assert.notCalled(stubNext)
|
||||
})
|
||||
it('should through error if method is supported but asset type is not', async function () {
|
||||
req.method = 'metamask_watchAsset'
|
||||
req.params.type = 'someasset'
|
||||
await preferencesController.requestWatchAsset(req, res, asy.next, asy.end)
|
||||
sandbox.assert.called(stubEnd)
|
||||
sandbox.assert.notCalled(stubHandleWatchAssetERC20)
|
||||
sandbox.assert.notCalled(stubNext)
|
||||
assert.deepEqual(res, {})
|
||||
})
|
||||
it('should trigger handle add asset if type supported', async function () {
|
||||
const asy = {next: () => {}, end: () => {}}
|
||||
req.method = 'metamask_watchAsset'
|
||||
req.params.type = 'ERC20'
|
||||
await preferencesController.requestWatchAsset(req, res, asy.next, asy.end)
|
||||
sandbox.assert.called(stubHandleWatchAssetERC20)
|
||||
})
|
||||
})
|
||||
|
||||
describe('on watchAsset of type ERC20', function () {
|
||||
var req
|
||||
|
||||
const sandbox = sinon.createSandbox()
|
||||
beforeEach(() => {
|
||||
req = {params: {type: 'ERC20'}}
|
||||
})
|
||||
after(() => {
|
||||
sandbox.restore()
|
||||
})
|
||||
|
||||
it('should add suggested token', async function () {
|
||||
const address = '0xabcdef1234567'
|
||||
const symbol = 'ABBR'
|
||||
const decimals = 5
|
||||
const imageUrl = 'someimageurl'
|
||||
req.params.options = { address, symbol, decimals, imageUrl }
|
||||
|
||||
sandbox.stub(preferencesController, '_validateERC20AssetParams').returns(true)
|
||||
preferencesController.showWatchAssetUi = async () => {}
|
||||
|
||||
await preferencesController._handleWatchAssetERC20(req.params.options)
|
||||
const suggested = preferencesController.getSuggestedTokens()
|
||||
assert.equal(Object.keys(suggested).length, 1, `one token added ${Object.keys(suggested)}`)
|
||||
|
||||
assert.equal(suggested[address].address, address, 'set address correctly')
|
||||
assert.equal(suggested[address].symbol, symbol, 'set symbol correctly')
|
||||
assert.equal(suggested[address].decimals, decimals, 'set decimals correctly')
|
||||
assert.equal(suggested[address].imageUrl, imageUrl, 'set imageUrl correctly')
|
||||
})
|
||||
|
||||
it('should add token correctly if user confirms', async function () {
|
||||
const address = '0xabcdef1234567'
|
||||
const symbol = 'ABBR'
|
||||
const decimals = 5
|
||||
const imageUrl = 'someimageurl'
|
||||
req.params.options = { address, symbol, decimals, imageUrl }
|
||||
|
||||
sandbox.stub(preferencesController, '_validateERC20AssetParams').returns(true)
|
||||
preferencesController.showWatchAssetUi = async () => {
|
||||
await preferencesController.addToken(address, symbol, decimals, imageUrl)
|
||||
}
|
||||
|
||||
await preferencesController._handleWatchAssetERC20(req.params.options)
|
||||
const tokens = preferencesController.getTokens()
|
||||
assert.equal(tokens.length, 1, `one token added`)
|
||||
const added = tokens[0]
|
||||
assert.equal(added.address, address, 'set address correctly')
|
||||
assert.equal(added.symbol, symbol, 'set symbol correctly')
|
||||
assert.equal(added.decimals, decimals, 'set decimals correctly')
|
||||
|
||||
const assetImages = preferencesController.getAssetImages()
|
||||
assert.ok(assetImages[address], `set imageurl correctly`)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -9,8 +9,6 @@ const selectors = require('../selectors')
|
||||
const log = require('loglevel')
|
||||
|
||||
function mapStateToProps (state) {
|
||||
// In order to get `imageUrl` from token added with `eth_watchToken`
|
||||
// TODO do this with cache memory for browsers, add support for image object, var names
|
||||
return {
|
||||
network: state.metamask.network,
|
||||
tokens: state.metamask.tokens,
|
||||
|
Loading…
Reference in New Issue
Block a user