Skip to content
This repository has been archived by the owner on Mar 23, 2023. It is now read-only.

Commit

Permalink
Merge pull request #386 from j-a-m-l/debug-karma-electron
Browse files Browse the repository at this point in the history
Change Karma to use Electron for testing and add new tests
  • Loading branch information
j-a-m-l committed Nov 8, 2017
2 parents 29a249a + 15c1e01 commit 69c1f56
Show file tree
Hide file tree
Showing 12 changed files with 332 additions and 74 deletions.
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6.9.2
52 changes: 16 additions & 36 deletions client/app/src/accounts/account.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@
$scope,
$mdMedia,
gettextCatalog,
$mdTheming,
$mdThemingProvider,
$mdTheming,
$window,
$rootScope
) {
Expand Down Expand Up @@ -279,6 +279,7 @@
}
}, 2 * 1000)

// TODO Used in dashboard navbar and accountBox
self.selectLedgerAccount = function (account) {
if (!account && self.ledgerAccounts) {
account = self.ledgerAccounts[0]
Expand Down Expand Up @@ -601,19 +602,6 @@
})
}

self.myAccountsBalance = function () {
return (self.getAllAccounts().reduce(function (memo, acc) {
return memo + parseInt(acc.balance || 0)
}, 0) / 100000000).toFixed(2)
}

self.myAccountsCurrencyBalance = function () {
var balance = self.myAccountsBalance()
var currencyName = self.currency.name
var price = self.connectedPeer.market ? self.connectedPeer.market.price[currencyName] : 0
return balance * price
}

self.otherAccounts = function () {
return self.accounts.filter(function (account) {
return !account.virtual
Expand Down Expand Up @@ -841,22 +829,6 @@
})
}

self.refreshAccountBalances = function () {
networkService.getPrice()
var accounts = self.getAllAccounts()
for (var i in accounts) {
accountService
.refreshAccount(accounts[i])
.then(function (account) {
for (var j in accounts) {
if (accounts[j].address === account.address) {
accounts[j].balance = account.balance
}
}
})
}
}

self.toggleRefreshAccountsAutomatically = function () {
storageService.set('refreshAccountsAutomatically', self.refreshAccountsAutomatically, true)
}
Expand All @@ -869,6 +841,7 @@
* Select the current avatars
* @param menuId
*/
// TODO Used in dashboard navbar and accountBox
function selectAccount (account) {
var currentaddress = account.address
self.selected = accountService.getAccount(currentaddress)
Expand Down Expand Up @@ -1381,16 +1354,21 @@

function generateDarkTheme (themeName) {
var theme = themeName || self.network.theme
var properties = $mdTheming.$get().THEMES[theme]
var properties = $mdThemingProvider.$get().THEMES[theme]

var colors = properties.colors
var primary = colors.primary.name
var accent = colors.accent.name
var warn = colors.warn.name
var background = colors.background.name

$mdTheming.theme('dark').primaryPalette(primary).accentPalette(accent).warnPalette(warn).backgroundPalette(background).dark()
$mdTheming.$get().generateTheme('dark')
$mdThemingProvider.theme('dark')
.primaryPalette(primary)
.accentPalette(accent)
.warnPalette(warn)
.backgroundPalette(background)
.dark()
$mdThemingProvider.$get().generateTheme('dark')
}

// Compare vibrant colors from image with default material palette
Expand All @@ -1403,7 +1381,7 @@

var path = require('path')
var vibrant = require('node-vibrant')
var materialPalette = $mdTheming.$get().PALETTES
var materialPalette = $mdThemingProvider.$get().PALETTES

// check if it's an image url
var regExp = /\(([^)]+)\)/
Expand Down Expand Up @@ -1443,8 +1421,8 @@
accentColor = sortObj(vibrantRatio)[1]
}

$mdTheming.theme('dynamic').primaryPalette(primaryColor).accentPalette(accentColor)
$mdTheming.$get().generateTheme('dynamic')
$mdThemingProvider.theme('dynamic').primaryPalette(primaryColor).accentPalette(accentColor)
$mdThemingProvider.$get().generateTheme('dynamic')

callback('dynamic')
})
Expand Down Expand Up @@ -1804,6 +1782,7 @@
}

// Create a new cold account
// TODO Used in dashboard navbar and accountBox
function createAccount () {
var bip39 = require('bip39')
var data = { passphrase: bip39.generateMnemonic() }
Expand Down Expand Up @@ -1863,6 +1842,7 @@
})
}

// TODO Used in dashboard navbar and accountBox
function importAccount () {
var data = {
passphrase: ''
Expand Down
2 changes: 1 addition & 1 deletion client/app/src/accounts/account.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
*/
function AccountService ($q, $http, networkService, storageService, ledgerService, gettextCatalog) {
var self = this
var ark = require('arkjs')
var ark = require('../node_modules/arkjs')

self.defaultFees = {
'send': 10000000,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
}

self.isAddress = function (address) {
return require('arkjs').crypto.validateAddress(address)
return require('../node_modules/arkjs').crypto.validateAddress(address)
}

function existsIn (haystack, needle) {
Expand Down
38 changes: 33 additions & 5 deletions client/app/src/components/dashboard/account-box.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
'use strict'

/**
* NOTE This component uses the entire AccountController yet: it's the first
* step to refactor the `index.html`
* NOTE: This component still uses parts of the AccountController
*/

angular
Expand All @@ -13,12 +12,41 @@
bindings: {
accountCtrl: '='
},
controller: AccountBoxController
controller: ['$scope', 'networkService', 'accountService', AccountBoxController]
})

function AccountBoxController ($scope) {
function AccountBoxController ($scope, networkService, accountService) {
this.$onInit = () => {
this.ul = this.accountCtrl
// Alias that is used on the template
this.ac = this.accountCtrl
}

const UNIT = 100000000

this.myAccountsBalance = () => {
const total = this.accountCtrl.getAllAccounts().reduce( (sum, account) => {
return sum + parseInt(account.balance || 0)
}, 0)

return (total / UNIT).toFixed(2)
}

this.myAccountsCurrencyBalance = () => {
const market = this.accountCtrl.connectedPeer.market
const currencyName = this.accountCtrl.currency.name
const price = market ? market.price[currencyName] : 0

return this.myAccountsBalance() * price
}

this.refreshAccountBalances = () => {
networkService.getPrice()

this.accountCtrl.getAllAccounts().forEach( account => {
accountService
.refreshAccount(account)
.then( updated => account.balance = updated.balance )
})
}
}

Expand Down
20 changes: 10 additions & 10 deletions client/app/src/components/dashboard/account-box.html
Original file line number Diff line number Diff line change
@@ -1,50 +1,50 @@
<md-toolbar layout="row" md-scroll-shrink>
<div class="md-toolbar-tools">
<h2>
<translate>My Accounts</translate> {{$ctrl.ul.network.symbol}}{{$ctrl.ul.myAccountsBalance()}} / {{$ctrl.ul.myAccountsCurrencyBalance() | formatCurrency:$ctrl.ul}}
<translate>My Accounts</translate> {{$ctrl.ac.network.symbol}}{{$ctrl.myAccountsBalance()}} / {{$ctrl.myAccountsCurrencyBalance() | formatCurrency:$ctrl.ac}}
</h2>
<span flex></span>
<md-button class="share" ng-click="$ctrl.ul.refreshAccountBalances()" aria-label="Refresh balances">
<md-button class="share" ng-click="$ctrl.refreshAccountBalances()" aria-label="Refresh balances">
<md-icon md-font-library="material-icons">cached</md-icon>
</md-button>
</div>
</md-toolbar>
<div style="min-height: 100px; max-height: 300px; height: auto; border-radius:0 0 10px 10px" layout="column">
<md-toolbar class="md-hue-2">
<div class="md-toolbar-tools">
<md-button ng-click="$ctrl.ul.importAccount()">
<md-button ng-click="$ctrl.ac.importAccount()">
<md-icon>file_download</md-icon>
<translate>Import Account</translate>
</md-button>

<md-button ng-click="$ctrl.ul.createAccount()">
<md-button ng-click="$ctrl.ac.createAccount()">
<md-icon>account_box</md-icon>
<translate>Create Account</translate>
</md-button>
</div>
</md-toolbar>
<md-content style="min-height: 70px;" flex>
<md-list md-no-ink>
<md-list-item ng-click="$ctrl.ul.selectLedgerAccount()" ng-if="$ctrl.ul.ledger.connected">
<md-list-item ng-click="$ctrl.ac.selectLedgerAccount()" ng-if="$ctrl.ac.ledger.connected">
<span>
<md-icon md-svg-icon="ledger"></md-icon>
Ledger Nano S
</span>
<span class="md-secondary">
<md-progress-circular ng-if="!$ctrl.ul.ledgerAccounts" md-mode="indeterminate"></md-progress-circular>
<md-chip ng-if="$ctrl.ul.ledgerAccounts">{{$ctrl.ul.ledgerAccounts.length}} <translate>Accounts</translate></md-chip>
<md-progress-circular ng-if="!$ctrl.ac.ledgerAccounts" md-mode="indeterminate"></md-progress-circular>
<md-chip ng-if="$ctrl.ac.ledgerAccounts">{{$ctrl.ac.ledgerAccounts.length}} <translate>Accounts</translate></md-chip>
</span>
</md-list-item>

<md-list-item ng-click="$ctrl.ul.selectAccount(it)" ng-repeat="it in $ctrl.ul.myAccounts() track by $index">
<span ng-class="{'selected' : it.address === $ctrl.ul.selected.address }">
<md-list-item ng-click="$ctrl.ac.selectAccount(it)" ng-repeat="it in $ctrl.ac.myAccounts() track by $index">
<span ng-class="{'selected' : it.address === $ctrl.ac.selected.address }">
<md-icon ng-if="!it.delegate&&!it.cold" md-font-library="material-icons">account_balance</md-icon>
<md-icon ng-if="!it.delegate&&it.cold" md-font-library="material-icons">cloud_off</md-icon>
<md-icon ng-if="it.delegate" md-font-library="material-icons">security</md-icon>
{{it.username||it.address}} <span ng-if="it.delegate">({{it.delegate.rate}})</span>
</span>
<span class="md-secondary">
{{$ctrl.ul.network.symbol}}{{it.balance/100000000}}
{{$ctrl.ac.network.symbol}}{{it.balance/100000000}}
</span>
</md-list-item>
</md-list>
Expand Down
4 changes: 2 additions & 2 deletions client/app/src/services/ledger.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
*/
function LedgerService ($q, $http, $timeout, storageService, networkService) {
var ipcRenderer = require('electron').ipcRenderer
var arkjs = require('arkjs')
var bip39 = require('bip39')
var arkjs = require('../node_modules/arkjs')
var bip39 = require('../node_modules/bip39')
var async = require('async')

function deriveAddress (path) {
Expand Down
2 changes: 1 addition & 1 deletion client/app/src/services/network.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
if (!network) {
network = switchNetwork()
}
var ark = require('arkjs')
var ark = require('../node_modules/arkjs')
ark.crypto.setNetworkVersion(network.version || 23)

var clientVersion = require('../../package.json').version
Expand Down
21 changes: 13 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "ArkClient",
"version": "1.4.1",
"productName": "ArkClient",
"description": "Ark Desktop",
"description": "Ark Desktop Wallet",
"main": "main.js",
"scripts": {
"postinstall": "cd client && npm install && npm run bundle && cd .. && electron-builder install-app-deps && npm run rebuild",
Expand All @@ -27,9 +27,9 @@
"url": "git+https://github.com/ArkEcosystem/ark-desktop.git"
},
"keywords": [
"Electron",
"Ark",
"Client"
"Client",
"Electron"
],
"author": {
"name": "Fx Thoorens",
Expand All @@ -46,6 +46,11 @@
"name": "Lucio Rubens",
"email": "lucio@ark.io",
"url": "https://github.com/luciorubeens"
},
{
"name": "Juan A. Martín",
"email": "juan@ark.io",
"url": "https://github.com/j-a-m-l"
}
],
"license": "MIT",
Expand All @@ -64,9 +69,9 @@
"devDependencies": {
"angular-mocks": "^1.6.6",
"babel-core": "^6.26.0",
"babel-eslint": "^8.0.1",
"babel-preset-es2015": "^6.24.1",
"chai": "^4.1.2",
"babel-eslint": "^8.0.1",
"chai-as-promised": "^7.1.1",
"cross-env": "^5.0.5",
"devtron": "^1.4.0",
Expand All @@ -81,12 +86,12 @@
"karma": "^1.7.1",
"karma-babel-preprocessor": "^7.0.0",
"karma-coverage": "^1.1.1",
"karma-electron": "^5.2.1",
"karma-mocha": "^1.3.0",
"karma-phantomjs-launcher": "^1.0.4",
"karma-sinon": "^1.0.5",
"karma-sinon-chai": "^1.3.2",
"mocha": "^4.0.1",
"sinon": "^4.0.1",
"karma-sinon-chai": "^1.3.3",
"mocha": "3.5.3",
"sinon": "^4.1.1",
"sinon-chai": "^2.14.0",
"spectron": "^3.7.2",
"standard": "^10.0.3"
Expand Down
Loading

0 comments on commit 69c1f56

Please sign in to comment.