diff --git a/package.json b/package.json index a758abb7c..b5d8b545f 100644 --- a/package.json +++ b/package.json @@ -186,7 +186,6 @@ "sw-controller": "^1.0.3", "sw-stream": "^2.0.2", "textarea-caret": "^3.0.1", - "through2": "^2.0.3", "valid-url": "^1.0.9", "vreme": "^3.0.2", "web3": "^0.20.1", @@ -292,6 +291,7 @@ "stylelint-config-standard": "^18.2.0", "tape": "^4.5.1", "testem": "^2.0.0", + "through2": "^2.0.3", "vinyl-buffer": "^1.0.1", "vinyl-source-stream": "^2.0.0", "watchify": "^3.9.0" diff --git a/test/stub/blacklist.json b/test/stub/blacklist.json deleted file mode 100644 index 6a3230b2f..000000000 --- a/test/stub/blacklist.json +++ /dev/null @@ -1,1374 +0,0 @@ -{ - "version": 2, - "tolerance": 2, - "fuzzylist": [ - "metamask.io", - "myetherwallet.com", - "cryptokitties.co", - "mycrypto.com" - ], - "whitelist": [ - "crypto.pro", - "ocrypto.org", - "wecrypto.net", - "iccrypto.io", - "crypto.kred", - "ohmycrypto.io", - "spcrypto.net", - "melcrypto.com", - "zzcrypto.org", - "zzcrypto.net", - "crypto.bg", - "mycrypto24.online", - "acrypto.io", - "mycrypto.ca", - "scrypto.io", - "mycrypto.dk", - "mvzcrypto.com", - "ambcrypto.com", - "crypto.bi", - "crypto.jobs", - "crypto.help", - "my.crypt.observer", - "crypt.observer", - "ucrypto.com", - "cryptojobslist.com", - "crypto.review", - "crypto.me", - "b3crypto.com", - "mycrypto.ninja", - "jkcrypto.com", - "crypto.cr", - "mycrypto.live", - "yocrypto.io", - "crypto.ba", - "zacrypto.info", - "mycrypto.com", - "remix.ethereum.org", - "metahash.io", - "metahash.net", - "metahash.org", - "cryptotitties.com", - "cryptocities.net", - "cryptoshitties.co", - "cryptotitties.fun", - "cryptokitties.forsale", - "cryptokitties.care", - "metamate.cc", - "metamesh.tech", - "ico.nexus.social", - "metamesh.org", - "metatask.io", - "metmask.com", - "metarasa.com", - "metapack.com", - "metacase.com", - "metafas.nl", - "metamako.com", - "metamast.com", - "metamax.ru", - "metadesk.io", - "metadisk.com", - "metallsk.ru", - "metamag.fr", - "metamaks.ru", - "metamap.ru", - "metamaps.cc", - "metamats.com", - "metamax.by", - "metamax.com", - "metamax.io", - "metamuse.net", - "metarank.com", - "metaxas.com", - "megamas2.ru", - "metamask.io", - "myetherwallet.com", - "myethlerwallet.com", - "ethereum.org", - "myetheroll.com", - "myetherapi.com", - "ledgerwallet.com", - "databrokerdao.com", - "etherscan.io", - "etherid.org", - "ether.cards", - "etheroll.com", - "ethnews.com", - "ethex.market", - "ethereumdev.io", - "ethereumdev.kr", - "dether.io", - "ethermine.org", - "slaask.com", - "etherbtc.io", - "ethereal.capital", - "etherisc.com", - "m.famalk.net", - "etherecho.com", - "ethereum.os.tc", - "theethereum.wiki", - "metajack.im", - "etherhub.io", - "ethereum.network", - "ethereum.link", - "ethereum.com", - "prethereum.org", - "ethereumj.io", - "etheraus.com", - "ethereum.dev", - "1ethereum.ru", - "ethereum.nz", - "nethereum.com", - "metabank.com", - "metamas.com", - "aventus.io", - "metabase.com", - "etherdelta.com", - "metabase.one", - "cryptokitties.co", - "remme.io", - "jibrel.network" - ], - "blacklist": [ - "xn--myethrwalle-jb9e19a.com", - "xn--myetheralle-7b9ezl.com", - "iconfoundation.co", - "fundrequest.info", - "xn--myetherwale-os8e7x.com", - "remme-ico.eu", - "gonetwork.live", - "token.gonetwork.pro", - "gonetwork.pro", - "gonetwork.eu", - "nucleus-vision.cc", - "jibreltoken.in", - "dock.so", - "dock.promo", - "xn--mycrypt-r0a.com", - "xn--mycrypt-g1a.com", - "xn--mycrpto-y2a.com", - "ethexploit.org", - "remme.in", - "remme.ws", - "remme.com.ng", - "nyeitthervvallet.com", - "xn--myeerhwailet-ooc.com", - "myeterhwaliot.com", - "remme.live", - "xn--yethewalle-to2exkhi.com", - "myetherwallet.custom-token.com", - "custom-token.com", - "sale-earn.com", - "bankera.live", - "originprotocol.io", - "trx.foundation", - "tokensale.adhive.net", - "adhive.net", - "decentral.market", - "cryptoexploite.com", - "blockclain.net", - "xn--blckchin-5za9o.info", - "xn--blkhain-m0a4pb.info", - "xn--blocchal-gmb8m.info", - "xn--blocchaln-orb.info", - "xn--blocchan-gmb7c.info", - "xn--blockaden-lsen-5pb.com", - "xn--blockchai-3vb.info", - "xn--blockchai-jvb.info", - "xn--blockchal-3vb.info", - "xn--blockcham-ipb.info", - "xn--blockchan-2pb.com", - "xn--blockchan-75a.com", - "xn--blockchan-7sb.info", - "xn--blockchan-d5a.net", - "xn--blockchan-dob.info", - "xn--blockchan-ipb.com", - "xn--blockchan-ipb.info", - "xn--blockchan-nk7d.com", - "xn--blockchan-xub.info", - "xn--blockchann-4ub.com", - "xn--blockchi-n7a50e.info", - "xn--blockchi-o8a54d.info", - "xn--blockchi-p99co8a.com", - "xn--blockchim-hdb.info", - "xn--blockchin-1xb.info", - "xn--blockchin-61a.info", - "xn--blockchin-61a.net", - "xn--blockchin-6ib.info", - "xn--blockchin-ccb.info", - "xn--blockchin-h4a.com", - "xn--blockchin-h4a.info", - "xn--blockchin-hdb.info", - "xn--blockchin-hhb.info", - "xn--blockchin-mib.net", - "xn--blockchin-wcb.com", - "xn--blockchn-fza4j.com", - "xn--blockchn-fza4j.info", - "xn--blockchn-n7a43b.info", - "xn--blockchn-p0a.info", - "xn--blockchn-tx0d4p.com", - "xn--blockclai-3vb.info", - "xn--blockclin-hdb.com", - "xn--blockclin-hdb.info", - "xn--blockclin-hdb.org", - "xn--blockflte-kirchrode-w6b.de", - "xn--blockfltenquartett-windspiel-81c.de", - "xn--blockhai-obb78c.info", - "xn--blockhain-4eb.com", - "xn--blockhain-pfb.com", - "xn--blockhain-pfb.info", - "xn--blockhain-zdb.info", - "xn--blockhan-obb65a.info", - "xn--blockhas-d6a.com", - "xn--blockwallt-j7a.com", - "xn--blokchai-fqb.info", - "xn--blokchain-nfb.info", - "xn--blokhain-28ab.info", - "xn--bockclnain-eyb.info", - "xn--mymoeo-zt7bzf.com", - "xn--mymoer-nqc1368c.com", - "xn--mymoero-c13c.com", - "xn--mymoero-s13c.com", - "xn--mymoneo-f63c.com", - "xn--mymoneo-v63c.com", - "xn--mymoneo-y53c.com", - "xn--mymoner-j0a.com", - "xn--mymoner-j5b.com", - "xn--mymoner-r0a.com", - "xn--mymoner-z0a.com", - "xn--mymoner-z2c.com", - "xn--mymonro-fya.com", - "xn--mymonro-x8a.com", - "xn--myetheallet-l58emu.com", - "xn--myetheraet-9k2ea77h.com", - "xn--myetheralet-ms8e21b.com", - "xn--myetheralle-7b9exm.com", - "xn--myetherallet-5s5f.com", - "xn--myetherallet-fs5f.com", - "xn--myetherewalle-1t1g.com", - "xn--myetherllet-pl9e6k.com", - "xn--myethervvalle-8vc.com", - "xn--myetherwaet-61ea.com", - "xn--myetherwaet-8eda.com", - "xn--myetherwaet-ns8ea.com", - "xn--myetherwale-ns8e8x.com", - "xn--myetherwalet-0fb.com", - "xn--myetherwalet-0z4f.com", - "xn--myetherwalet-814f.com", - "xn--myetherwalet-d9b.com", - "xn--myetherwalet-h14f.com", - "xn--myetherwalle-9me.com", - "xn--myetherwalle-ek5f.com", - "xn--myetherwalle-fqc.com", - "xn--myetherwalle-opc.com", - "xn--myetherwalle-q05f.com", - "xn--myetherwllet-wob.com", - "xn--myetherwllt-r7a0i.com", - "xn--myethewaliet-9d5f.com", - "xn--myethewalle-3ic0947g.com", - "xn--myethewallet-0e5f.com", - "xn--myethewallet-1kc.com", - "xn--myethewallet-bkc.com", - "xn--myethewallet-vof.com", - "xn--myethewalliet-nm1g.com", - "xn--myethewallt-kbb3019g.com", - "xn--myethewallt-w48ew7b.com", - "xn--myethrwalet-6qb6408g.com", - "xn--myethrwalet-ms8e83d.com", - "xn--myethrwallet-1db.com", - "xn--myethrwallt-29af.com", - "xn--myethrwallt-29as.com", - "xn--myethrwllet-q7a31e.com", - "xn--myethrwllet-r8a3c.com", - "fintrux.eu", - "refereum-ico.eu", - "arcblock-ico.org", - "xn--fuson-1sa.org", - "refereum-token.com", - "fintrux.co", - "ico-ton.org", - "xn--mytherwallt-cbbv.com", - "xmoneta.co", - "data-wallet.co", - "tokensale.data-wallet.co", - "xn--myeerhwallot-ooc.com", - "xn--myeterwalet-cm8epi.com", - "xn--myeterwalle-cm8ev6a.com", - "rnyetherumwallet.com", - "republic-protocol.net", - "nyeihitervvallatt.com", - "arcblock.eu", - "republicprotocol.eu", - "tokensale-fusion.com", - "myetherwalletjoin.com", - "medicalchian.com", - "myeahteirwaliet.com", - "myenhtersvvailct.com", - "trinity-token.com", - "xn--eo-yzs.com", - "zilliqa.in", - "sparc.pro", - "myetherwallet.import-tokens.com", - "token-gram.org", - "xn--shapshift-e4a.com", - "xn--shapshift-y4a.com", - "xn--shpeshift-c2a.com", - "xn--shpeshift-r1a.com", - "xn--shapshift-o4a.com", - "xn--shpeshift-w2a.com", - "xn--shapeshft-w5a.com", - "tokensale-fusion.org", - "fusion-ico.com", - "beetolen.com", - "tokencrowdsale.online", - "fusion.tokencrowdsale.online", - "beetokem.com", - "block.chaiins.in", - "origintrail.in", - "bit-z.ru", - "xn--myetherallet-nu5f.com", - "xn--mytherwalet-3qb08c.com", - "xn--myeterwllet-cm8et1d.com", - "xn--mytherwllet-q7a01e.com", - "xn--biance-xt7b.com", - "xn--bnance-wic.com", - "xn--biance-jeb.com", - "xn--bttrx-9za8334c.com", - "wwwkodakcoin.com", - "myetherwallet.uk.com", - "kodakone.cc", - "nyeihitervvallet.com", - "xn--myeterwalet-cm8eoi.com", - "nucleus.foundation", - "beetoken-ico.com", - "data-token.com", - "tron-labs.com", - "ocoin.tech", - "aionfoundation.com", - "ico-telegram.org", - "nyeihitervvallat.com", - "telegramcoin.us", - "daddi.cloud", - "daditoken.com", - "blockarray.org", - "dadi-cloud.net", - "wanchainfunding.org", - "ico-telegram.io", - "iconfoundation.site", - "iost.co", - "beetoken-ico.eu", - "cindicator.network", - "wanchainetwork.org", - "wamchain.org", - "wanchainltd.org", - "wanchainalliance.org", - "nucleus-vision.net", - "ledgerwallet.by", - "nucleuss.vision", - "myenhterswailct.com", - "cobin-hood.com", - "wanchainfoundation.org", - "xn--polniex-ex4c.com", - "xn--polniex-s1a.com", - "xn--polonex-ieb.com", - "xn--polonex-sza.com", - "xn--polonex-zw4c.com", - "xn--polonix-ws4c.com", - "xn--polonix-y8a.com", - "xn--pooniex-ojb.com", - "gramico.info", - "dimnsions.network", - "www-gemini.com", - "login-kucoin.net", - "venchain.foundation", - "grampreico.com", - "tgram.cc", - "ton-gramico.com", - "wwwpaywithink.com", - "coniomi.com", - "paywithnk.com", - "paywithlnk.com", - "iluminatto.com.br", - "pundix.eu", - "xn--bttrx-esay.com", - "xn--bttrex-w8a.com", - "xn--bnance-bwa.com", - "xn--shpeshift-11a.com", - "xn--shapeshif-ts6d.com", - "xn--shapshift-yf7d.com", - "wwwbluzelle.com", - "bluzelie.com", - "nucleus-vision.org", - "omisegonetwork.site", - "etlherzero.com", - "etlherdelta.com", - "xn--condesk-0ya.com", - "xn--condesk-sfb.com", - "xn--coindsk-vs4c.com", - "iexecplatform.com", - "tongramico.com", - "nucleus-vision.eu", - "intchain.network", - "wanchain.cloud", - "bluzelle-ico.com", - "ethzero-wallet.com", - "xn--metherwalle-jb9et7d.com", - "xn--coinesk-jo3c.com", - "venchainfoundation.com", - "myenhtersvvailot.com", - "ether-zero.net", - "ins.foundation", - "nastoken.org", - "telcointoken.com", - "ether0.org", - "eterzero.org", - "bluzelle-ico.eu", - "bleuzelle.com", - "appcoinstoken.org", - "xn--quanstamp-8s6d.com", - "myehntersvvailct.com", - "myeherwalllet.com", - "ico-bluzelle.com", - "bluzelle.im", - "bluzelle.one", - "bluzele.sale", - "bluzele.co", - "sether.ws", - "xn--myetherwalet-6gf.com", - "xn--rnyethewaliet-om1g.com", - "rnyethervailet.com", - "mvetherwaliet.com", - "rnyetherwailet.com", - "myethervaliet.com", - "rnyethervaliet.com", - "mvetherwalilet.com", - "xn--myethewalie-3ic0947g.com", - "xn--mthrwallet-z6ac3y.com", - "xn--myeherwalie-vici.com", - "xn--myethervvalie-8vc.com", - "xn--mythrwallt-06acf.com", - "xn--mtherwallet-y9a6y.com", - "myetherwallet.applytoken.tk", - "ethereum-zero.com", - "quanstamptoken.tk", - "bluzelle.network", - "ether-wallet.org", - "tron-wallet.info", - "appcoinsproject.com", - "vechain.foundation", - "tronlab.site", - "tronlabs.network", - "bluzelle.cc", - "ethblender.com", - "ethpaperwallet.net", - "waltontoken.org", - "icoselfkey.org", - "etherzeroclaim.com", - "etherzero.promo", - "bluzelle.pro", - "token-selfkey.org", - "xn--etherdlta-0f7d.com", - "sether.in", - "xn--ttrex-ysa9423c.com", - "bluzelle.eu", - "bluzelle.site", - "gifto.tech", - "xn--os-g7s.com", - "selfkey.co", - "xn--myeherwalet-ns8exy.com", - "xn--coinelegraph-wk5f.com", - "dai-stablecoin.com", - "eos-token.org", - "venchain.org", - "gatcoins.io", - "deepbrainchain.co", - "myetherwalililet.info", - "myehvterwallet.com", - "myehterumswallet.com", - "nucleusico.com", - "tronlab.tech", - "0x-project.com", - "gift-token-events.mywebcommunity.org", - "funfairtoken.org", - "breadtokenapp.com", - "cloudpetstore.com", - "myethwalilet.com", - "selfkeys.org", - "wallet-ethereum.com", - "xn--methrwallt-26ar0z.com", - "xn--mytherwllet-r8a0c.com", - "bluzelle.promo", - "tokensale.bluzelle.promo", - "cedarlake.org", - "marketingleads4u.com", - "cashaa.co", - "xn--inance-hrb.com", - "wanchain.tech", - "zenprolocol.com", - "ethscan.io", - "etherscan.in", - "props-project.com", - "zilliaq.com", - "reqestnetwork.com", - "etherdelta.pw", - "ethereum-giveaway.org", - "mysimpletoken.org", - "binancc.com", - "blnance.org", - "elherdelta.io", - "xn--hapeshit-ez9c2y.com", - "tenxwallet.co", - "singularitynet.info", - "mytlherwaliet.info", - "iconmainnet.ml", - "tokenselfkey.org", - "xn--myetewallet-cm8e5y.com", - "envione.org", - "myetherwalletet.com", - "claimbcd.com", - "ripiocreditnetwork.in", - "xn--yeterwallet-ml8euo.com", - "ethclassicwallet.info", - "myltherwallet.ru.com", - "etherdella.com", - "xn--yeterwallet-bm8ewn.com", - "singularty.net", - "cloudkitties.co", - "iconfoundation.io", - "kittystat.com", - "gatscoin.io", - "singularitynet.in", - "sale.canay.io", - "canay.io", - "wabicoin.co", - "envion.top", - "sirinslabs.com", - "tronlab.co", - "paxful.com.ng", - "changellyli.com", - "ethereum-code.com", - "xn--plonex-6va6c.com", - "envion.co", - "envion.cc", - "envion.site", - "ethereumchain.info", - "xn--envon-1sa.org", - "xn--btstamp-rfb.net", - "envlon.org", - "envion-ico.org", - "spectivvr.org", - "sirinlbs.com", - "ethereumdoubler.life", - "xn--myetherwllet-fnb.com", - "sirin-labs.com", - "sirin-labs.org", - "envion.one", - "envion.live", - "propsproject.org", - "propsprojects.com", - "decentralland.org", - "xn--metherwalet-ns8ep4b.com", - "redpulsetoken.co", - "propsproject.tech", - "xn--myeterwalet-nl8emj.com", - "powrerledger.com", - "cryptokitties.com", - "sirinlabs.pro", - "sirinlabs.co", - "sirnlabs.com", - "superbitcoin-blockchain.info", - "hellobloom.me", - "mobus.network", - "powrrledger.com", - "xn--myeherwalet-ms8eyy.com", - "qlink-ico.com", - "gatcoin.in", - "tokensale.gamefllp.com", - "gamefllp.com", - "xn--myeherwalle-vici.com", - "xn--myetherwalet-39b.com", - "xn--polonex-ffb.com", - "xn--birex-leba.com", - "raiden-network.org", - "sirintabs.com", - "xn--metherwallt-79a30a.com", - "xn--myethrwllet-2kb3p.com", - "myethlerwallet.eu", - "xn--btrex-b4a.com", - "powerrledger.com", - "xn--cointeegraph-wz4f.com", - "myerherwalet.com", - "qauntstanp.com", - "myetherermwallet.com", - "xn--myethewalet-ns8eqq.com", - "xn--nvion-hza.org", - "nnyetherwallelt.ru.com", - "ico-wacoin.com", - "xn--myeterwalet-nl8enj.com", - "bitcoinsilver.io", - "t0zero.com", - "tokensale.gizer.in", - "gizer.in", - "wabitoken.com", - "gladius.ws", - "xn--metherwallt-8bb4w.com", - "quanttstamp.com", - "gladius.im", - "ethereumstorage.net", - "powerledgerr.com", - "xn--myeherwallet-4j5f.com", - "quamtstamp.com", - "quntstamp.com", - "xn--changely-j59c.com", - "shapeshlft.com", - "coinbasenews.co.uk", - "xn--metherwallet-hmb.com", - "envoin.org", - "powerledger.com", - "bitstannp.net", - "xn--myetherallet-4k5fwn.com", - "xn--coinbas-pya.com", - "requestt.network", - "oracls.network", - "sirinlabs.website", - "powrledger.io", - "slackconfirm.com", - "shape-shift.io", - "oracles-network.org", - "xn--myeherwalle-zb9eia.com", - "blockstack.one", - "urtust.io", - "bittrex.one", - "t0-ico.com", - "xn--cinbase-90a.com", - "xn--metherwalet-ns8ez1g.com", - "tzero-ico.com", - "tzero.su", - "tzero.website", - "blockstack.network", - "ico-tzero.com", - "spectre.site", - "tzero.pw", - "spectre-ai.net", - "xn--waxtokn-y8a.com", - "dmarket.pro", - "bittrex.com11648724328774.cf", - "bittrex.com1987465798.ga", - "autcus.org", - "t-zero.org", - "xn--zero-zxb.com", - "myetherwalletfork.com", - "blokclbain.info", - "datum.sale", - "spectre-ai.org", - "powerledgr.com", - "simpletoken.live", - "sale.simpletoken.live", - "qauntstamp.com", - "raiden-network.com", - "metalpayme.com", - "quantstamp-ico.com", - "myetherwailetclient.com", - "biockchain.biz", - "wallets-blockchain.com", - "golemairdrop.com", - "omisegoairdrop.net", - "blodkchainwallet.info", - "walton-chain.org", - "elite888-ico.com", - "bitflyerjp.com", - "chainlinksmartcontract.com", - "stormtoken.eu", - "omise-go.tech", - "saltending.com", - "stormltoken.com", - "xn--quanttamp-42b.com", - "stormtoken.co", - "storntoken.com", - "stromtoken.com", - "storm-token.com", - "stormtokens.io", - "ether-delta.com", - "ethconnect.live", - "ethconnect.trade", - "xn--bttrex-3va.net", - "quantstamp.com.co", - "wancha.in", - "augur-network.com", - "quantstamp.com.ua", - "myetherwalletmew.com", - "myetherumwalletts.com", - "xn--quanstamp-tmd.com", - "quantsstamps.com", - "changellyl.net", - "xn--myetherwalet-1fb.com", - "myethereumwallets.com", - "xn--myetherwalet-e9b.com", - "quantslamp.com", - "metelpay.com", - "xn--eterdelta-m75d.com", - "linksmartcontract.com", - "myetherwalletaccess.com", - "myetherwalletcheck.com", - "myetherwalletcheck.info", - "myetherwalletconf.com", - "myetherwalleteal.com", - "myetherwalletec.com", - "myetherwalletgeth.com", - "myetherwalletmetamask.com", - "myetherwalletmm.com", - "myetherwalletmy.com", - "myetherwalletnh.com", - "myetherwalletnod.com", - "myetherwalletrr.com", - "myetherwalletrty.com", - "myetherwalletsec.com", - "myetherwalletsecure.com", - "myetherwalletutc.com", - "myetherwalletver.info", - "myetherwalletview.com", - "myetherwalletview.info", - "myetherwalletvrf.com", - "myetherwalletmist.com", - "myetherwalletext.com", - "myetherwalletjson.com", - "mettalpay.com", - "bricklblock.io", - "bittrexy.com", - "utrust.so", - "myethierwallet.org", - "metallpay.com", - "kraken-wallet.com", - "dmarkt.io", - "etherdeltla.com", - "unlversa.io", - "universa.sale", - "mercuryprotocol.live", - "ripiocredlt.network", - "myetlherwa11et.com", - "dentacoin.in", - "rdrtg.com", - "myetherwallet.com.rdrgh.com", - "rdrgh.com", - "ripiocreditnetwork.co", - "riaden.network", - "hydrominer.biz", - "rdrblock.com", - "reqest.network", - "senstoken.com", - "myetherwallat.services", - "ripiocredit.net", - "xn--metherwallet-c06f.com", - "ico.ripiocredits.com", - "ripiocredits.com", - "raidens.network", - "artoken.co", - "myetherwalletlgn.com", - "etherblog.click", - "stormtoken.site", - "httpmyetherwallet.com", - "myetherwalletverify.com", - "byzantiumfork.com", - "myetherwallet.com.byzantiumfork.com", - "www-myethervvallet.com", - "ether24.info", - "block-v.io", - "bittrex.cash", - "shapishift.io", - "ripiocerdit.network", - "rnyetherwa11et.com", - "claimether.com", - "enigmatokensale.com", - "ethereum-org.com", - "mvetnerwallet.com", - "myctherwallet.com", - "myetherwaltet.com", - "myetherwatlet.com", - "privatix.me", - "myetherwalletcnf.com", - "myetherwalletver.com", - "privatix.top", - "privatix.pro", - "privatex.io", - "stormtoken.cc", - "raiden.online", - "stormstoken.com", - "myetereumwallet.com", - "stormtokens.net", - "myetherwalletconf.info", - "storrntoken.com", - "worldofbattles.io", - "ico.worldofbattles.io", - "privatix.live", - "riden.network", - "raidan.network", - "ralden.network", - "mymyetherwallet.com", - "myetherwallets.net", - "myetherwalletverify.info", - "stormxtoken.com", - "myethereum-wallet.com", - "myetherwallet-forkprep.pagedemo.co", - "myetnerwailet.com", - "www-mvetherwallet.com", - "etheirdelta.com", - "myetherwalletiu.com", - "myetherwaiiett.com", - "xn--mytherwalet-cbb87i.com", - "xn--myethrwallet-ivb.co", - "xn--myeterwallet-f1b.com", - "myehterwaliet.com", - "omegaone.co", - "myetherwaiietw.com", - "slack.com.ru", - "polkodot.network", - "request-network.net", - "requestnetwork.live", - "binancie.com", - "first-eth.info", - "myewerthwalliet.com", - "enjincoin.pw", - "xn--bitrex-k17b.com", - "alrswap.io", - "www-request.network", - "myetnenwallet.com", - "www-enigma.co", - "cryptoinsidenews.com", - "air-swap.tech", - "launch.airswap.cc", - "airswap.cc", - "airswaptoken.com", - "launch.airswap.in", - "airswap.in", - "security-steemit.com.mx", - "blockchalnwallet.com", - "blodkchainwallet.com", - "blodkchaln.com", - "myethereumwaiiet.com", - "myethereumwaliet.com", - "myethereumwalilet.com", - "myetherswailet.com", - "myetherswaliet.com", - "myetherswalilet.com", - "myetherwalilett.com", - "myetherwalletl.com", - "myetherwalletww.com", - "myethereunwallet.com", - "myethereumwallct.com", - "myetherwaiieti.com", - "myetherwaiiete.com", - "upfirng.com", - "paypie.net", - "paypie.tech", - "soam.co", - "myetherwaiict.com", - "numerai-token.com", - "www-bankera.com", - "vvanchain.org", - "omisegoairdrop.com", - "xn--enjncoin-41a.io", - "suncontract.su", - "myetherwaiietr.com", - "shapeshiff.io", - "warchain.org", - "myethwallett.com", - "myethervvaliet.com", - "wanchains.org", - "etherparty.in", - "enjincoin.me", - "etiam.io", - "invest.smartlands.tech", - "smartlands.tech", - "enijncoin.io", - "wanchain.network", - "nimiq.su", - "enjincoin.sale", - "tenxwallet.io", - "golem-network.net", - "myyethwallet.ml", - "mywetherwailiet.com", - "omg-omise.com", - "district0x.tech", - "centra-token.com", - "etherdetla.com", - "etnerparty.io", - "etherdelta.su", - "myetherwallett.neocities.org", - "myetherwallet-secure.com", - "myethereumwalletntw.info", - "real-markets.io", - "wallet-ethereum.org", - "request-network.com", - "shapeshifth.io", - "shiapeshift.in", - "coin.red-puise.com", - "ibittreix.com", - "coinkbase.com", - "cindicator.pro", - "myetherwallet.com.ailogin.me", - "eventchain.co", - "kinkik.in", - "myetherumwalletview.com", - "protostokenhub.com", - "coinrbase.com", - "myetherwalletlogin.com", - "omisegotoken.com", - "myethereumwalletntw.com", - "reall.markets", - "cobinhood.org", - "cobinhood.io", - "happy-coin.org", - "bitfinex.com.co", - "bitfienex.com", - "iconn.foundation", - "centra.vip", - "smartcontract.live", - "icon.community", - "air-token.com", - "centra.credit", - "myetherwallet-singin.com", - "smartcontractlink.com", - "shapesshift.io", - "0xtoken.io", - "augurproject.co", - "ethereumus.one", - "myetherumwalet.com", - "myetherwalletsignin.com", - "change-bank.org", - "charge-bank.com", - "myetherwalletsingin.com", - "myetherwalletcontract.com", - "change-bank.io", - "chainlink.tech", - "myetherwallet-confirm.com", - "tokensale.kybernet.network", - "kybernet.network", - "kyberr.network", - "kybernetwork.io", - "myetherwalletconfirm.com", - "kvnuke.github.io", - "kin.kikpro.co", - "myethereumwallet.co.uk", - "tokensale-kyber.network", - "kyber-network.co", - "tokensale.kyber-network.co", - "pyro0.github.io", - "tokensale.kyber.digital", - "kyber.digital", - "omise-go.me", - "my.etherwallet.com.de", - "bepartof.change-bank.co", - "change-bank.co", - "enigma-tokens.co", - "coinbase.com.eslogin.co", - "xn--bittrx-mva.com", - "ethrdelta.github.io", - "etherdellta.com", - "ico-nexus.social", - "red-pulse.tech", - "bitj0b.io", - "xn--bttrex-bwa.com", - "kin-klk.com", - "kin-crowdsale.com", - "ethedelta.com", - "coindash.su", - "myethwallet.co.uk", - "swarm.credit", - "myethereumwallet.uk", - "iconexu.social", - "wanchain.co", - "enigrna.co", - "linknetwork.co", - "qtum-token.com", - "omisego.com.co", - "rivetzintl.org", - "etherdelta.one", - "the-ether.pro", - "etherdelta.gitnub.io", - "kirkik.com", - "monetha.ltd", - "vlberate.io", - "ethereumwallet-kr.info", - "omise-go.org", - "iconexus.social", - "bittirrex.com", - "aventus.pro", - "atlant.solutions", - "aventus.group", - "metamak.io", - "omise.com.co", - "herotokens.io", - "starbase.pro", - "etherdelta.githulb.io", - "herotoken.co", - "kinico.net", - "dmarket.ltd", - "etherdelta.gilthub.io", - "golem-network.com", - "etnerscan.io", - "bllttriex.com", - "monetha.me", - "monetha.co", - "monetha-crowdsale.com", - "starbase.tech", - "aventus-crowdsale.com", - "shapeshift.pro", - "bllttrex.com", - "kickico.co", - "statustoken.im", - "bilttrex.com", - "tenxpay.io", - "bittrex.ltd", - "metalpay.im", - "aragon.im", - "coindash.tech", - "decentraland.tech", - "decentraland.pro", - "status-token.com", - "bittrex.cam", - "enigmatoken.com", - "unocoin.company", - "unocoin.fund", - "0xproject.io", - "0xtoken.com", - "numerai.tech", - "decentraiand.org", - "blockcrein.info", - "blockchealn.info", - "bllookchain.info", - "blockcbhain.info", - "myetherwallet.com.ethpromonodes.com", - "mettamask.io", - "tokenswap.org", - "netherum.com", - "etherexx.org", - "etherume.io", - "ethereum.plus", - "ehtereum.org", - "etereurm.org", - "etheream.com", - "ethererum.org", - "ethereum.io", - "etherdelta-glthub.com", - "cryptoalliance.herokuapp.com", - "bitspark2.com", - "indorsetoken.com", - "iconexus.tk", - "iconexus.ml", - "iconexus.ga", - "iconexus.cf", - "etherwallet.online", - "wallet-ethereum.net", - "bitsdigit.com", - "etherswap.org", - "eos.ac", - "uasfwallet.com", - "ziber.io", - "multiply-ethereum.info", - "bittrex.comze.com", - "karbon.vacau.com", - "etherdelta.gitlhub.io", - "etherdelta.glthub.io", - "digitaldevelopersfund.vacau.com", - "district-0x.io", - "coin-dash.com", - "coindash.ru", - "district0x.net", - "aragonproject.io", - "coin-wallet.info", - "coinswallet.info", - "contribute-status.im", - "ether-api.com", - "ether-wall.com", - "mycoinwallet.net", - "ethereumchamber.com", - "ethereumchamber.net", - "ethereumchest.com", - "ethewallet.com", - "myetherwallet.com.vc", - "myetherwallet.com.pe", - "myetherwallet.us.com", - "myetherwallet.com.u0387831.cp.regruhosting.ru", - "myethereumwallet.su", - "myetherweb.com.de", - "myetherieumwallet.com", - "myetehrwallet.com", - "myeterwalet.com", - "myetherwaiiet.com", - "myetherwallet.info", - "myetherwallet.ch", - "myetherwallet.om", - "myethervallet.com", - "myetherwallet.com.cm", - "myetherwallet.com.co", - "myetherwallet.com.de", - "myetherwallet.com.gl", - "myetherwallet.com.im", - "myetherwallet.com.ua", - "secure-myetherwallet.com", - "update-myetherwallet.com", - "wwwmyetherwallet.com", - "myeatherwallet.com", - "myetharwallet.com", - "myelherwallel.com", - "myetherwaillet.com", - "myetherwaliet.com", - "myetherwallel.com", - "myetherwallet.cam", - "myetherwallet.cc", - "myetherwallet.co", - "myetherwallet.cm", - "myetherwallet.cz", - "myetherwallet.org", - "myetherwallet.tech", - "myetherwallet.top", - "myetherwallet.net", - "myetherwallet.ru.com", - "myetherwallet.com.ru", - "metherwallet.com", - "myetrerwallet.com", - "myetlerwallet.com", - "myethterwallet.com", - "myethwallet.io", - "myethterwallet.co", - "myehterwallet.co", - "myaetherwallet.com", - "myetthterwallet.com", - "myetherwallet.one", - "myelterwallet.com", - "myetherwallet.gdn", - "myetherwallt.com", - "myeterwallet.com", - "myeteherwallet.com", - "myethearwailet.com", - "myetherwallelt.com", - "myetherwallett.com", - "etherwallet.org", - "myetherewallet.com", - "myeherwallet.com", - "myethcrwallet.com", - "myetherwallet.link", - "myetherwallets.com", - "myethearwaillet.com", - "myethearwallet.com", - "myetherawllet.com", - "myethereallet.com", - "myetherswallet.com", - "myetherwalet.com", - "myetherwaller.com", - "myetherwalliet.com", - "myetherwllet.com", - "etherwallet.io", - "myetherwallet.ca", - "myetherwallet.me", - "myetherwallet.ru", - "myetherwallet.xyz", - "myetherwallte.com", - "myethirwallet.com", - "myethrewallet.com", - "etherwallet.net", - "maetherwallet.com", - "meyetherwallet.com", - "my.ether-wallet.pw", - "myehterwallet.com", - "myeitherwallet.com", - "myelherwallet.com", - "myeltherwallet.com", - "myerherwallet.com", - "myethearwalet.com", - "myetherewalle.com", - "myethervvallet.com", - "myetherwallent.com", - "myetherwallet.fm", - "myetherwalllet.com", - "myetherwalltet.com", - "myetherwollet.com", - "myetlherwalet.com", - "myetlherwallet.com", - "rnyetherwallet.com", - "etherclassicwallet.com", - "omg-omise.co", - "omise-go.com", - "omise-go.net", - "omise-omg.com", - "omise-go.io", - "tenx-tech.com", - "bitclaive.com", - "tokensale-tenx.tech", - "ubiqcoin.org", - "metamask.com", - "ethtrade.io", - "myetcwallet.com", - "account-kigo.net", - "bitcoin-wallet.net", - "blocklichan.info", - "bloclkicihan.info", - "coindash.ml", - "eos-bonus.com", - "eos-io.info", - "ether-wallet.net", - "ethereum-wallet.info", - "ethereum-wallet.net", - "ethereumchest.net", - "reservations-kigo.net", - "reservations-lodgix.com", - "secure-liverez.com", - "secure-onerooftop.com", - "settings-liverez.com", - "software-liverez.com", - "software-lodgix.com", - "unhackableetherwallets.com", - "www-myetherwallet.com", - "etherwallet.co.za", - "etherwalletchain.com", - "etherwallets.net", - "etherwallets.nl", - "my-ethwallet.com", - "my.ether-wallet.co", - "myetherwallet.com.am", - "myetherwallet.com.ht", - "myetherwalletcom.com", - "myehterwailet.com", - "xn--myetherwalle-xoc.com", - "xn--myetherwalle-44i.com", - "xn--myetherwalle-xhk.com", - "xn--myetherwallt-cfb.com", - "xn--myetherwallt-6tb.com", - "xn--myetherwallt-xub.com", - "xn--myetherwallt-ovb.com", - "xn--myetherwallt-fwb.com", - "xn--myetherwallt-5wb.com", - "xn--myetherwallt-jzi.com", - "xn--myetherwallt-2ck.com", - "xn--myetherwallt-lok.com", - "xn--myetherwallt-lsl.com", - "xn--myetherwallt-ce6f.com", - "xn--myetherwalet-mcc.com", - "xn--myetherwalet-xhf.com", - "xn--myetherwalet-lcc.com", - "xn--myetherwaet-15ba.com", - "xn--myetherwalet-whf.com", - "xn--myetherwaet-v2ea.com", - "xn--myetherwllet-59a.com", - "xn--myetherwllet-jbb.com", - "xn--myetherwllet-wbb.com", - "xn--myetherwllet-9bb.com", - "xn--myetherwllet-ncb.com", - "xn--myetherwllet-0cb.com", - "xn--myetherwllet-5nb.com", - "xn--myetherwllet-ktd.com", - "xn--myetherwllet-mre.com", - "xn--myetherwllet-76e.com", - "xn--myetherwllet-o0l.com", - "xn--myetherwllet-c45f.com", - "xn--myetherallet-ejn.com", - "xn--myethewallet-4nf.com", - "xn--myethewallet-iof.com", - "xn--myethewallet-mpf.com", - "xn--myethewallet-6bk.com", - "xn--myethewallet-i31f.com", - "xn--myethrwallet-feb.com", - "xn--myethrwallt-fbbf.com", - "xn--myethrwallet-seb.com", - "xn--myethrwallt-rbbf.com", - "xn--myethrwallet-5eb.com", - "xn--myethrwallt-3bbf.com", - "xn--myethrwallet-0tb.com", - "xn--myethrwallt-tpbf.com", - "xn--myethrwallet-rub.com", - "xn--myethrwallt-iqbf.com", - "xn--myethrwallet-ivb.com", - "xn--myethrwallt-6qbf.com", - "xn--myethrwallet-8vb.com", - "xn--myethrwallt-vrbf.com", - "xn--myethrwallet-zwb.com", - "xn--myethrwallt-ksbf.com", - "xn--myethrwallet-dzi.com", - "xn--myethrwallt-wbif.com", - "xn--myethrwallet-wck.com", - "xn--myethrwallt-skjf.com", - "xn--myethrwallet-fok.com", - "xn--myethrwallt-fvjf.com", - "xn--myethrwallet-fsl.com", - "xn--myethrwallt-fwkf.com", - "xn--myethrwallet-5d6f.com", - "xn--myethrwallt-319ef.com", - "xn--myeterwallet-ufk.com", - "xn--myeterwallet-nrl.com", - "xn--myeterwallet-von.com", - "xn--myeterwallet-jl6c.com", - "xn--myeherwallet-ooc.com", - "xn--myeherwalle-6hci.com", - "xn--myeherwallet-v4i.com", - "xn--myeherwalle-zgii.com", - "xn--myeherwallet-ohk.com", - "xn--myeherwalle-6oji.com", - "xn--mytherwallet-ceb.com", - "xn--mythrwallet-cbbc.com", - "xn--mythrwallt-c7acf.com", - "xn--mytherwallet-peb.com", - "xn--mythrwallet-obbc.com", - "xn--mythrwallt-n7acf.com", - "xn--mytherwallet-2eb.com", - "xn--mythrwallet-0bbc.com", - "xn--mythrwallt-y7acf.com", - "xn--mytherwallet-xtb.com", - "xn--mythrwallet-qpbc.com", - "xn--mythrwallt-jlbcf.com", - "xn--mytherwallet-oub.com", - "xn--mythrwallet-fqbc.com", - "xn--mythrwallt-5lbcf.com", - "xn--mythrwallet-3qbc.com", - "xn--mythrwallt-smbcf.com", - "xn--mytherwallet-5vb.com", - "xn--mythrwallet-srbc.com", - "xn--mythrwallt-fnbcf.com", - "xn--mytherwallet-wwb.com", - "xn--mythrwallet-hsbc.com", - "xn--mythrwallt-1nbcf.com", - "xn--mytherwallet-9yi.com", - "xn--mythrwallet-tbic.com", - "xn--mythrwallt-dnhcf.com", - "xn--mytherwallet-tck.com", - "xn--mythrwallet-pkjc.com", - "xn--mythrwallt-lsicf.com", - "xn--mytherwallet-cok.com", - "xn--mythrwallet-cvjc.com", - "xn--mythrwallt-c2icf.com", - "xn--mytherwallet-csl.com", - "xn--mythrwallet-cwkc.com", - "xn--mythrwallt-c0jcf.com", - "xn--mytherwallet-2d6f.com", - "xn--mythrwallet-019ec.com", - "xn--mythrwallt-yq3ecf.com", - "xn--metherwallet-qlb.com", - "xn--metherwallet-1uf.com", - "xn--metherwallet-iyi.com", - "xn--metherwallet-zhk.com", - "xn--metherwallet-3ml.com", - "xn--mytherwallet-fvb.com", - "xn--myetherwallt-7db.com", - "xn--myetherwallt-leb.com", - "xn--myetherwallt-yeb.com", - "xn--yetherwallet-vjf.com", - "xn--yetherwallet-dfk.com", - "xn--yetherwallet-1t1f.com", - "xn--yetherwallet-634f.com", - "xn--myeherwallet-fpc.com", - "xn--myethewallt-crb.com", - "xn--metherwallet-1vc.com", - "xn--myeherwallt-kbb8039g.com", - "xn--myeherwallet-vk5f.com", - "xn--yethewallet-iw8ejl.com", - "xn--bittrx-th8b.com", - "xn--polniex-n0a.com", - "thekey.vin", - "thekey-vip.com", - "digitexftures.com", - "ethzero-wallet.org", - "zeepln.io", - "wepowers.network", - "wepower.vision" - ] -} diff --git a/test/unit/actions/tx_test.js b/test/unit/actions/tx_test.js index b6a691860..c110f71fc 100644 --- a/test/unit/actions/tx_test.js +++ b/test/unit/actions/tx_test.js @@ -9,7 +9,7 @@ var reducers = require(path.join(__dirname, '..', '..', '..', 'ui', 'app', 'redu describe('tx confirmation screen', function () { beforeEach(function () { - this.sinon = sinon.sandbox.create() + this.sinon = sinon.createSandbox() }) afterEach(function () { diff --git a/test/unit/ComposableObservableStore.js b/test/unit/app/ComposableObservableStore.js similarity index 92% rename from test/unit/ComposableObservableStore.js rename to test/unit/app/ComposableObservableStore.js index 3fba200c1..aa8abd463 100644 --- a/test/unit/ComposableObservableStore.js +++ b/test/unit/app/ComposableObservableStore.js @@ -1,5 +1,5 @@ const assert = require('assert') -const ComposableObservableStore = require('../../app/scripts/lib/ComposableObservableStore') +const ComposableObservableStore = require('../../../app/scripts/lib/ComposableObservableStore') const ObservableStore = require('obs-store') describe('ComposableObservableStore', () => { diff --git a/test/unit/app/account-import-strategies.spec.js b/test/unit/app/account-import-strategies.spec.js new file mode 100644 index 000000000..83cfaeb3e --- /dev/null +++ b/test/unit/app/account-import-strategies.spec.js @@ -0,0 +1,31 @@ +const assert = require('assert') +const path = require('path') +const accountImporter = require('../../../app/scripts/account-import-strategies/index') +const ethUtil = require('ethereumjs-util') + +describe('Account Import Strategies', function () { + const privkey = '0x4cfd3e90fc78b0f86bf7524722150bb8da9c60cd532564d7ff43f5716514f553' + const json = '{"version":3,"id":"dbb54385-0a99-437f-83c0-647de9f244c3","address":"a7f92ce3fba24196cf6f4bd2e1eb3db282ba998c","Crypto":{"ciphertext":"bde13d9ade5c82df80281ca363320ce254a8a3a06535bbf6ffdeaf0726b1312c","cipherparams":{"iv":"fbf93718a57f26051b292f072f2e5b41"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"7ffe00488319dec48e4c49a120ca49c6afbde9272854c64d9541c83fc6acdffe","n":8192,"r":8,"p":1},"mac":"2adfd9c4bc1cdac4c85bddfb31d9e21a684e0e050247a70c5698facf6b7d4681"}}' + + it('imports a private key and strips 0x prefix', async function () { + const importPrivKey = await accountImporter.importAccount('Private Key', [ privkey ]) + assert.equal(importPrivKey, ethUtil.stripHexPrefix(privkey)) + }) + + it('fails when password is incorrect for keystore', async function () { + const wrongPassword = 'password2' + + try { + await accountImporter.importAccount('JSON File', [ json, wrongPassword]) + } catch (error) { + assert.equal(error.message, 'Key derivation failed - possibly wrong passphrase') + } + }) + + it('imports json string and password to return a private key', async function () { + const fileContentsPassword = 'password1' + const importJson = await accountImporter.importAccount('JSON File', [ json, fileContentsPassword]) + assert.equal(importJson, '0x5733876abe94146069ce8bcbabbde2677f2e35fa33e875e92041ed2ac87e5bc7') + }) + +}) diff --git a/test/unit/app/buy-eth-url.spec.js b/test/unit/app/buy-eth-url.spec.js new file mode 100644 index 000000000..36646fa68 --- /dev/null +++ b/test/unit/app/buy-eth-url.spec.js @@ -0,0 +1,48 @@ +const assert = require('assert') +const getBuyEthUrl = require('../../../app/scripts/lib/buy-eth-url') + +describe('', function () { + const mainnet = { + network: '1', + amount: 5, + address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', + } + const ropsten = { + network: '3', + } + const rinkeby = { + network: '4', + } + const kovan = { + network: '42', + } + + it('returns coinbase url with amount and address for network 1', function () { + const coinbaseUrl = getBuyEthUrl(mainnet) + const coinbase = coinbaseUrl.match(/(https:\/\/buy.coinbase.com)/) + const amount = coinbaseUrl.match(/(amount)\D\d/) + const address = coinbaseUrl.match(/(address)(.*)(?=&)/) + + assert.equal(coinbase[0], 'https://buy.coinbase.com') + assert.equal(amount[0], 'amount=5') + assert.equal(address[0], 'address=0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc') + + }) + + it('returns metamask ropsten faucet for network 3', function () { + const ropstenUrl = getBuyEthUrl(ropsten) + assert.equal(ropstenUrl, 'https://faucet.metamask.io/') + }) + + it('returns rinkeby dapp for network 4', function () { + const rinkebyUrl = getBuyEthUrl(rinkeby) + assert.equal(rinkebyUrl, 'https://www.rinkeby.io/') + }) + + it('returns kovan github test faucet for network 42', function () { + const kovanUrl = getBuyEthUrl(kovan) + assert.equal(kovanUrl, 'https://github.com/kovan-testnet/faucet') + }) + +}) + diff --git a/test/unit/address-book-controller.js b/test/unit/app/controllers/address-book-controller.js similarity index 95% rename from test/unit/address-book-controller.js rename to test/unit/app/controllers/address-book-controller.js index e48e69d98..dc4b8e3ff 100644 --- a/test/unit/address-book-controller.js +++ b/test/unit/app/controllers/address-book-controller.js @@ -1,5 +1,5 @@ const assert = require('assert') -const AddressBookController = require('../../app/scripts/controllers/address-book') +const AddressBookController = require('../../../../app/scripts/controllers/address-book') const stubPreferencesStore = { getState: function () { diff --git a/test/unit/blacklist-controller-test.js b/test/unit/app/controllers/blacklist-controller-test.js similarity index 94% rename from test/unit/blacklist-controller-test.js rename to test/unit/app/controllers/blacklist-controller-test.js index cbf73d3e5..085641777 100644 --- a/test/unit/blacklist-controller-test.js +++ b/test/unit/app/controllers/blacklist-controller-test.js @@ -1,5 +1,5 @@ const assert = require('assert') -const BlacklistController = require('../../app/scripts/controllers/blacklist') +const BlacklistController = require('../../../../app/scripts/controllers/blacklist') describe('blacklist controller', function () { let blacklistController diff --git a/test/unit/currency-controller-test.js b/test/unit/app/controllers/currency-controller-test.js similarity index 95% rename from test/unit/currency-controller-test.js rename to test/unit/app/controllers/currency-controller-test.js index 63ab60f9e..1941d1c43 100644 --- a/test/unit/currency-controller-test.js +++ b/test/unit/app/controllers/currency-controller-test.js @@ -3,7 +3,7 @@ global.fetch = global.fetch || require('isomorphic-fetch') const assert = require('assert') const nock = require('nock') -const CurrencyController = require('../../app/scripts/controllers/currency') +const CurrencyController = require('../../../../app/scripts/controllers/currency') describe('currency-controller', function () { var currencyController @@ -45,7 +45,6 @@ describe('currency-controller', function () { currencyController.updateConversionRate() .then(function () { var result = currencyController.getConversionRate() - console.log('currencyController.getConversionRate:', result) assert.equal(typeof result, 'number') done() }).catch(function (err) { diff --git a/test/unit/infura-controller-test.js b/test/unit/app/controllers/infura-controller-test.js similarity index 93% rename from test/unit/infura-controller-test.js rename to test/unit/app/controllers/infura-controller-test.js index 605305efa..7bd95dd4b 100644 --- a/test/unit/infura-controller-test.js +++ b/test/unit/app/controllers/infura-controller-test.js @@ -1,6 +1,6 @@ const assert = require('assert') const sinon = require('sinon') -const InfuraController = require('../../app/scripts/controllers/infura') +const InfuraController = require('../../../../app/scripts/controllers/infura') describe('infura-controller', function () { let infuraController, sandbox, networkStatus @@ -8,7 +8,7 @@ describe('infura-controller', function () { before(async function () { infuraController = new InfuraController() - sandbox = sinon.sandbox.create() + sandbox = sinon.createSandbox() sinon.stub(infuraController, 'checkInfuraNetworkStatus').resolves(response) networkStatus = await infuraController.checkInfuraNetworkStatus() }) diff --git a/test/unit/app/controllers/metamask-controller-test.js b/test/unit/app/controllers/metamask-controller-test.js new file mode 100644 index 000000000..4bc16e65e --- /dev/null +++ b/test/unit/app/controllers/metamask-controller-test.js @@ -0,0 +1,550 @@ +const assert = require('assert') +const sinon = require('sinon') +const clone = require('clone') +const nock = require('nock') +const createThoughStream = require('through2').obj +const MetaMaskController = require('../../../../app/scripts/metamask-controller') +const blacklistJSON = require('eth-phishing-detect/src/config') +const firstTimeState = require('../../../../app/scripts/first-time-state') + +const currentNetworkId = 42 +const DEFAULT_LABEL = 'Account 1' +const TEST_SEED = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium' +const TEST_ADDRESS = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' +const TEST_SEED_ALT = 'setup olympic issue mobile velvet surge alcohol burger horse view reopen gentle' +const TEST_ADDRESS_ALT = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' + +describe('MetaMaskController', function () { + let metamaskController + const sandbox = sinon.createSandbox() + const noop = () => {} + + beforeEach(function () { + + nock('https://api.infura.io') + .persist() + .get('/v2/blacklist') + .reply(200, blacklistJSON) + + nock('https://api.infura.io') + .get('/v1/ticker/ethusd') + .reply(200, '{"base": "ETH", "quote": "USD", "bid": 288.45, "ask": 288.46, "volume": 112888.17569277, "exchange": "bitfinex", "total_volume": 272175.00106721005, "num_exchanges": 8, "timestamp": 1506444677}') + + nock('https://api.infura.io') + .get('/v1/ticker/ethjpy') + .reply(200, '{"base": "ETH", "quote": "JPY", "bid": 32300.0, "ask": 32400.0, "volume": 247.4616071, "exchange": "kraken", "total_volume": 247.4616071, "num_exchanges": 1, "timestamp": 1506444676}') + + nock('https://api.infura.io') + .persist() + .get(/.*/) + .reply(200) + + metamaskController = new MetaMaskController({ + showUnapprovedTx: noop, + showUnconfirmedMessage: noop, + encryptor: { + encrypt: function (password, object) { + this.object = object + return Promise.resolve() + }, + decrypt: function () { + return Promise.resolve(this.object) + }, + }, + initState: clone(firstTimeState), + }) + sandbox.spy(metamaskController.keyringController, 'createNewVaultAndKeychain') + sandbox.spy(metamaskController.keyringController, 'createNewVaultAndRestore') + }) + + afterEach(function () { + nock.cleanAll() + sandbox.restore() + }) + + describe('#getGasPrice', function () { + + it('gives the 50th percentile lowest accepted gas price from recentBlocksController', async function () { + const realRecentBlocksController = metamaskController.recentBlocksController + metamaskController.recentBlocksController = { + store: { + getState: () => { + return { + recentBlocks: [ + { gasPrices: [ '0x3b9aca00', '0x174876e800'] }, + { gasPrices: [ '0x3b9aca00', '0x174876e800'] }, + { gasPrices: [ '0x174876e800', '0x174876e800' ]}, + { gasPrices: [ '0x174876e800', '0x174876e800' ]}, + ], + } + }, + }, + } + + const gasPrice = metamaskController.getGasPrice() + assert.equal(gasPrice, '0x3b9aca00', 'accurately estimates 50th percentile accepted gas price') + + metamaskController.recentBlocksController = realRecentBlocksController + }) + }) + + describe('#createNewVaultAndKeychain', function () { + it('can only create new vault on keyringController once', async function () { + const selectStub = sandbox.stub(metamaskController, 'selectFirstIdentity') + + const password = 'a-fake-password' + + await metamaskController.createNewVaultAndKeychain(password) + await metamaskController.createNewVaultAndKeychain(password) + + assert(metamaskController.keyringController.createNewVaultAndKeychain.calledOnce) + + selectStub.reset() + }) + }) + + describe('#createNewVaultAndRestore', function () { + it('should be able to call newVaultAndRestore despite a mistake.', async function () { + const password = 'what-what-what' + await metamaskController.createNewVaultAndRestore(password, TEST_SEED.slice(0, -1)).catch((e) => null) + await metamaskController.createNewVaultAndRestore(password, TEST_SEED) + + assert(metamaskController.keyringController.createNewVaultAndRestore.calledTwice) + }) + + it('should clear previous identities after vault restoration', async () => { + await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED) + assert.deepEqual(metamaskController.getState().identities, { + [TEST_ADDRESS]: { address: TEST_ADDRESS, name: DEFAULT_LABEL }, + }) + + await metamaskController.preferencesController.setAccountLabel(TEST_ADDRESS, 'Account Foo') + assert.deepEqual(metamaskController.getState().identities, { + [TEST_ADDRESS]: { address: TEST_ADDRESS, name: 'Account Foo' }, + }) + + await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) + assert.deepEqual(metamaskController.getState().identities, { + [TEST_ADDRESS_ALT]: { address: TEST_ADDRESS_ALT, name: DEFAULT_LABEL }, + }) + }) + }) + + describe('#getApi', function () { + let getApi, state + + beforeEach(function () { + getApi = metamaskController.getApi() + }) + + it('getState', function (done) { + getApi.getState((err, res) => { + if (err) { + done(err) + } else { + state = res + } + }) + assert.deepEqual(state, metamaskController.getState()) + done() + }) + + }) + + describe('preferencesController', function () { + + it('defaults useBlockie to false', function () { + assert.equal(metamaskController.preferencesController.store.getState().useBlockie, false) + }) + + it('setUseBlockie to true', function () { + metamaskController.setUseBlockie(true, noop) + assert.equal(metamaskController.preferencesController.store.getState().useBlockie, true) + }) + + }) + + describe('#selectFirstIdentity', function () { + let identities, address + + beforeEach(function () { + address = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' + identities = { + '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': { + 'address': address, + 'name': 'Account 1', + }, + '0xc42edfcc21ed14dda456aa0756c153f7985d8813': { + 'address': '0xc42edfcc21ed14dda456aa0756c153f7985d8813', + 'name': 'Account 2', + }, + } + metamaskController.preferencesController.store.updateState({ identities }) + metamaskController.selectFirstIdentity() + }) + + it('changes preferences controller select address', function () { + const preferenceControllerState = metamaskController.preferencesController.store.getState() + assert.equal(preferenceControllerState.selectedAddress, address) + }) + + it('changes metamask controller selected address', function () { + const metamaskState = metamaskController.getState() + assert.equal(metamaskState.selectedAddress, address) + }) + }) + + describe('#setCustomRpc', function () { + const customRPC = 'https://custom.rpc/' + let rpcTarget + + beforeEach(function () { + + nock('https://custom.rpc') + .post('/') + .reply(200) + + rpcTarget = metamaskController.setCustomRpc(customRPC) + }) + + afterEach(function () { + nock.cleanAll() + }) + + it('returns custom RPC that when called', async function () { + assert.equal(await rpcTarget, customRPC) + }) + + it('changes the network controller rpc', function () { + const networkControllerState = metamaskController.networkController.store.getState() + assert.equal(networkControllerState.provider.rpcTarget, customRPC) + }) + }) + + describe('#setCurrentCurrency', function () { + let defaultMetaMaskCurrency + + beforeEach(function () { + defaultMetaMaskCurrency = metamaskController.currencyController.getCurrentCurrency() + }) + + it('defaults to usd', function () { + assert.equal(defaultMetaMaskCurrency, 'usd') + }) + + it('sets currency to JPY', function () { + metamaskController.setCurrentCurrency('JPY', noop) + assert.equal(metamaskController.currencyController.getCurrentCurrency(), 'JPY') + }) + }) + + describe('#createShapeshifttx', function () { + let depositAddress, depositType, shapeShiftTxList + + beforeEach(function () { + nock('https://shapeshift.io') + .get('/txStat/3EevLFfB4H4XMWQwYCgjLie1qCAGpd2WBc') + .reply(200, '{"status": "no_deposits", "address": "3EevLFfB4H4XMWQwYCgjLie1qCAGpd2WBc"}') + + depositAddress = '3EevLFfB4H4XMWQwYCgjLie1qCAGpd2WBc' + depositType = 'ETH' + shapeShiftTxList = metamaskController.shapeshiftController.store.getState().shapeShiftTxList + }) + + it('creates a shapeshift tx', async function () { + metamaskController.createShapeShiftTx(depositAddress, depositType) + assert.equal(shapeShiftTxList[0].depositAddress, depositAddress) + }) + + }) + + describe('#addNewAccount', function () { + let addNewAccount + + beforeEach(function () { + addNewAccount = metamaskController.addNewAccount() + }) + + it('errors when an primary keyring is does not exist', async function () { + try { + await addNewAccount + assert.equal(1 === 0) + } catch (e) { + assert.equal(e.message, 'MetamaskController - No HD Key Tree found') + } + }) + }) + + describe('#verifyseedPhrase', function () { + let seedPhrase, getConfigSeed + + it('errors when no keying is provided', async function () { + try { + await metamaskController.verifySeedPhrase() + } catch (error) { + assert.equal(error.message, 'MetamaskController - No HD Key Tree found') + } + }) + + beforeEach(async function () { + await metamaskController.createNewVaultAndKeychain('password') + seedPhrase = await metamaskController.verifySeedPhrase() + }) + + it('#placeSeedWords should match the initially created vault seed', function () { + + metamaskController.placeSeedWords((err, result) => { + if (err) { + console.log(err) + } else { + getConfigSeed = metamaskController.configManager.getSeedWords() + assert.equal(result, seedPhrase) + assert.equal(result, getConfigSeed) + } + }) + assert.equal(getConfigSeed, undefined) + }) + + it('#addNewAccount', async function () { + await metamaskController.addNewAccount() + const getAccounts = await metamaskController.keyringController.getAccounts() + assert.equal(getAccounts.length, 2) + }) + }) + + describe('#resetAccount', function () { + + beforeEach(function () { + const selectedAddressStub = sinon.stub(metamaskController.preferencesController, 'getSelectedAddress') + const getNetworkstub = sinon.stub(metamaskController.txController.txStateManager, 'getNetwork') + + selectedAddressStub.returns('0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc') + getNetworkstub.returns(42) + + metamaskController.txController.txStateManager._saveTxList([ + { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {from: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc'} }, + { id: 2, status: 'rejected', metamaskNetworkId: 32, txParams: {} }, + { id: 3, status: 'submitted', metamaskNetworkId: currentNetworkId, txParams: {from: '0xB09d8505E1F4EF1CeA089D47094f5DD3464083d4'} }, + ]) + }) + + it('wipes transactions from only the correct network id and with the selected address', async function () { + await metamaskController.resetAccount() + assert.equal(metamaskController.txController.txStateManager.getTx(1), undefined) + }) + }) + + describe('#clearSeedWordCache', function () { + + it('should have set seed words', function () { + metamaskController.configManager.setSeedWords('test words') + const getConfigSeed = metamaskController.configManager.getSeedWords() + assert.equal(getConfigSeed, 'test words') + }) + + it('should clear config seed phrase', function () { + metamaskController.configManager.setSeedWords('test words') + metamaskController.clearSeedWordCache((err, result) => { + if (err) console.log(err) + }) + const getConfigSeed = metamaskController.configManager.getSeedWords() + assert.equal(getConfigSeed, null) + }) + + }) + + describe('#setCurrentLocale', function () { + + it('checks the default currentLocale', function () { + const preferenceCurrentLocale = metamaskController.preferencesController.store.getState().currentLocale + assert.equal(preferenceCurrentLocale, undefined) + }) + + it('sets current locale in preferences controller', function () { + metamaskController.setCurrentLocale('ja', noop) + const preferenceCurrentLocale = metamaskController.preferencesController.store.getState().currentLocale + assert.equal(preferenceCurrentLocale, 'ja') + }) + + }) + + describe('#newUnsignedMessage', function () { + + let msgParams, metamaskMsgs, messages, msgId + + const address = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' + const data = '0x43727970746f6b697474696573' + + beforeEach(async function () { + + await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) + + msgParams = { + 'from': address, + 'data': data, + } + + metamaskController.newUnsignedMessage(msgParams, noop) + metamaskMsgs = metamaskController.messageManager.getUnapprovedMsgs() + messages = metamaskController.messageManager.messages + msgId = Object.keys(metamaskMsgs)[0] + messages[0].msgParams.metamaskId = parseInt(msgId) + }) + + it('persists address from msg params', function () { + assert.equal(metamaskMsgs[msgId].msgParams.from, address) + }) + + it('persists data from msg params', function () { + assert.equal(metamaskMsgs[msgId].msgParams.data, data) + }) + + it('sets the status to unapproved', function () { + assert.equal(metamaskMsgs[msgId].status, 'unapproved') + }) + + it('sets the type to eth_sign', function () { + assert.equal(metamaskMsgs[msgId].type, 'eth_sign') + }) + + it('rejects the message', function () { + const msgIdInt = parseInt(msgId) + metamaskController.cancelMessage(msgIdInt, noop) + assert.equal(messages[0].status, 'rejected') + }) + + it('errors when signing a message', async function () { + try { + await metamaskController.signMessage(messages[0].msgParams) + } catch (error) { + assert.equal(error.message, 'message length is invalid') + } + }) + }) + + describe('#newUnsignedPersonalMessage', function () { + + it('errors with no from in msgParams', function () { + const msgParams = { + 'data': data, + } + metamaskController.newUnsignedPersonalMessage(msgParams, function (error) { + assert.equal(error.message, 'MetaMask Message Signature: from field is required.') + }) + }) + + let msgParams, metamaskPersonalMsgs, personalMessages, msgId + + const address = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' + const data = '0x43727970746f6b697474696573' + + beforeEach(async function () { + + await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) + + msgParams = { + 'from': address, + 'data': data, + } + + metamaskController.newUnsignedPersonalMessage(msgParams, noop) + metamaskPersonalMsgs = metamaskController.personalMessageManager.getUnapprovedMsgs() + personalMessages = metamaskController.personalMessageManager.messages + msgId = Object.keys(metamaskPersonalMsgs)[0] + personalMessages[0].msgParams.metamaskId = parseInt(msgId) + }) + + it('persists address from msg params', function () { + assert.equal(metamaskPersonalMsgs[msgId].msgParams.from, address) + }) + + it('persists data from msg params', function () { + assert.equal(metamaskPersonalMsgs[msgId].msgParams.data, data) + }) + + it('sets the status to unapproved', function () { + assert.equal(metamaskPersonalMsgs[msgId].status, 'unapproved') + }) + + it('sets the type to personal_sign', function () { + assert.equal(metamaskPersonalMsgs[msgId].type, 'personal_sign') + }) + + it('rejects the message', function () { + const msgIdInt = parseInt(msgId) + metamaskController.cancelPersonalMessage(msgIdInt, noop) + assert.equal(personalMessages[0].status, 'rejected') + }) + + it('errors when signing a message', async function () { + await metamaskController.signPersonalMessage(personalMessages[0].msgParams) + assert.equal(metamaskPersonalMsgs[msgId].status, 'signed') + assert.equal(metamaskPersonalMsgs[msgId].rawSig, '0x6a1b65e2b8ed53cf398a769fad24738f9fbe29841fe6854e226953542c4b6a173473cb152b6b1ae5f06d601d45dd699a129b0a8ca84e78b423031db5baa734741b') + }) + }) + + describe('#setupUntrustedCommunication', function () { + let streamTest + + const phishingUrl = 'decentral.market' + + afterEach(function () { + streamTest.end() + }) + + it('sets up phishing stream for untrusted communication ', async function () { + await metamaskController.blacklistController.updatePhishingList() + + streamTest = createThoughStream((chunk, enc, cb) => { + assert.equal(chunk.name, 'phishing') + assert.equal(chunk.data.hostname, phishingUrl) + cb() + }) + // console.log(streamTest) + metamaskController.setupUntrustedCommunication(streamTest, phishingUrl) + }) + }) + + describe('#setupTrustedCommunication', function () { + let streamTest + + afterEach(function () { + streamTest.end() + }) + + it('sets up controller dnode api for trusted communication', function (done) { + streamTest = createThoughStream((chunk, enc, cb) => { + assert.equal(chunk.name, 'controller') + cb() + done() + }) + + metamaskController.setupTrustedCommunication(streamTest, 'mycrypto.com') + }) + }) + + describe('#markAccountsFound', function () { + it('adds lost accounts to config manager data', function () { + metamaskController.markAccountsFound(noop) + const configManagerData = metamaskController.configManager.getData() + assert.deepEqual(configManagerData.lostAccounts, []) + }) + }) + + describe('#markPasswordForgotten', function () { + it('adds and sets forgottenPassword to config data to true', function () { + metamaskController.markPasswordForgotten(noop) + const configManagerData = metamaskController.configManager.getData() + assert.equal(configManagerData.forgottenPassword, true) + }) + }) + + describe('#unMarkPasswordForgotten', function () { + it('adds and sets forgottenPassword to config data to false', function () { + metamaskController.unMarkPasswordForgotten(noop) + const configManagerData = metamaskController.configManager.getData() + assert.equal(configManagerData.forgottenPassword, false) + }) + }) + +}) diff --git a/test/unit/network-contoller-test.js b/test/unit/app/controllers/network-contoller-test.js similarity index 92% rename from test/unit/network-contoller-test.js rename to test/unit/app/controllers/network-contoller-test.js index 2d590a3f6..789850ef3 100644 --- a/test/unit/network-contoller-test.js +++ b/test/unit/app/controllers/network-contoller-test.js @@ -1,11 +1,11 @@ const assert = require('assert') const nock = require('nock') -const NetworkController = require('../../app/scripts/controllers/network') +const NetworkController = require('../../../../app/scripts/controllers/network') const { getNetworkDisplayName, -} = require('../../app/scripts/controllers/network/util') +} = require('../../../../app/scripts/controllers/network/util') -const { createTestProviderTools } = require('../stub/provider') +const { createTestProviderTools } = require('../../../stub/provider') const providerResultStub = {} describe('# Network Controller', function () { diff --git a/test/unit/notice-controller-test.js b/test/unit/app/controllers/notice-controller-test.js similarity index 96% rename from test/unit/notice-controller-test.js rename to test/unit/app/controllers/notice-controller-test.js index 09eeda15c..e78b69623 100644 --- a/test/unit/notice-controller-test.js +++ b/test/unit/app/controllers/notice-controller-test.js @@ -1,6 +1,6 @@ const assert = require('assert') -const configManagerGen = require('../lib/mock-config-manager') -const NoticeController = require('../../app/scripts/notice-controller') +const configManagerGen = require('../../../lib/mock-config-manager') +const NoticeController = require('../../../../app/scripts/notice-controller') describe('notice-controller', function () { var noticeController diff --git a/test/unit/preferences-controller-test.js b/test/unit/app/controllers/preferences-controller-test.js similarity index 98% rename from test/unit/preferences-controller-test.js rename to test/unit/app/controllers/preferences-controller-test.js index c613c68f9..e5e751b57 100644 --- a/test/unit/preferences-controller-test.js +++ b/test/unit/app/controllers/preferences-controller-test.js @@ -1,5 +1,5 @@ const assert = require('assert') -const PreferencesController = require('../../app/scripts/controllers/preferences') +const PreferencesController = require('../../../../app/scripts/controllers/preferences') describe('preferences controller', function () { let preferencesController diff --git a/test/unit/token-rates-controller.js b/test/unit/app/controllers/token-rates-controller.js similarity index 92% rename from test/unit/token-rates-controller.js rename to test/unit/app/controllers/token-rates-controller.js index a49547313..28e583d8d 100644 --- a/test/unit/token-rates-controller.js +++ b/test/unit/app/controllers/token-rates-controller.js @@ -1,6 +1,6 @@ const assert = require('assert') const sinon = require('sinon') -const TokenRatesController = require('../../app/scripts/controllers/token-rates') +const TokenRatesController = require('../../../../app/scripts/controllers/token-rates') const ObservableStore = require('obs-store') describe('TokenRatesController', () => { diff --git a/test/unit/nonce-tracker-test.js b/test/unit/app/controllers/transactions/nonce-tracker-test.js similarity index 98% rename from test/unit/nonce-tracker-test.js rename to test/unit/app/controllers/transactions/nonce-tracker-test.js index cf26945d3..fc852458c 100644 --- a/test/unit/nonce-tracker-test.js +++ b/test/unit/app/controllers/transactions/nonce-tracker-test.js @@ -1,6 +1,6 @@ const assert = require('assert') -const NonceTracker = require('../../app/scripts/controllers/transactions/nonce-tracker') -const MockTxGen = require('../lib/mock-tx-gen') +const NonceTracker = require('../../../../../app/scripts/controllers/transactions/nonce-tracker') +const MockTxGen = require('../../../../lib/mock-tx-gen') let providerResultStub = {} describe('Nonce Tracker', function () { diff --git a/test/unit/pending-tx-test.js b/test/unit/app/controllers/transactions/pending-tx-test.js similarity index 97% rename from test/unit/pending-tx-test.js rename to test/unit/app/controllers/transactions/pending-tx-test.js index 001b86dd1..e7705c594 100644 --- a/test/unit/pending-tx-test.js +++ b/test/unit/app/controllers/transactions/pending-tx-test.js @@ -3,9 +3,9 @@ const ethUtil = require('ethereumjs-util') const EthTx = require('ethereumjs-tx') const ObservableStore = require('obs-store') const clone = require('clone') -const { createTestProviderTools } = require('../stub/provider') -const PendingTransactionTracker = require('../../app/scripts/controllers/transactions/pending-tx-tracker') -const MockTxGen = require('../lib/mock-tx-gen') +const { createTestProviderTools } = require('../../../../stub/provider') +const PendingTransactionTracker = require('../../../../../app/scripts/controllers/transactions/pending-tx-tracker') +const MockTxGen = require('../../../../lib/mock-tx-gen') const sinon = require('sinon') const noop = () => true const currentNetworkId = 42 @@ -294,7 +294,7 @@ describe('PendingTransactionTracker', function () { }) afterEach(() => { - pendingTxTracker.publishTransaction.reset() + pendingTxTracker.publishTransaction.restore() }) it('should publish the transaction', function (done) { diff --git a/test/unit/tx-controller-test.js b/test/unit/app/controllers/transactions/tx-controller-test.js similarity index 98% rename from test/unit/tx-controller-test.js rename to test/unit/app/controllers/transactions/tx-controller-test.js index 0b5c7226a..1f32a0f37 100644 --- a/test/unit/tx-controller-test.js +++ b/test/unit/app/controllers/transactions/tx-controller-test.js @@ -4,9 +4,9 @@ const EthTx = require('ethereumjs-tx') const EthjsQuery = require('ethjs-query') const ObservableStore = require('obs-store') const sinon = require('sinon') -const TransactionController = require('../../app/scripts/controllers/transactions') -const TxGasUtils = require('../../app/scripts/controllers/transactions/tx-gas-utils') -const { createTestProviderTools, getTestAccounts } = require('../stub/provider') +const TransactionController = require('../../../../../app/scripts/controllers/transactions') +const TxGasUtils = require('../../../../../app/scripts/controllers/transactions/tx-gas-utils') +const { createTestProviderTools, getTestAccounts } = require('../../../../stub/provider') const noop = () => true const currentNetworkId = 42 diff --git a/test/unit/tx-gas-util-test.js b/test/unit/app/controllers/transactions/tx-gas-util-test.js similarity index 93% rename from test/unit/tx-gas-util-test.js rename to test/unit/app/controllers/transactions/tx-gas-util-test.js index c1d5966da..d1ee86033 100644 --- a/test/unit/tx-gas-util-test.js +++ b/test/unit/app/controllers/transactions/tx-gas-util-test.js @@ -3,8 +3,8 @@ const Transaction = require('ethereumjs-tx') const BN = require('bn.js') -const { hexToBn, bnToHex } = require('../../app/scripts/lib/util') -const TxUtils = require('../../app/scripts/controllers/transactions/tx-gas-utils') +const { hexToBn, bnToHex } = require('../../../../../app/scripts/lib/util') +const TxUtils = require('../../../../../app/scripts/controllers/transactions/tx-gas-utils') describe('txUtils', function () { diff --git a/test/unit/tx-helper-test.js b/test/unit/app/controllers/transactions/tx-helper-test.js similarity index 88% rename from test/unit/tx-helper-test.js rename to test/unit/app/controllers/transactions/tx-helper-test.js index cc6543c30..ce54ef483 100644 --- a/test/unit/tx-helper-test.js +++ b/test/unit/app/controllers/transactions/tx-helper-test.js @@ -1,5 +1,5 @@ const assert = require('assert') -const txHelper = require('../../ui/lib/tx-helper') +const txHelper = require('../../../../../ui/lib/tx-helper') describe('txHelper', function () { it('always shows the oldest tx first', function () { diff --git a/test/unit/tx-state-history-helper-test.js b/test/unit/app/controllers/transactions/tx-state-history-helper-test.js similarity index 95% rename from test/unit/tx-state-history-helper-test.js rename to test/unit/app/controllers/transactions/tx-state-history-helper-test.js index 5ad014dbb..f4c3a6be1 100644 --- a/test/unit/tx-state-history-helper-test.js +++ b/test/unit/app/controllers/transactions/tx-state-history-helper-test.js @@ -1,6 +1,6 @@ const assert = require('assert') -const txStateHistoryHelper = require('../../app/scripts/controllers/transactions/lib/tx-state-history-helper') -const testVault = require('../data/v17-long-history.json') +const txStateHistoryHelper = require('../../../../../app/scripts/controllers/transactions/lib/tx-state-history-helper') +const testVault = require('../../../../data/v17-long-history.json') describe ('Transaction state history helper', function () { diff --git a/test/unit/tx-state-manager-test.js b/test/unit/app/controllers/transactions/tx-state-manager-test.js similarity index 98% rename from test/unit/tx-state-manager-test.js rename to test/unit/app/controllers/transactions/tx-state-manager-test.js index 179542f90..20bc08b94 100644 --- a/test/unit/tx-state-manager-test.js +++ b/test/unit/app/controllers/transactions/tx-state-manager-test.js @@ -1,8 +1,8 @@ const assert = require('assert') const clone = require('clone') const ObservableStore = require('obs-store') -const TxStateManager = require('../../app/scripts/controllers/transactions/tx-state-manager') -const txStateHistoryHelper = require('../../app/scripts/controllers/transactions/lib/tx-state-history-helper') +const TxStateManager = require('../../../../../app/scripts/controllers/transactions/tx-state-manager') +const txStateHistoryHelper = require('../../../../../app/scripts/controllers/transactions/lib/tx-state-history-helper') const noop = () => true describe('TransactionStateManager', function () { diff --git a/test/unit/tx-utils-test.js b/test/unit/app/controllers/transactions/tx-utils-test.js similarity index 97% rename from test/unit/tx-utils-test.js rename to test/unit/app/controllers/transactions/tx-utils-test.js index be16225ba..115127f85 100644 --- a/test/unit/tx-utils-test.js +++ b/test/unit/app/controllers/transactions/tx-utils-test.js @@ -1,5 +1,5 @@ const assert = require('assert') -const txUtils = require('../../app/scripts/controllers/transactions/lib/util') +const txUtils = require('../../../../../app/scripts/controllers/transactions/lib/util') describe('txUtils', function () { diff --git a/test/unit/edge-encryptor-test.js b/test/unit/app/edge-encryptor-test.js similarity index 97% rename from test/unit/edge-encryptor-test.js rename to test/unit/app/edge-encryptor-test.js index d3f014d74..cc9777389 100644 --- a/test/unit/edge-encryptor-test.js +++ b/test/unit/app/edge-encryptor-test.js @@ -1,6 +1,6 @@ const assert = require('assert') -const EdgeEncryptor = require('../../app/scripts/edge-encryptor') +const EdgeEncryptor = require('../../../app/scripts/edge-encryptor') var password = 'passw0rd1' var data = 'some random data' diff --git a/test/unit/message-manager-test.js b/test/unit/app/message-manager-test.js similarity index 97% rename from test/unit/message-manager-test.js rename to test/unit/app/message-manager-test.js index 5e7039841..36ef6c29f 100644 --- a/test/unit/message-manager-test.js +++ b/test/unit/app/message-manager-test.js @@ -1,5 +1,5 @@ const assert = require('assert') -const MessageManager = require('../../app/scripts/lib/message-manager') +const MessageManager = require('../../../app/scripts/lib/message-manager') describe('Message Manager', function () { let messageManager diff --git a/test/unit/nodeify-test.js b/test/unit/app/nodeify-test.js similarity index 92% rename from test/unit/nodeify-test.js rename to test/unit/app/nodeify-test.js index c7b127889..901603c8b 100644 --- a/test/unit/nodeify-test.js +++ b/test/unit/app/nodeify-test.js @@ -1,5 +1,5 @@ const assert = require('assert') -const nodeify = require('../../app/scripts/lib/nodeify') +const nodeify = require('../../../app/scripts/lib/nodeify') describe('nodeify', function () { var obj = { diff --git a/test/unit/pending-balance-test.js b/test/unit/app/pending-balance-test.js similarity index 94% rename from test/unit/pending-balance-test.js rename to test/unit/app/pending-balance-test.js index dc4c1c3e4..1418e4a4e 100644 --- a/test/unit/pending-balance-test.js +++ b/test/unit/app/pending-balance-test.js @@ -1,6 +1,6 @@ const assert = require('assert') -const PendingBalanceCalculator = require('../../app/scripts/lib/pending-balance-calculator') -const MockTxGen = require('../lib/mock-tx-gen') +const PendingBalanceCalculator = require('../../../app/scripts/lib/pending-balance-calculator') +const MockTxGen = require('../../lib/mock-tx-gen') const BN = require('ethereumjs-util').BN let providerResultStub = {} diff --git a/test/unit/personal-message-manager-test.js b/test/unit/app/personal-message-manager-test.js similarity index 97% rename from test/unit/personal-message-manager-test.js rename to test/unit/app/personal-message-manager-test.js index ec2f9a4d1..b07167bff 100644 --- a/test/unit/personal-message-manager-test.js +++ b/test/unit/app/personal-message-manager-test.js @@ -1,6 +1,6 @@ const assert = require('assert') -const PersonalMessageManager = require('../../app/scripts/lib/personal-message-manager') +const PersonalMessageManager = require('../../../app/scripts/lib/personal-message-manager') describe('Personal Message Manager', function () { let messageManager diff --git a/test/unit/seed-phrase-verifier-test.js b/test/unit/app/seed-phrase-verifier-test.js similarity index 95% rename from test/unit/seed-phrase-verifier-test.js rename to test/unit/app/seed-phrase-verifier-test.js index 4e314806b..b0da534da 100644 --- a/test/unit/seed-phrase-verifier-test.js +++ b/test/unit/app/seed-phrase-verifier-test.js @@ -1,9 +1,9 @@ const assert = require('assert') const clone = require('clone') const KeyringController = require('eth-keyring-controller') -const firstTimeState = require('../../app/scripts/first-time-state') -const seedPhraseVerifier = require('../../app/scripts/lib/seed-phrase-verifier') -const mockEncryptor = require('../lib/mock-encryptor') +const firstTimeState = require('../../../app/scripts/first-time-state') +const seedPhraseVerifier = require('../../../app/scripts/lib/seed-phrase-verifier') +const mockEncryptor = require('../../lib/mock-encryptor') describe('SeedPhraseVerifier', function () { diff --git a/test/unit/util-test.js b/test/unit/app/util-test.js similarity index 92% rename from test/unit/util-test.js rename to test/unit/app/util-test.js index 6da185b2c..670bc4d22 100644 --- a/test/unit/util-test.js +++ b/test/unit/app/util-test.js @@ -1,5 +1,5 @@ const assert = require('assert') -const { sufficientBalance } = require('../../app/scripts/lib/util') +const { sufficientBalance } = require('../../../app/scripts/lib/util') describe('SufficientBalance', function () { diff --git a/test/unit/metamask-controller-test.js b/test/unit/metamask-controller-test.js deleted file mode 100644 index 649b26e1e..000000000 --- a/test/unit/metamask-controller-test.js +++ /dev/null @@ -1,120 +0,0 @@ -const assert = require('assert') -const sinon = require('sinon') -const clone = require('clone') -const nock = require('nock') -const MetaMaskController = require('../../app/scripts/metamask-controller') -const blacklistJSON = require('../stub/blacklist') -const firstTimeState = require('../../app/scripts/first-time-state') - -const DEFAULT_LABEL = 'Account 1' -const TEST_SEED = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium' -const TEST_ADDRESS = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' -const TEST_SEED_ALT = 'setup olympic issue mobile velvet surge alcohol burger horse view reopen gentle' -const TEST_ADDRESS_ALT = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' - -describe('MetaMaskController', function () { - let metamaskController - const sandbox = sinon.sandbox.create() - const noop = () => { } - - beforeEach(function () { - - nock('https://api.infura.io') - .persist() - .get('/v2/blacklist') - .reply(200, blacklistJSON) - - nock('https://api.infura.io') - .persist() - .get(/.*/) - .reply(200) - - metamaskController = new MetaMaskController({ - showUnapprovedTx: noop, - encryptor: { - encrypt: function (password, object) { - this.object = object - return Promise.resolve() - }, - decrypt: function () { - return Promise.resolve(this.object) - }, - }, - initState: clone(firstTimeState), - }) - sandbox.spy(metamaskController.keyringController, 'createNewVaultAndKeychain') - sandbox.spy(metamaskController.keyringController, 'createNewVaultAndRestore') - }) - - afterEach(function () { - nock.cleanAll() - sandbox.restore() - }) - - describe('#getGasPrice', function () { - it('gives the 50th percentile lowest accepted gas price from recentBlocksController', async function () { - const realRecentBlocksController = metamaskController.recentBlocksController - metamaskController.recentBlocksController = { - store: { - getState: () => { - return { - recentBlocks: [ - { gasPrices: [ '0x3b9aca00', '0x174876e800'] }, - { gasPrices: [ '0x3b9aca00', '0x174876e800'] }, - { gasPrices: [ '0x174876e800', '0x174876e800' ]}, - { gasPrices: [ '0x174876e800', '0x174876e800' ]}, - ], - } - }, - }, - } - - const gasPrice = metamaskController.getGasPrice() - assert.equal(gasPrice, '0x3b9aca00', 'accurately estimates 50th percentile accepted gas price') - - metamaskController.recentBlocksController = realRecentBlocksController - }) - }) - - describe('#createNewVaultAndKeychain', function () { - it('can only create new vault on keyringController once', async function () { - const selectStub = sandbox.stub(metamaskController, 'selectFirstIdentity') - - const password = 'a-fake-password' - - await metamaskController.createNewVaultAndKeychain(password) - await metamaskController.createNewVaultAndKeychain(password) - - assert(metamaskController.keyringController.createNewVaultAndKeychain.calledOnce) - - selectStub.reset() - }) - }) - - describe('#createNewVaultAndRestore', function () { - it('should be able to call newVaultAndRestore despite a mistake.', async function () { - const password = 'what-what-what' - await metamaskController.createNewVaultAndRestore(password, TEST_SEED.slice(0, -1)).catch((e) => null) - await metamaskController.createNewVaultAndRestore(password, TEST_SEED) - - assert(metamaskController.keyringController.createNewVaultAndRestore.calledTwice) - }) - - it('should clear previous identities after vault restoration', async () => { - await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED) - assert.deepEqual(metamaskController.getState().identities, { - [TEST_ADDRESS]: { address: TEST_ADDRESS, name: DEFAULT_LABEL }, - }) - - await metamaskController.preferencesController.setAccountLabel(TEST_ADDRESS, 'Account Foo') - assert.deepEqual(metamaskController.getState().identities, { - [TEST_ADDRESS]: { address: TEST_ADDRESS, name: 'Account Foo' }, - }) - - await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) - assert.deepEqual(metamaskController.getState().identities, { - [TEST_ADDRESS_ALT]: { address: TEST_ADDRESS_ALT, name: DEFAULT_LABEL }, - }) - }) - }) -}) diff --git a/test/unit/migrations-test.js b/test/unit/migrations/migrations-test.js similarity index 81% rename from test/unit/migrations-test.js rename to test/unit/migrations/migrations-test.js index 5bad25a45..50afd9c2e 100644 --- a/test/unit/migrations-test.js +++ b/test/unit/migrations/migrations-test.js @@ -1,22 +1,22 @@ const assert = require('assert') const path = require('path') -const wallet1 = require(path.join('..', 'lib', 'migrations', '001.json')) -const vault4 = require(path.join('..', 'lib', 'migrations', '004.json')) +const wallet1 = require(path.join('..', '..', 'lib', 'migrations', '001.json')) +const vault4 = require(path.join('..', '..', 'lib', 'migrations', '004.json')) let vault5, vault6, vault7, vault8, vault9 // vault10, vault11 -const migration2 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '002')) -const migration3 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '003')) -const migration4 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '004')) -const migration5 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '005')) -const migration6 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '006')) -const migration7 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '007')) -const migration8 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '008')) -const migration9 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '009')) -const migration10 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '010')) -const migration11 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '011')) -const migration12 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '012')) -const migration13 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '013')) +const migration2 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '002')) +const migration3 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '003')) +const migration4 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '004')) +const migration5 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '005')) +const migration6 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '006')) +const migration7 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '007')) +const migration8 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '008')) +const migration9 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '009')) +const migration10 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '010')) +const migration11 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '011')) +const migration12 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '012')) +const migration13 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '013')) const oldTestRpc = 'https://rawtestrpc.metamask.io/' diff --git a/test/unit/migrator-test.js b/test/unit/migrations/migrator-test.js similarity index 90% rename from test/unit/migrator-test.js rename to test/unit/migrations/migrator-test.js index 4404e1dc4..a9374dff1 100644 --- a/test/unit/migrator-test.js +++ b/test/unit/migrations/migrator-test.js @@ -1,7 +1,7 @@ const assert = require('assert') const clone = require('clone') -const Migrator = require('../../app/scripts/lib/migrator/') -const liveMigrations = require('../../app/scripts/migrations/') +const Migrator = require('../../../app/scripts/lib/migrator/') +const liveMigrations = require('../../../app/scripts/migrations/') const stubMigrations = [ { version: 1, @@ -33,7 +33,7 @@ const versionedData = {meta: {version: 0}, data: {hello: 'world'}} const firstTimeState = { meta: { version: 0 }, - data: require('../../app/scripts/first-time-state'), + data: require('../../../app/scripts/first-time-state'), } describe('Migrator', () => { diff --git a/test/unit/nameForAccount_test.js b/test/unit/nameForAccount_test.js index 32af49e9d..9bb02c6bc 100644 --- a/test/unit/nameForAccount_test.js +++ b/test/unit/nameForAccount_test.js @@ -6,7 +6,7 @@ var contractNamer = require(path.join(__dirname, '..', '..', 'old-ui', 'lib', 'c describe('contractNamer', function () { beforeEach(function () { - this.sinon = sinon.sandbox.create() + this.sinon = sinon.createSandbox() }) afterEach(function () { diff --git a/test/unit/reducers/unlock_vault_test.js b/test/unit/reducers/unlock_vault_test.js index 2b7d70b2c..d66e8edbb 100644 --- a/test/unit/reducers/unlock_vault_test.js +++ b/test/unit/reducers/unlock_vault_test.js @@ -10,7 +10,7 @@ var reducers = require(path.join(__dirname, '..', '..', '..', 'ui', 'app', 'redu describe('#unlockMetamask(selectedAccount)', function () { beforeEach(function () { // sinon allows stubbing methods that are easily verified - this.sinon = sinon.sandbox.create() + this.sinon = sinon.createSandbox() }) afterEach(function () { diff --git a/test/unit/util_test.js b/test/unit/util_test.js index 59048975a..39473854f 100644 --- a/test/unit/util_test.js +++ b/test/unit/util_test.js @@ -10,7 +10,7 @@ describe('util', function () { for (var i = 0; i < 18; i++) { ethInWei += '0' } beforeEach(function () { - this.sinon = sinon.sandbox.create() + this.sinon = sinon.createSandbox() }) afterEach(function () {