diff --git a/js/directives.js b/js/directives.js index 82704b104..555b78991 100644 --- a/js/directives.js +++ b/js/directives.js @@ -1,10 +1,12 @@ 'use strict'; +var bitcore = require('bitcore'); +var Address = bitcore.Address; +var bignum = bitcore.Bignum; +var preconditions = require('preconditions').singleton(); + angular.module('copayApp.directives') - .directive('validAddress', ['$rootScope', function($rootScope) { - var bitcore = require('bitcore'); - var Address = bitcore.Address; - var bignum = bitcore.Bignum; + irective('validAddress', ['$rootScope', function($rootScope) { return { require: 'ngModel', @@ -46,8 +48,10 @@ angular.module('copayApp.directives') }]) .directive('enoughAmount', ['$rootScope', function($rootScope) { - var bitcore = require('bitcore'); var w = $rootScope.wallet; + preconditions.checkState(w); + preconditions.checkState(w.settings.unitToSatoshi); + var feeSat = Number(bitcore.TransactionBuilder.FEE_PER_1000B_SAT); return { require: 'ngModel', @@ -271,7 +275,7 @@ angular.module('copayApp.directives') client.on('datarequested', function(client) { client.setText(scope.clipCopy); - } ); + }); client.on('complete', function(client, args) { elm.removeClass('btn-copy').addClass('btn-copied').html('Copied!'); diff --git a/test/mocks/FakeWallet.js b/test/mocks/FakeWallet.js index e4a7bc8d7..57aa5d2d2 100644 --- a/test/mocks/FakeWallet.js +++ b/test/mocks/FakeWallet.js @@ -6,11 +6,10 @@ if (is_browser) { } var Wallet = copay.Wallet; -var FakePrivateKey = function () { -}; +var FakePrivateKey = function() {}; FakePrivateKey.prototype.toObj = function() { - return extendedPublicKeyString = 'privHex'; + return extendedPublicKeyString = 'privHex'; }; var FakeWallet = function() { @@ -37,12 +36,20 @@ var FakeWallet = function() { } }; this.blockchain = { - getSubscriptions: function(){ return []; }, - subscribe: function(){} + getSubscriptions: function() { + return []; + }, + subscribe: function() {} }; this.privateKey = new FakePrivateKey(); - this.settings = {}; + this.settings = { + unitName: 'bits', + unitToSatoshi: 100, + unitDecimals: 2, + alternativeName: 'US Dollar', + alternativeIsoCode: 'USD', + }; }; FakeWallet.prototype.createTx = function(toAddress, amountSatStr, comment, opts, cb) { @@ -99,8 +106,7 @@ FakeWallet.prototype.getBalance = function(cb) { return cb(null, this.balance, this.balanceByAddr, this.safeBalance); }; -FakeWallet.prototype.removeTxWithSpentInputs = function (cb) { -}; +FakeWallet.prototype.removeTxWithSpentInputs = function(cb) {}; FakeWallet.prototype.setEnc = function(enc) { this.enc = enc; @@ -110,8 +116,7 @@ FakeWallet.prototype.toEncryptedObj = function() { return this.enc; }; -FakeWallet.prototype.close = function() { -}; +FakeWallet.prototype.close = function() {}; // TODO a try catch was here module.exports = FakeWallet; diff --git a/test/unit/directives/directivesSpec.js b/test/unit/directives/directivesSpec.js index e0a2b389e..87b8aab91 100644 --- a/test/unit/directives/directivesSpec.js +++ b/test/unit/directives/directivesSpec.js @@ -8,17 +8,23 @@ describe("Unit: Testing Directives", function() { beforeEach(module('copayApp.directives')); - beforeEach(function() { - config.unitToSatoshi = 100; - config.unitName = 'bits'; - }); + var walletConfig = { + requiredCopayers: 3, + totalCopayers: 5, + spendUnconfirmed: 1, + reconnectDelay: 100, + networkName: 'testnet', + alternativeName: 'lol currency', + alternativeIsoCode: 'LOL' + }; - describe('Check config', function() { - it('unit should be set to BITS in config.js', function() { - expect(config.unitToSatoshi).to.equal(100); - expect(config.unitName).to.equal('bits'); - }); - }); + + beforeEach(inject(function($rootScope) { + $rootScope.wallet = new FakeWallet(walletConfig); + var w = $rootScope.wallet; + w.settings.unitToSatoshi = 100; + w.settings.unitName = 'bits'; + })); describe('Validate Address', function() { beforeEach(inject(function($compile, $rootScope) { @@ -94,9 +100,12 @@ describe("Unit: Testing Directives", function() { describe('Unit: BTC', function() { beforeEach(inject(function($compile, $rootScope) { - config.unitToSatoshi = 100000000; - config.unitName = 'BTC'; $scope = $rootScope; + var w = new FakeWallet(walletConfig); + w.settings.unitToSatoshi = 100000000; + w.settings.unitName = 'BTC'; + $rootScope.wallet = w; + $rootScope.availableBalance = 0.04; var element = angular.element( '
' + diff --git a/test/unit/filters/filtersSpec.js b/test/unit/filters/filtersSpec.js index 38a7dc442..1f2e52809 100644 --- a/test/unit/filters/filtersSpec.js +++ b/test/unit/filters/filtersSpec.js @@ -5,6 +5,15 @@ describe('Unit: Testing Filters', function() { beforeEach(module('copayApp.filters')); + var walletConfig = { + requiredCopayers: 3, + totalCopayers: 5, + spendUnconfirmed: 1, + reconnectDelay: 100, + networkName: 'testnet', + alternativeName: 'lol currency', + alternativeIsoCode: 'LOL' + }; describe('limitAddress', function() { @@ -103,68 +112,76 @@ describe('Unit: Testing Filters', function() { })); }); - describe('noFractionNumber bits', function() { - beforeEach(function() { - config.unitToSatoshi = 100; - config.unitName = 'bits'; + describe('noFractionNumber', function() { + describe('noFractionNumber bits', function() { + beforeEach(inject(function($rootScope) { + $rootScope.wallet = new FakeWallet(walletConfig); + var w = $rootScope.wallet; + w.settings.unitToSatoshi = 100; + w.settings.unitName = 'bits'; + })); + it('should format number to display correctly', inject(function($filter) { + var noFraction = $filter('noFractionNumber'); + expect(noFraction(3100)).to.equal('3,100'); + expect(noFraction(3100200)).to.equal('3,100,200'); + expect(noFraction(3)).to.equal('3'); + expect(noFraction(0.3)).to.equal(0.3); + expect(noFraction(0.30000000)).to.equal(0.3); + expect(noFraction(3200.01)).to.equal('3,200.01'); + expect(noFraction(3200890.010000)).to.equal('3,200,890.01'); + })); }); - it('should format number to display correctly', inject(function($filter) { - var noFraction = $filter('noFractionNumber'); - expect(noFraction(3100)).to.equal('3,100'); - expect(noFraction(3100200)).to.equal('3,100,200'); - expect(noFraction(3)).to.equal('3'); - expect(noFraction(0.3)).to.equal(0.3); - expect(noFraction(0.30000000)).to.equal(0.3); - expect(noFraction(3200.01)).to.equal('3,200.01'); - expect(noFraction(3200890.010000)).to.equal('3,200,890.01'); - })); - }); - describe('noFractionNumber BTC', function() { - beforeEach(function() { - config.unitToSatoshi = 100000000; - config.unitName = 'BTC'; + describe('noFractionNumber BTC', function() { + beforeEach(inject(function($rootScope) { + $rootScope.wallet = new FakeWallet(walletConfig); + var w = $rootScope.wallet; + w.settings.unitToSatoshi = 100000000; + w.settings.unitName = 'BTC'; + })); + it('should format number to display correctly', inject(function($filter) { + var noFraction = $filter('noFractionNumber'); + expect(noFraction(0.30000000)).to.equal(0.3); + expect(noFraction(0.00302000)).to.equal(0.00302); + expect(noFraction(1.00000001)).to.equal(1.00000001); + expect(noFraction(3.10000012)).to.equal(3.10000012); + expect(noFraction(0.00100000)).to.equal(0.001); + expect(noFraction(0.00100009)).to.equal(0.00100009); + expect(noFraction(2000.00312011)).to.equal('2,000.00312011'); + expect(noFraction(2000998.00312011)).to.equal('2,000,998.00312011'); + })); }); - it('should format number to display correctly', inject(function($filter) { - var noFraction = $filter('noFractionNumber'); - expect(noFraction(0.30000000)).to.equal(0.3); - expect(noFraction(0.00302000)).to.equal(0.00302); - expect(noFraction(1.00000001)).to.equal(1.00000001); - expect(noFraction(3.10000012)).to.equal(3.10000012); - expect(noFraction(0.00100000)).to.equal(0.001); - expect(noFraction(0.00100009)).to.equal(0.00100009); - expect(noFraction(2000.00312011)).to.equal('2,000.00312011'); - expect(noFraction(2000998.00312011)).to.equal('2,000,998.00312011'); - })); - }); - describe('noFractionNumber mBTC', function() { - beforeEach(function() { - config.unitToSatoshi = 100000; - config.unitName = 'mBTC'; + describe('noFractionNumber mBTC', function() { + beforeEach(inject(function($rootScope) { + $rootScope.wallet = new FakeWallet(walletConfig); + var w = $rootScope.wallet; + w.settings.unitToSatoshi = 100000; + w.settings.unitName = 'mBTC'; + })); + it('should format number to display correctly', inject(function($filter) { + var noFraction = $filter('noFractionNumber'); + expect(noFraction(0.30000)).to.equal(0.3); + expect(noFraction(0.00302)).to.equal(0.00302); + expect(noFraction(1.00001)).to.equal(1.00001); + expect(noFraction(3.10002)).to.equal(3.10002); + expect(noFraction(0.00100000)).to.equal(0.001); + expect(noFraction(0.00100009)).to.equal(0.001); + expect(noFraction(2000.00312)).to.equal('2,000.00312'); + expect(noFraction(2000998.00312)).to.equal('2,000,998.00312'); + })); }); - it('should format number to display correctly', inject(function($filter) { - var noFraction = $filter('noFractionNumber'); - expect(noFraction(0.30000)).to.equal(0.3); - expect(noFraction(0.00302)).to.equal(0.00302); - expect(noFraction(1.00001)).to.equal(1.00001); - expect(noFraction(3.10002)).to.equal(3.10002); - expect(noFraction(0.00100000)).to.equal(0.001); - expect(noFraction(0.00100009)).to.equal(0.001); - expect(noFraction(2000.00312)).to.equal('2,000.00312'); - expect(noFraction(2000998.00312)).to.equal('2,000,998.00312'); - })); - }); - describe('noFractionNumber:custom fractionSize', function() { - it('should format number to display correctly', inject(function($filter) { - var noFraction = $filter('noFractionNumber'); - expect(noFraction(0.30000, 0)).to.equal('0'); - expect(noFraction(1.00001, 0)).to.equal('1'); - expect(noFraction(3.10002, 0)).to.equal('3'); - expect(noFraction(2000.00312, 0)).to.equal('2,000'); - expect(noFraction(2000998.00312, 0)).to.equal('2,000,998'); - })); - }); + describe('noFractionNumber:custom fractionSize', function() { + it('should format number to display correctly', inject(function($filter) { + var noFraction = $filter('noFractionNumber'); + expect(noFraction(0.30000, 0)).to.equal('0'); + expect(noFraction(1.00001, 0)).to.equal('1'); + expect(noFraction(3.10002, 0)).to.equal('3'); + expect(noFraction(2000.00312, 0)).to.equal('2,000'); + expect(noFraction(2000998.00312, 0)).to.equal('2,000,998'); + })); + }); + }); }); diff --git a/util/build.js b/util/build.js index 6f15143ef..b60af799b 100644 --- a/util/build.js +++ b/util/build.js @@ -15,7 +15,9 @@ var getCommitHash = function() { //exec git command to get the hash of the current commit //git rev-parse HEAD - var hash = shell.exec('git rev-parse HEAD',{silent:true}).output.trim().substr(0,7); + var hash = shell.exec('git rev-parse HEAD', { + silent: true + }).output.trim().substr(0, 7); return hash; } @@ -23,7 +25,7 @@ var createVersion = function() { var json = JSON.parse(fs.readFileSync('./package.json', 'utf8')); var content = 'module.exports.version="' + json.version + '";'; - content = content + '\nmodule.exports.commitHash="' + getCommitHash() + '";'; + content = content + '\nmodule.exports.commitHash="' + getCommitHash() + '";'; fs.writeFileSync("./version.js", content); }; @@ -43,9 +45,9 @@ var createBundle = function(opts) { b.require('browser-request', { expose: 'request' }); - b.require('underscore', { - expose: 'underscore' - }); + b.require('underscore'); + b.require('assert'); + b.require('preconditions'); b.require('./copay', { expose: 'copay' @@ -130,10 +132,10 @@ if (require.main === module) { }; var program = require('commander'); program - .version('0.0.1') - .option('-d, --debug', 'Development. Don\'t minify the codem and include debug packages.') - .option('-o, --stdout', 'Specify output as stdout') - .parse(process.argv); + .version('0.0.1') + .option('-d, --debug', 'Development. Don\'t minify the codem and include debug packages.') + .option('-o, --stdout', 'Specify output as stdout') + .parse(process.argv); createVersion(); var copayBundle = createBundle(program);