forked from makersacademy/bowling-challenge
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscorecard.test.js
More file actions
119 lines (99 loc) · 3.4 KB
/
scorecard.test.js
File metadata and controls
119 lines (99 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
const Scorecard = require('./scorecard');
describe('Scorecard', () => {
let scorecard = new Scorecard();
beforeEach(() => {
scorecard = new Scorecard();
})
const calculateScore = () => {
scorecard.calculateBasicScore();
scorecard.calculateStrikeBonuses();
scorecard.calculateSpareBonuses();
}
it('should initially return 0 and an empty array of frames', () => {
expect(scorecard.getFrames()).toEqual([]);
calculateScore();
expect(scorecard.getTotalScore()).toBe(0);
});
it('should return the score of 7 first frame in the array', () => {
scorecard.addFrame(2, 5, 0);
calculateScore();
expect(scorecard.getFrames()).toEqual([[2, 5, 0]]);
expect(scorecard.getTotalScore()).toBe(7);
});
it('should return a score of 15 and two frames in the array', () => {
scorecard.addFrame(2, 5, 0);
scorecard.addFrame(3, 5, 0);
calculateScore();
expect(scorecard.getFrames()).toEqual([[2, 5, 0], [3, 5, 0]]);
expect(scorecard.getTotalScore()).toBe(15);
});
it('should return 17 instead of 16 because the spare doubles the first roll of the next frame', () => {
scorecard.addFrame(5, 5, 0);
scorecard.addFrame(1, 5, 0);
calculateScore();
expect(scorecard.getTotalScore()).toBe(17);
})
it('should return 29 instead of 27 because the strike doubles the next two rolls', () => {
scorecard.addFrame(2, 5, 0);
scorecard.addFrame(3, 5, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(1, 1, 0);
calculateScore();
expect(scorecard.getTotalScore()).toBe(29);
})
it('should return 55 instead of 45 because two strikes doubles the next rolls', () => {
scorecard.addFrame(2, 5, 0);
scorecard.addFrame(3, 5, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(1, 1, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(3, 5, 0);
calculateScore();
expect(scorecard.getTotalScore()).toBe(55);
})
it('should return 133', () => {
scorecard.addFrame(1, 4, 0);
scorecard.addFrame(4, 5, 0);
scorecard.addFrame(6, 4, 0);
scorecard.addFrame(5, 5, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(0, 1, 0);
scorecard.addFrame(7, 3, 0);
scorecard.addFrame(6, 4, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(2, 8, 6);
calculateScore();
expect(scorecard.getTotalScore()).toBe(133);
})
it("shouldn't return 300 as the game is not over", () => {
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
calculateScore();
expect(scorecard.getTotalScore()).toBe(210);
})
it('should return 300 as a score in case of a perfect game', () => {
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
scorecard.addFrame(10, 0, 0);
calculateScore();
expect(scorecard.getTotalScore()).toBe(300);
})
});