UNPKG

9.09 kBJavaScriptView Raw
1describe('ng-rankings',function() {
2 var ngServices = factory('services/ng-services');
3 var module = factory('services/ng-rankings', {
4 'services/ng-services': ngServices,
5 'services/log': logMock,
6 'services/ng-groups': factory('services/ng-groups', {
7 'services/ng-services': ngServices
8 })
9 });
10
11 var $rankings;
12 var stagesMock = createStagesMock();
13 var teamsMock = createTeamsMock([
14 { number: 123 },
15 { number: 546 },
16 { number: 1123 },
17 { number: 222 }
18 ]);
19 var mockScores;
20 var mockRankings;
21 var fsMock;
22
23 //initialize
24 beforeEach(function() {
25 mockScores = [{
26 stageId: stagesMock.stages[0].id,
27 teamNumber: teamsMock.teams[0].number,
28 round: 1,
29 score: 150
30 },{
31 stageId: stagesMock.stages[0].id,
32 teamNumber: teamsMock.teams[1].number,
33 round: 2,
34 score: 132
35 },{
36 stageId: stagesMock.stages[0].id,
37 teamNumber: teamsMock.teams[1].number,
38 round: 1,
39 score: 100
40 },{
41 stageId: stagesMock.stages[0].id,
42 teamNumber: teamsMock.teams[2].number,
43 round: 1,
44 score: 0
45 },{
46 stageId: stagesMock.stages[1].id,
47 teamNumber: teamsMock.teams[0].number,
48 round: 1,
49 score: 254
50 },{
51 stageId: stagesMock.stages[1].id,
52 teamNumber: teamsMock.teams[1].number,
53 round: 1,
54 score: 221
55 },{
56 stageId: stagesMock.stages[1].id,
57 teamNumber: teamsMock.teams[2].number,
58 round: 1,
59 score: 198
60 },{
61 stageId: stagesMock.stages[1].id,
62 teamNumber: teamsMock.teams[2].number,
63 round: 2,
64 score: 75
65 }];
66 mockRankings = {};
67 mockRankings[stagesMock.stages[0].id] = [{
68 stage: stagesMock.stages[0],
69 team: teamsMock.teams[0],
70 rank: 1,
71 scores: [{
72 stageId: stagesMock.stages[0].id,
73 teamNumber: teamsMock.teams[0].number,
74 round: 1,
75 score: 150
76 }, undefined],
77 ordered: [{
78 stageId: stagesMock.stages[0].id,
79 teamNumber: teamsMock.teams[0].number,
80 round: 1,
81 score: 150
82 }],
83 highest: {
84 stageId: stagesMock.stages[0].id,
85 teamNumber: teamsMock.teams[0].number,
86 round: 1,
87 score: 150
88 }
89 },{
90 stage: stagesMock.stages[0],
91 team: teamsMock.teams[1],
92 rank: 2,
93 scores: [{
94 stageId: stagesMock.stages[0].id,
95 teamNumber: teamsMock.teams[1].number,
96 round: 1,
97 score: 100
98 },{
99 stageId: stagesMock.stages[0].id,
100 teamNumber: teamsMock.teams[1].number,
101 round: 2,
102 score: 132
103 }],
104 ordered: [{
105 stageId: stagesMock.stages[0].id,
106 teamNumber: teamsMock.teams[1].number,
107 round: 2,
108 score: 132
109 },{
110 stageId: stagesMock.stages[0].id,
111 teamNumber: teamsMock.teams[1].number,
112 round: 1,
113 score: 100
114 }],
115 highest: {
116 stageId: stagesMock.stages[0].id,
117 teamNumber: teamsMock.teams[1].number,
118 round: 2,
119 score: 132
120 }
121 },{
122 stage: stagesMock.stages[0],
123 team: teamsMock.teams[2],
124 rank: 3,
125 scores: [{
126 stageId: stagesMock.stages[0].id,
127 teamNumber: teamsMock.teams[2].number,
128 round: 1,
129 score: 0
130 }, undefined],
131 ordered: [{
132 stageId: stagesMock.stages[0].id,
133 teamNumber: teamsMock.teams[2].number,
134 round: 1,
135 score: 0
136 }],
137 highest: {
138 stageId: stagesMock.stages[0].id,
139 teamNumber: teamsMock.teams[2].number,
140 round: 1,
141 score: 0
142 }
143 },{
144 stage: stagesMock.stages[0],
145 team: teamsMock.teams[3],
146 rank: 4,
147 scores: [undefined, undefined],
148 ordered: [],
149 highest: undefined
150 }];
151 mockRankings[stagesMock.stages[1].id] = [{
152 stage: stagesMock.stages[1],
153 team: teamsMock.teams[0],
154 rank: 1,
155 scores: [{
156 stageId: stagesMock.stages[1].id,
157 teamNumber: teamsMock.teams[0].number,
158 round: 1,
159 score: 254
160 }, undefined, undefined],
161 ordered: [{
162 stageId: stagesMock.stages[1].id,
163 teamNumber: teamsMock.teams[0].number,
164 round: 1,
165 score: 254
166 }],
167 highest: {
168 stageId: stagesMock.stages[1].id,
169 teamNumber: teamsMock.teams[0].number,
170 round: 1,
171 score: 254
172 }
173 },{
174 stage: stagesMock.stages[1],
175 team: teamsMock.teams[1],
176 rank: 2,
177 scores: [{
178 stageId: stagesMock.stages[1].id,
179 teamNumber: teamsMock.teams[1].number,
180 round: 1,
181 score: 221
182 }, undefined, undefined],
183 ordered: [{
184 stageId: stagesMock.stages[1].id,
185 teamNumber: teamsMock.teams[1].number,
186 round: 1,
187 score: 221
188 }],
189 highest: {
190 stageId: stagesMock.stages[1].id,
191 teamNumber: teamsMock.teams[1].number,
192 round: 1,
193 score: 221
194 }
195 },{
196 stage: stagesMock.stages[1],
197 team: teamsMock.teams[2],
198 rank: 3,
199 scores: [{
200 stageId: stagesMock.stages[1].id,
201 teamNumber: teamsMock.teams[2].number,
202 round: 1,
203 score: 198
204 },{
205 stageId: stagesMock.stages[1].id,
206 teamNumber: teamsMock.teams[2].number,
207 round: 2,
208 score: 75
209 }, undefined],
210 ordered: [{
211 stageId: stagesMock.stages[1].id,
212 teamNumber: teamsMock.teams[2].number,
213 round: 1,
214 score: 198
215 },{
216 stageId: stagesMock.stages[1].id,
217 teamNumber: teamsMock.teams[2].number,
218 round: 2,
219 score: 75
220 }],
221 highest: {
222 stageId: stagesMock.stages[1].id,
223 teamNumber: teamsMock.teams[2].number,
224 round: 1,
225 score: 198
226 }
227 },{
228 stage: stagesMock.stages[1],
229 team: teamsMock.teams[3],
230 rank: 4,
231 scores: [undefined, undefined, undefined],
232 ordered: [],
233 highest: undefined
234 }];
235 });
236
237 beforeEach(function() {
238 fsMock = createFsMock({
239 'stages.json': stagesMock.stages,
240 'teams.json': teamsMock.teams
241 });
242 angular.mock.module(module.name);
243 angular.mock.module(function($provide) {
244 $provide.value('$fs', fsMock);
245 });
246 angular.mock.inject(["$rankings", function(_$rankings_) {
247 $rankings = _$rankings_;
248 }]);
249 });
250
251 describe('calculate', function() {
252
253 it('shuold calculate ranks correctly', function() {
254 $rankings.calculate(mockScores).then(function(rankings) {
255 Object.keys(mockRankings).forEach(stageId => {
256 Object.keys(mockRankings[stageId]).forEach(teamRank => {
257 Object.keys(mockRankings[stageId][teamRank]).forEach(property => {
258 var mock = rankings[stageId][teamRank][property];
259 if(typeof(mock) === 'object') {
260 mock = jasmine.objectContaining(mock);
261 }
262 expect(rankings[stageId][teamRank][property]).toEqual(mock);
263 });
264 });
265 });
266 });
267 });
268
269 it('shuold only return filtered rounds if filter exists', function() {
270 var filter = {};
271 filter[stagesMock.stages[1].id] = 1;
272 $rankings.calculate(mockScores, filter).then(function(rankings) {
273 expect(rankings[stagesMock.stages[1].id][0].scores.length).toEqual(1);
274 });
275 });
276
277 })
278
279});