1 | describe('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 |
|
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 | });
|