From 69570d870225ec8a554cdfb52834c465e95d6296 Mon Sep 17 00:00:00 2001 From: febbweiss Date: Fri, 9 Oct 2015 12:59:38 +0000 Subject: [PATCH] Feature: add account switch --- karma.conf.js | 2 +- public/account/account.controller.js | 25 ++++++--- public/accounts/accounts.controller.js | 4 +- public/index.html | 28 +++++++---- public/js/global.controller.js | 26 ++++++++++ test/account.controller.spec.js | 70 +++++++++++++++++++++++--- test/global.controller.spec.js | 43 ++++++++++++++++ test/home.controller.spec.js | 2 +- 8 files changed, 173 insertions(+), 27 deletions(-) create mode 100644 public/js/global.controller.js create mode 100644 test/global.controller.spec.js diff --git a/karma.conf.js b/karma.conf.js index 859ba7f..f3713e9 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -37,7 +37,7 @@ module.exports = function(config) { // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { - 'public/js/**/*.js': ['coverage'], + 'public/js/**/!(global.controller).js': ['coverage'], 'public/**/*.controller.js': ['coverage'], }, diff --git a/public/account/account.controller.js b/public/account/account.controller.js index 9d406f0..75cec2f 100644 --- a/public/account/account.controller.js +++ b/public/account/account.controller.js @@ -12,7 +12,7 @@ if( !input ) { return ''; } - var category = categories.filter(function(elt, idx) { + var category = categories.filter(function(elt) { return elt._id === input; }); if( category.length > 0 ) { @@ -28,7 +28,7 @@ return ''; } - var category = categories.filter(function(elt, idx) { + var category = categories.filter(function(elt) { return elt._id === category_id; })[0]; @@ -36,7 +36,7 @@ return ''; } - var res = category.sub_categories.filter( function(elt, idx) { + var res = category.sub_categories.filter( function(elt) { return elt._id === input; }); if( res.length === 1 ) { @@ -47,9 +47,9 @@ }; } - AccountController.$inject = ['$scope', '$location', '$routeParams', 'FlashService', 'AccountService']; + AccountController.$inject = ['$scope', '$rootScope', '$routeParams', 'FlashService', 'AccountsService', 'AccountService']; - function AccountController($scope, $location, $routeParams, FlashService, AccountService) { + function AccountController($scope, $rootScope, $routeParams, FlashService, AccountsService, AccountService) { var vm = this; $scope.calendar = { @@ -62,13 +62,14 @@ $scope.calendar.opened[which] = true; } }; - + vm.dataLoading = false; + vm.accounts = undefined; + vm.account = undefined; vm.entries = []; vm.balance = undefined; vm.categories = []; vm.sub_categories = []; - vm.account = undefined; vm.create = create; vm.drop = drop; vm.edit = edit; @@ -77,6 +78,8 @@ vm.disabledSubCategories = false; vm.edit_sub_categories = []; + $rootScope.current_account = $routeParams.account_id; + (function init() { vm.dataLoading = true; AccountService.details($routeParams.account_id) @@ -99,6 +102,14 @@ FlashService.error(response.message); } }); + AccountsService.list() + .then(function(response) { + if( response.success ) { + $rootScope.accounts = response.accounts + } else { + FlashService.error(response.message); + } + }); })(); function create() { diff --git a/public/accounts/accounts.controller.js b/public/accounts/accounts.controller.js index f0475de..ac0b18d 100644 --- a/public/accounts/accounts.controller.js +++ b/public/accounts/accounts.controller.js @@ -5,9 +5,9 @@ .module('cloudbudget') .controller('AccountsController', AccountsController); - AccountsController.$inject = ['$scope', '$location', '$rootScope', 'FlashService', 'AccountsService']; + AccountsController.$inject = ['$scope', '$location', 'FlashService', 'AccountsService']; - function AccountsController($scope, $location, $rootScope, FlashService, AccountsService) { + function AccountsController($scope, $location, FlashService, AccountsService) { var vm = this; vm.dataLoading = false; diff --git a/public/index.html b/public/index.html index d3ffeb3..ee55340 100644 --- a/public/index.html +++ b/public/index.html @@ -14,20 +14,29 @@ - -
-
-
+ + + +
@@ -55,6 +64,7 @@ + diff --git a/public/js/global.controller.js b/public/js/global.controller.js new file mode 100644 index 0000000..bb0aa3e --- /dev/null +++ b/public/js/global.controller.js @@ -0,0 +1,26 @@ +(function() { + 'use strict'; + + angular + .module('cloudbudget') + .controller('GlobalController', GlobalController); + + GlobalController.$inject = ['$scope', '$rootScope', '$location']; + + function GlobalController($scope, $rootScope, $location) { + var vm = this; + + vm.change_account = change_account; + vm.current_account = undefined; + + $scope.$watch(function() { + return $rootScope.current_account; + }, function() { + vm.current_account = $rootScope.current_account; + }, true); + + function change_account() { + $location.path('/account/' + vm.current_account); + }; + } +})(); \ No newline at end of file diff --git a/test/account.controller.spec.js b/test/account.controller.spec.js index 1cfb410..f472214 100644 --- a/test/account.controller.spec.js +++ b/test/account.controller.spec.js @@ -48,14 +48,26 @@ describe('AccountController', function() { "type": "DEPOSIT", "category": "560a84058812ad8d0ff200f0", "sub_category": "560a84058812ad8d0ff200f3" - }; + }, + DEFAULT_ACCOUNTS = [ + { + "_id": "560a84058812ad8d0ff200ee", + "name": "foo", + "reference": "baz", + "user_id": "55b78934d2a706265ea28e9c" + }, { + "_id": "560a7ad08812ad8d0ff20068", + "name": "bar", + "user_id": "55b78934d2a706265ea28e9c" + } + ]; beforeEach(module('cloudbudget')); - beforeEach(inject(function ( _$rootScope_, _$httpBackend_, $controller, _$location_, $routeParams, _$timeout_, _$filter_, _AccountService_, _FlashService_, _apiRoutes_) { + beforeEach(inject(function ( _$rootScope_, _$httpBackend_, $controller, _$location_, _$timeout_, _$filter_, _AccountService_, _FlashService_, _apiRoutes_) { $location = _$location_; - $httpBackend = $httpBackend; - $rootScope = _$rootScope_.$new(); + $httpBackend = _$httpBackend_; + $rootScope = _$rootScope_; $scope = _$rootScope_.$new(); $scope.form = { $valid: true, @@ -74,18 +86,21 @@ describe('AccountController', function() { '$rootScope': $rootScope, '$routeParams': {account_id: DEFAULT_ACCOUNT._id}, FlashService: _FlashService_, - AccountService: _AccountService_, + AccountService: _AccountService_ }); }; })); describe('init()', function() { - it('should init successfully', inject(function($httpBackend) { + it('should init successfully', inject(function($httpBackend, $rootScope) { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id) .respond(DEFAULT_ACCOUNT); $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[DEFAULT_ENTRY], balance: 100}); + + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); var accountController = createController(); $httpBackend.flush(); @@ -95,15 +110,19 @@ describe('AccountController', function() { accountController.account._id.should.be.equal(DEFAULT_ACCOUNT._id); accountController.entries.should.be.instanceof(Array).and.have.lengthOf(1); accountController.balance.should.be.equal(100); + $rootScope.accounts.should.be.instanceof(Array).and.have.lengthOf(2); })); - it('should fail to init', inject(function($httpBackend) { + it('should fail to init', inject(function($httpBackend, $rootScope) { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id) .respond(400); $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond(400); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(400); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -111,6 +130,7 @@ describe('AccountController', function() { should.not.exist(accountController.account); accountController.entries.should.be.instanceof(Array).and.have.lengthOf(0); should.not.exist(accountController.balance); + should.not.exist($rootScope.accounts); })); }); @@ -122,6 +142,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[], balance: 0}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -150,6 +173,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[], balance: 0}); + + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); var accountController = createController(); $httpBackend.flush(); @@ -179,6 +205,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[DEFAULT_ENTRY], balance: 100}); + + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); var accountController = createController(); $httpBackend.flush(); @@ -203,6 +232,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[DEFAULT_ACCOUNT], balance: 100}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -228,6 +260,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[DEFAULT_ENTRY], balance: 100}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -264,6 +299,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[DEFAULT_ENTRY], balance: 100}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -361,6 +399,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[], balance: 0}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -378,6 +419,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[], balance: 0}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -395,6 +439,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[], balance: 0}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -414,6 +461,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[], balance: 0}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -431,6 +481,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[], balance: 0}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); @@ -448,6 +501,9 @@ describe('AccountController', function() { $httpBackend.expect('GET', apiRoutes.accounts + DEFAULT_ACCOUNT._id + '/entries') .respond({entry: null, entries:[], balance: 0}); + $httpBackend.expect('GET', apiRoutes.accounts ) + .respond(DEFAULT_ACCOUNTS); + var accountController = createController(); $httpBackend.flush(); $timeout.flush(); diff --git a/test/global.controller.spec.js b/test/global.controller.spec.js new file mode 100644 index 0000000..abf2fae --- /dev/null +++ b/test/global.controller.spec.js @@ -0,0 +1,43 @@ +describe('GlobalController', function() { + + var $location, + $rootScope, + $scope, + createController, + DEFAULT_ACCOUNTS = [ + { + "_id": "560a84058812ad8d0ff200ee", + "name": "foo", + "reference": "baz", + "user_id": "55b78934d2a706265ea28e9c" + }, { + "_id": "560a7ad08812ad8d0ff20068", + "name": "bar", + "user_id": "55b78934d2a706265ea28e9c" + } + ]; + + beforeEach(module('cloudbudget')); + + beforeEach(inject(function ( _$rootScope_, $controller, _$location_) { + $location = _$location_; + $rootScope = _$rootScope_; + $scope = _$rootScope_.$new(); + + createController = function() { + return $controller('GlobalController', { + '$scope': $scope, + '$location': $location, + '$rootScope': $rootScope + }); + }; + })); + + it('should init successfully', inject(function($location, $rootScope) { + var globalController = createController(); + globalController.current_account = '560a84058812ad8d0ff200ee'; + globalController.change_account(); + $location.path().should.be.equal('/account/560a84058812ad8d0ff200ee') + })); + +}); \ No newline at end of file diff --git a/test/home.controller.spec.js b/test/home.controller.spec.js index fe88744..8b482cd 100644 --- a/test/home.controller.spec.js +++ b/test/home.controller.spec.js @@ -14,7 +14,7 @@ describe('HomeController', function() { var homeController = $controller('HomeController', { '$rootScope': rootScope }); - + homeController.firstname = 'George'; homeController.lastname = 'Harrison'; homeController.getFullname().should.be.equal('George Harrison');