aboutsummaryrefslogtreecommitdiffstats
path: root/test/unit
diff options
context:
space:
mode:
authorDan Finlay <dan@danfinlay.com>2017-02-22 06:25:47 +0800
committerDan Finlay <dan@danfinlay.com>2017-02-22 06:25:47 +0800
commit0584988688a471698e9b3ad05cb0597f0270ea9e (patch)
treebdcbb009636dcdea67abcc28238023dd8bf7e882 /test/unit
parent29f07238f443007a03c968349af4d3fca7e10522 (diff)
downloadtangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.tar
tangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.tar.gz
tangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.tar.bz2
tangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.tar.lz
tangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.tar.xz
tangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.tar.zst
tangerine-wallet-browser-0584988688a471698e9b3ad05cb0597f0270ea9e.zip
Move sigUtil and keyrings to external modules
These external modules now have their own test coverage and build enforcement. This allowed me to somewhat more easily add good tests around our personalSign strategy (held now in [eth-sig-util](https://github.com/flyswatter/eth-sig-util), and allow each of the keyrings to import that, etc.
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/keyrings/hd-test.js127
-rw-r--r--test/unit/keyrings/simple-test.js149
-rw-r--r--test/unit/personal-message-manager-test.js89
3 files changed, 89 insertions, 276 deletions
diff --git a/test/unit/keyrings/hd-test.js b/test/unit/keyrings/hd-test.js
deleted file mode 100644
index dfc0ec908..000000000
--- a/test/unit/keyrings/hd-test.js
+++ /dev/null
@@ -1,127 +0,0 @@
-const assert = require('assert')
-const extend = require('xtend')
-const HdKeyring = require('../../../app/scripts/keyrings/hd')
-
-// Sample account:
-const privKeyHex = 'b8a9c05beeedb25df85f8d641538cbffedf67216048de9c678ee26260eb91952'
-
-const sampleMnemonic = 'finish oppose decorate face calm tragic certain desk hour urge dinosaur mango'
-const firstAcct = '1c96099350f13d558464ec79b9be4445aa0ef579'
-const secondAcct = '1b00aed43a693f3a957f9feb5cc08afa031e37a0'
-
-describe('hd-keyring', function() {
-
- let keyring
- beforeEach(function() {
- keyring = new HdKeyring()
- })
-
- describe('constructor', function(done) {
- keyring = new HdKeyring({
- mnemonic: sampleMnemonic,
- numberOfAccounts: 2,
- })
-
- const accounts = keyring.getAccounts()
- .then((accounts) => {
- assert.equal(accounts[0], firstAcct)
- assert.equal(accounts[1], secondAcct)
- done()
- })
- })
-
- describe('Keyring.type', function() {
- it('is a class property that returns the type string.', function() {
- const type = HdKeyring.type
- assert.equal(typeof type, 'string')
- })
- })
-
- describe('#type', function() {
- it('returns the correct value', function() {
- const type = keyring.type
- const correct = HdKeyring.type
- assert.equal(type, correct)
- })
- })
-
- describe('#serialize empty wallets.', function() {
- it('serializes a new mnemonic', function() {
- keyring.serialize()
- .then((output) => {
- assert.equal(output.numberOfAccounts, 0)
- assert.equal(output.mnemonic, null)
- })
- })
- })
-
- describe('#deserialize a private key', function() {
- it('serializes what it deserializes', function(done) {
- keyring.deserialize({
- mnemonic: sampleMnemonic,
- numberOfAccounts: 1
- })
- .then(() => {
- assert.equal(keyring.wallets.length, 1, 'restores two accounts')
- return keyring.addAccounts(1)
- }).then(() => {
- return keyring.getAccounts()
- }).then((accounts) => {
- assert.equal(accounts[0], firstAcct)
- assert.equal(accounts[1], secondAcct)
- assert.equal(accounts.length, 2)
-
- return keyring.serialize()
- }).then((serialized) => {
- assert.equal(serialized.mnemonic, sampleMnemonic)
- done()
- })
- })
- })
-
- describe('#addAccounts', function() {
- describe('with no arguments', function() {
- it('creates a single wallet', function(done) {
- keyring.addAccounts()
- .then(() => {
- assert.equal(keyring.wallets.length, 1)
- done()
- })
- })
- })
-
- describe('with a numeric argument', function() {
- it('creates that number of wallets', function(done) {
- keyring.addAccounts(3)
- .then(() => {
- assert.equal(keyring.wallets.length, 3)
- done()
- })
- })
- })
- })
-
- describe('#getAccounts', function() {
- it('calls getAddress on each wallet', function(done) {
-
- // Push a mock wallet
- const desiredOutput = 'foo'
- keyring.wallets.push({
- getAddress() {
- return {
- toString() {
- return desiredOutput
- }
- }
- }
- })
-
- const output = keyring.getAccounts()
- .then((output) => {
- assert.equal(output[0], desiredOutput)
- assert.equal(output.length, 1)
- done()
- })
- })
- })
-})
diff --git a/test/unit/keyrings/simple-test.js b/test/unit/keyrings/simple-test.js
deleted file mode 100644
index ba7dd448a..000000000
--- a/test/unit/keyrings/simple-test.js
+++ /dev/null
@@ -1,149 +0,0 @@
-const assert = require('assert')
-const extend = require('xtend')
-const Web3 = require('web3')
-const web3 = new Web3()
-const ethUtil = require('ethereumjs-util')
-const SimpleKeyring = require('../../../app/scripts/keyrings/simple')
-const TYPE_STR = 'Simple Key Pair'
-
-// Sample account:
-const privKeyHex = 'b8a9c05beeedb25df85f8d641538cbffedf67216048de9c678ee26260eb91952'
-
-describe('simple-keyring', function() {
-
- let keyring
- beforeEach(function() {
- keyring = new SimpleKeyring()
- })
-
- describe('Keyring.type', function() {
- it('is a class property that returns the type string.', function() {
- const type = SimpleKeyring.type
- assert.equal(type, TYPE_STR)
- })
- })
-
- describe('#type', function() {
- it('returns the correct value', function() {
- const type = keyring.type
- assert.equal(type, TYPE_STR)
- })
- })
-
- describe('#serialize empty wallets.', function() {
- it('serializes an empty array', function(done) {
- keyring.serialize()
- .then((output) => {
- assert.deepEqual(output, [])
- done()
- })
- })
- })
-
- describe('#deserialize a private key', function() {
- it('serializes what it deserializes', function() {
- keyring.deserialize([privKeyHex])
- .then(() => {
- assert.equal(keyring.wallets.length, 1, 'has one wallet')
- const serialized = keyring.serialize()
- assert.equal(serialized[0], privKeyHex)
- })
- })
- })
-
- describe('#signMessage', function() {
- const address = '0x9858e7d8b79fc3e6d989636721584498926da38a'
- const message = '0x879a053d4800c6354e76c7985a865d2922c82fb5b3f4577b2fe08b998954f2e0'
- const privateKey = '0x7dd98753d7b4394095de7d176c58128e2ed6ee600abe97c9f6d9fd65015d9b18'
- const expectedResult = '0x28fcb6768e5110144a55b2e6ce9d1ea5a58103033632d272d2b5cf506906f7941a00b539383fd872109633d8c71c404e13dba87bc84166ee31b0e36061a69e161c'
-
- it('passes the dennis test', function(done) {
- keyring.deserialize([ privateKey ])
- .then(() => {
- return keyring.signMessage(address, message)
- })
- .then((result) => {
- assert.equal(result, expectedResult)
- done()
- })
- })
-
- it('reliably can decode messages it signs', function (done) {
-
- const message = 'hello there!'
- const msgHashHex = web3.sha3(message)
- let address
- let addresses = []
-
- keyring.deserialize([ privateKey ])
- .then(() => {
- keyring.addAccounts(9)
- })
- .then(() => {
- return keyring.getAccounts()
- })
- .then((addrs) => {
- addresses = addrs
- return Promise.all(addresses.map((address) => {
- return keyring.signMessage(address, msgHashHex)
- }))
- })
- .then((signatures) => {
-
- signatures.forEach((sgn, index) => {
- const address = addresses[index]
-
- var r = ethUtil.toBuffer(sgn.slice(0,66))
- var s = ethUtil.toBuffer('0x' + sgn.slice(66,130))
- var v = ethUtil.bufferToInt(ethUtil.toBuffer('0x' + sgn.slice(130,132)))
- var m = ethUtil.toBuffer(msgHashHex)
- var pub = ethUtil.ecrecover(m, v, r, s)
- var adr = '0x' + ethUtil.pubToAddress(pub).toString('hex')
-
- assert.equal(adr, address, 'recovers address from signature correctly')
- })
- done()
- })
- })
- })
-
- describe('#addAccounts', function() {
- describe('with no arguments', function() {
- it('creates a single wallet', function() {
- keyring.addAccounts()
- .then(() => {
- assert.equal(keyring.wallets.length, 1)
- })
- })
- })
-
- describe('with a numeric argument', function() {
- it('creates that number of wallets', function() {
- keyring.addAccounts(3)
- .then(() => {
- assert.equal(keyring.wallets.length, 3)
- })
- })
- })
- })
-
- describe('#getAccounts', function() {
- it('calls getAddress on each wallet', function(done) {
-
- // Push a mock wallet
- const desiredOutput = '0x18a3462427bcc9133bb46e88bcbe39cd7ef0e761'
- keyring.wallets.push({
- getAddress() {
- return ethUtil.toBuffer(desiredOutput)
- }
- })
-
- keyring.getAccounts()
- .then((output) => {
- assert.equal(output[0], desiredOutput)
- assert.equal(output.length, 1)
- done()
- })
- })
- })
-})
diff --git a/test/unit/personal-message-manager-test.js b/test/unit/personal-message-manager-test.js
new file mode 100644
index 000000000..657d5e675
--- /dev/null
+++ b/test/unit/personal-message-manager-test.js
@@ -0,0 +1,89 @@
+const assert = require('assert')
+const extend = require('xtend')
+const EventEmitter = require('events')
+
+const PersonalMessageManager = require('../../app/scripts/lib/personal-message-manager')
+
+describe('Transaction Manager', function() {
+ let messageManager
+
+ beforeEach(function() {
+ messageManager = new PersonalMessageManager()
+ })
+
+ describe('#getMsgList', function() {
+ it('when new should return empty array', function() {
+ var result = messageManager.messages
+ assert.ok(Array.isArray(result))
+ assert.equal(result.length, 0)
+ })
+ it('should also return transactions from local storage if any', function() {
+
+ })
+ })
+
+ describe('#addMsg', function() {
+ it('adds a Msg returned in getMsgList', function() {
+ var Msg = { id: 1, status: 'approved', metamaskNetworkId: 'unit test' }
+ messageManager.addMsg(Msg)
+ var result = messageManager.messages
+ assert.ok(Array.isArray(result))
+ assert.equal(result.length, 1)
+ assert.equal(result[0].id, 1)
+ })
+ })
+
+ describe('#setMsgStatusApproved', function() {
+ it('sets the Msg status to approved', function() {
+ var Msg = { id: 1, status: 'unapproved', metamaskNetworkId: 'unit test' }
+ messageManager.addMsg(Msg)
+ messageManager.setMsgStatusApproved(1)
+ var result = messageManager.messages
+ assert.ok(Array.isArray(result))
+ assert.equal(result.length, 1)
+ assert.equal(result[0].status, 'approved')
+ })
+ })
+
+ describe('#rejectMsg', function() {
+ it('sets the Msg status to rejected', function() {
+ var Msg = { id: 1, status: 'unapproved', metamaskNetworkId: 'unit test' }
+ messageManager.addMsg(Msg)
+ messageManager.rejectMsg(1)
+ var result = messageManager.messages
+ assert.ok(Array.isArray(result))
+ assert.equal(result.length, 1)
+ assert.equal(result[0].status, 'rejected')
+ })
+ })
+
+ describe('#_updateMsg', function() {
+ it('replaces the Msg with the same id', function() {
+ messageManager.addMsg({ id: '1', status: 'unapproved', metamaskNetworkId: 'unit test' })
+ messageManager.addMsg({ id: '2', status: 'approved', metamaskNetworkId: 'unit test' })
+ messageManager._updateMsg({ id: '1', status: 'blah', hash: 'foo', metamaskNetworkId: 'unit test' })
+ var result = messageManager.getMsg('1')
+ assert.equal(result.hash, 'foo')
+ })
+ })
+
+ describe('#getUnapprovedMsgs', function() {
+ it('returns unapproved Msgs in a hash', function() {
+ messageManager.addMsg({ id: '1', status: 'unapproved', metamaskNetworkId: 'unit test' })
+ messageManager.addMsg({ id: '2', status: 'approved', metamaskNetworkId: 'unit test' })
+ let result = messageManager.getUnapprovedMsgs()
+ assert.equal(typeof result, 'object')
+ assert.equal(result['1'].status, 'unapproved')
+ assert.equal(result['2'], undefined)
+ })
+ })
+
+ describe('#getMsg', function() {
+ it('returns a Msg with the requested id', function() {
+ messageManager.addMsg({ id: '1', status: 'unapproved', metamaskNetworkId: 'unit test' })
+ messageManager.addMsg({ id: '2', status: 'approved', metamaskNetworkId: 'unit test' })
+ assert.equal(messageManager.getMsg('1').status, 'unapproved')
+ assert.equal(messageManager.getMsg('2').status, 'approved')
+ })
+ })
+})