diff --git a/package.json b/package.json index 588604b..1a0f810 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "gulp-karma": "0.0.4", "gulp-minify-css": "^0.4.3", "gulp-rename": "^1.2.0", - "gulp-sass": "^1.3.2", + "gulp-sass": "^2.3.2", "jasmine-core": "^2.1.3", "karma": "^0.12.31", "karma-chrome-launcher": "^0.1.7", diff --git a/src/app/directives/moveInfo.js b/src/app/directives/moveInfo.js index ba92ba9..ebf0b5b 100644 --- a/src/app/directives/moveInfo.js +++ b/src/app/directives/moveInfo.js @@ -5,7 +5,7 @@ angular.module('darts').directive('moveInfo', [ return { restrict : 'A', replace: true, - template: '{{move}}', + template: '{{move.points}}', scope: { move: "=moveInfo" } diff --git a/src/app/services/players.js b/src/app/services/players.js index af5f10e..af323a8 100644 --- a/src/app/services/players.js +++ b/src/app/services/players.js @@ -29,8 +29,10 @@ var Player = function(name, email) { this.undoLastMove = function() { if (moves.length > 0) { - var lastMove = parseInt(moves.pop()); - score += lastMove; + var lastMove = moves.pop(); + if (lastMove.persisted) { + score += parseInt(lastMove.points); + } } }; @@ -46,11 +48,13 @@ var Player = function(name, email) { } if (isWholeNumber(points) && points >= 0) { - moves.push(points); + var move = { points: points, persisted: false }; if (points <= score) { + move.persisted = true; score -= points; } + moves.push(move); } }; diff --git a/tests/services/players.spec.js b/tests/services/players.spec.js index 9cb738a..aff518c 100644 --- a/tests/services/players.spec.js +++ b/tests/services/players.spec.js @@ -112,7 +112,7 @@ describe('players', function() { player.makeMove(25); var moves = player.getMoves(); - expect(moves[moves.length-1]).toEqual(25); + expect(moves[moves.length-1].points).toEqual(25); }); it('should only make a move if the move is a non negative number', function() { @@ -129,14 +129,14 @@ describe('players', function() { moves = player.getMoves(); expect(moves.length).toEqual(1); - expect(moves[moves.length-1]).toEqual(25); + expect(moves[moves.length-1].points).toEqual(25); player.makeMove('x'); expect(player.score()).toEqual(276); moves = player.getMoves(); expect(moves.length).toEqual(1); - expect(moves[moves.length-1]).toEqual(25); + expect(moves[moves.length-1].points).toEqual(25); player.makeMove(1.2); @@ -144,7 +144,7 @@ describe('players', function() { moves = player.getMoves(); expect(moves.length).toEqual(1); - expect(moves[moves.length-1]).toEqual(25); + expect(moves[moves.length-1].points).toEqual(25); }); it('should make a move with more points than the users score', function() { @@ -154,7 +154,7 @@ describe('players', function() { expect(player.score()).toEqual(301); var moves = player.getMoves(); - expect(moves[moves.length-1]).toEqual(302); + expect(moves[moves.length-1].points).toEqual(302); }); it('should reset players score and clear all moves', function() { @@ -178,7 +178,7 @@ describe('players', function() { expect(player.score()).toEqual(201); var moves = player.getMoves(); - expect(moves[moves.length-1]).toEqual(100); + expect(moves[moves.length-1].points).toEqual(100); player.undoLastMove(); expect(player.score()).toEqual(301); @@ -187,4 +187,22 @@ describe('players', function() { expect(moves.length).toEqual(0); }); + it('should undo last invalid move', function() { + var player = players.createPlayer('Peter'); + player.score(301); + player.makeMove(302); + + expect(player.score()).toEqual(301); + + var moves = player.getMoves(); + console.log(moves); + expect(moves[moves.length-1].points).toEqual(302); + expect(moves[moves.length-1].persisted).toEqual(false); + + player.undoLastMove(); + expect(player.score()).toEqual(301); + + moves = player.getMoves(); + expect(moves.length).toEqual(0); + }); });