leaderboard 2.0.5 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rspec +2 -0
- data/CHANGELOG.markdown +4 -0
- data/README.markdown +73 -69
- data/Rakefile +12 -12
- data/leaderboard.gemspec +1 -0
- data/lib/leaderboard.rb +19 -1
- data/lib/leaderboard/version.rb +2 -1
- data/spec/db/.gitkeep +0 -0
- data/spec/leaderboard_spec.rb +503 -0
- data/spec/reverse_leaderboard_spec.rb +292 -0
- data/spec/spec_helper.rb +15 -0
- data/{test → spec}/test.conf +1 -1
- data/spec/version_spec.rb +7 -0
- metadata +32 -18
- data/test/test_helper.rb +0 -19
- data/test/test_leaderboard.rb +0 -484
- data/test/test_rev_leaderboard.rb +0 -484
data/test/test_leaderboard.rb
DELETED
@@ -1,484 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestLeaderboard < LeaderboardTest
|
4
|
-
def setup
|
5
|
-
@redis_connection = Redis.new(:host => "127.0.0.1")
|
6
|
-
@leaderboard = Leaderboard.new('name', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS, :host => "127.0.0.1")
|
7
|
-
end
|
8
|
-
|
9
|
-
def teardown
|
10
|
-
@redis_connection.flushdb
|
11
|
-
@leaderboard.disconnect
|
12
|
-
@redis_connection.client.disconnect
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_initialize_with_defaults
|
16
|
-
assert_equal 'name', @leaderboard.leaderboard_name
|
17
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, @leaderboard.page_size
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_disconnect
|
21
|
-
assert_equal nil, @leaderboard.disconnect
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_will_automatically_reconnect_after_a_disconnect
|
25
|
-
assert_equal 0, @leaderboard.total_members
|
26
|
-
rank_members_in_leaderboard(5)
|
27
|
-
assert_equal 5, @leaderboard.total_members
|
28
|
-
assert_equal nil, @leaderboard.disconnect
|
29
|
-
assert_equal 5, @leaderboard.total_members
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_page_size_is_default_page_size_if_set_to_invalid_value
|
33
|
-
some_leaderboard = Leaderboard.new('name', {:page_size => 0})
|
34
|
-
|
35
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, some_leaderboard.page_size
|
36
|
-
some_leaderboard.disconnect
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_delete_leaderboard
|
40
|
-
rank_members_in_leaderboard
|
41
|
-
|
42
|
-
assert_equal true, @redis_connection.exists('name')
|
43
|
-
@leaderboard.delete_leaderboard
|
44
|
-
assert_equal false, @redis_connection.exists('name')
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_can_pass_existing_redis_connection_to_initializer
|
48
|
-
@leaderboard = Leaderboard.new('name', Leaderboard::DEFAULT_OPTIONS, {:redis_connection => @redis_connection})
|
49
|
-
rank_members_in_leaderboard
|
50
|
-
|
51
|
-
assert_equal 1, @redis_connection.info["connected_clients"].to_i
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_rank_member_and_total_members
|
55
|
-
@leaderboard.rank_member('member', 1)
|
56
|
-
|
57
|
-
assert_equal 1, @leaderboard.total_members
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_total_members_in_score_range
|
61
|
-
rank_members_in_leaderboard(5)
|
62
|
-
|
63
|
-
assert_equal 3, @leaderboard.total_members_in_score_range(2, 4)
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_rank_for
|
67
|
-
rank_members_in_leaderboard(5)
|
68
|
-
|
69
|
-
assert_equal 2, @leaderboard.rank_for('member_4')
|
70
|
-
assert_equal 1, @leaderboard.rank_for('member_4', true)
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_score_for
|
74
|
-
rank_members_in_leaderboard(5)
|
75
|
-
|
76
|
-
assert_equal 4, @leaderboard.score_for('member_4')
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_total_pages
|
80
|
-
rank_members_in_leaderboard(10)
|
81
|
-
|
82
|
-
assert_equal 1, @leaderboard.total_pages
|
83
|
-
|
84
|
-
@redis_connection.flushdb
|
85
|
-
|
86
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE + 1)
|
87
|
-
|
88
|
-
assert_equal 2, @leaderboard.total_pages
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_leaders
|
92
|
-
rank_members_in_leaderboard(25)
|
93
|
-
|
94
|
-
assert_equal 25, @leaderboard.total_members
|
95
|
-
|
96
|
-
leaders = @leaderboard.leaders(1)
|
97
|
-
|
98
|
-
assert_equal 25, leaders.size
|
99
|
-
assert_equal 'member_25', leaders[0][:member]
|
100
|
-
assert_equal 'member_2', leaders[-2][:member]
|
101
|
-
assert_equal 'member_1', leaders[-1][:member]
|
102
|
-
assert_equal 1, leaders[-1][:score].to_i
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_leaders_with_multiple_pages
|
106
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
|
107
|
-
|
108
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1, @leaderboard.total_members
|
109
|
-
|
110
|
-
leaders = @leaderboard.leaders(1)
|
111
|
-
assert_equal @leaderboard.page_size, leaders.size
|
112
|
-
|
113
|
-
leaders = @leaderboard.leaders(2)
|
114
|
-
assert_equal @leaderboard.page_size, leaders.size
|
115
|
-
|
116
|
-
leaders = @leaderboard.leaders(3)
|
117
|
-
assert_equal @leaderboard.page_size, leaders.size
|
118
|
-
|
119
|
-
leaders = @leaderboard.leaders(4)
|
120
|
-
assert_equal 1, leaders.size
|
121
|
-
|
122
|
-
leaders = @leaderboard.leaders(-5)
|
123
|
-
assert_equal @leaderboard.page_size, leaders.size
|
124
|
-
|
125
|
-
leaders = @leaderboard.leaders(10)
|
126
|
-
assert_equal 1, leaders.size
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_leaders_without_retrieving_scores_and_ranks
|
130
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
|
131
|
-
|
132
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, @leaderboard.total_members
|
133
|
-
leaders = @leaderboard.leaders(1, {:with_scores => false, :with_rank => false})
|
134
|
-
|
135
|
-
member_25 = {:member => 'member_25'}
|
136
|
-
assert_equal member_25, leaders[0]
|
137
|
-
|
138
|
-
member_1 = {:member => 'member_1'}
|
139
|
-
assert_equal member_1, leaders[24]
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_leaders_with_only_various_options_should_respect_other_defaults
|
143
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE + 1)
|
144
|
-
|
145
|
-
leaders = @leaderboard.leaders(1, :page_size => 1)
|
146
|
-
assert_equal 1, leaders.size
|
147
|
-
|
148
|
-
leaders = @leaderboard.leaders(1, :with_rank => false)
|
149
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, leaders.size
|
150
|
-
member_26 = {:member => 'member_26', :score => 26}
|
151
|
-
member_25 = {:member => 'member_25', :score => 25}
|
152
|
-
member_24 = {:member => 'member_24', :score => 24}
|
153
|
-
assert_equal member_26, leaders[0]
|
154
|
-
assert_equal member_25, leaders[1]
|
155
|
-
assert_equal member_24, leaders[2]
|
156
|
-
|
157
|
-
leaders = @leaderboard.leaders(1, :with_scores => false)
|
158
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, leaders.size
|
159
|
-
member_26 = {:member => 'member_26', :rank => 1}
|
160
|
-
member_25 = {:member => 'member_25', :rank => 2}
|
161
|
-
assert_equal member_26, leaders[0]
|
162
|
-
assert_equal member_25, leaders[1]
|
163
|
-
|
164
|
-
leaders = @leaderboard.leaders(1, :with_scores => false, :with_rank => false)
|
165
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, leaders.size
|
166
|
-
member_26 = {:member => 'member_26'}
|
167
|
-
member_25 = {:member => 'member_25'}
|
168
|
-
assert_equal member_26, leaders[0]
|
169
|
-
assert_equal member_25, leaders[1]
|
170
|
-
|
171
|
-
leaders = @leaderboard.leaders(1, :with_rank => false, :page_size => 1)
|
172
|
-
assert_equal 1, leaders.size
|
173
|
-
member_26 = {:member => 'member_26', :score => 26}
|
174
|
-
assert_equal member_26, leaders[0]
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_around_me
|
178
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
|
179
|
-
|
180
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1, @leaderboard.total_members
|
181
|
-
|
182
|
-
leaders_around_me = @leaderboard.around_me('member_30')
|
183
|
-
assert_equal @leaderboard.page_size / 2, leaders_around_me.size / 2
|
184
|
-
|
185
|
-
leaders_around_me = @leaderboard.around_me('member_1')
|
186
|
-
assert_equal @leaderboard.page_size / 2 + 1, leaders_around_me.size
|
187
|
-
|
188
|
-
leaders_around_me = @leaderboard.around_me('member_76')
|
189
|
-
assert_equal @leaderboard.page_size / 2, leaders_around_me.size / 2
|
190
|
-
end
|
191
|
-
|
192
|
-
def test_ranked_in_list
|
193
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
|
194
|
-
|
195
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, @leaderboard.total_members
|
196
|
-
|
197
|
-
members = ['member_1', 'member_5', 'member_10']
|
198
|
-
ranked_members = @leaderboard.ranked_in_list(members, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
|
199
|
-
|
200
|
-
assert_equal 3, ranked_members.size
|
201
|
-
|
202
|
-
assert_equal 25, ranked_members[0][:rank]
|
203
|
-
assert_equal 1, ranked_members[0][:score]
|
204
|
-
|
205
|
-
assert_equal 21, ranked_members[1][:rank]
|
206
|
-
assert_equal 5, ranked_members[1][:score]
|
207
|
-
|
208
|
-
assert_equal 16, ranked_members[2][:rank]
|
209
|
-
assert_equal 10, ranked_members[2][:score]
|
210
|
-
end
|
211
|
-
|
212
|
-
def test_ranked_in_list_without_scores
|
213
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
|
214
|
-
|
215
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, @leaderboard.total_members
|
216
|
-
|
217
|
-
members = ['member_1', 'member_5', 'member_10']
|
218
|
-
ranked_members = @leaderboard.ranked_in_list(members, {:with_scores => false, :with_rank => true, :use_zero_index_for_rank => false})
|
219
|
-
|
220
|
-
assert_equal 3, ranked_members.size
|
221
|
-
|
222
|
-
assert_equal 25, ranked_members[0][:rank]
|
223
|
-
|
224
|
-
assert_equal 21, ranked_members[1][:rank]
|
225
|
-
|
226
|
-
assert_equal 16, ranked_members[2][:rank]
|
227
|
-
end
|
228
|
-
|
229
|
-
def test_remove_member
|
230
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
|
231
|
-
|
232
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, @leaderboard.total_members
|
233
|
-
|
234
|
-
@leaderboard.remove_member('member_1')
|
235
|
-
|
236
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE - 1, @leaderboard.total_members
|
237
|
-
assert_nil @leaderboard.rank_for('member_1')
|
238
|
-
end
|
239
|
-
|
240
|
-
def test_change_score_for
|
241
|
-
@leaderboard.rank_member('member_1', 5)
|
242
|
-
assert_equal 5, @leaderboard.score_for('member_1')
|
243
|
-
|
244
|
-
@leaderboard.change_score_for('member_1', 5)
|
245
|
-
assert_equal 10, @leaderboard.score_for('member_1')
|
246
|
-
|
247
|
-
@leaderboard.change_score_for('member_1', -5)
|
248
|
-
assert_equal 5, @leaderboard.score_for('member_1')
|
249
|
-
end
|
250
|
-
|
251
|
-
def test_check_member
|
252
|
-
@leaderboard.rank_member('member_1', 10)
|
253
|
-
|
254
|
-
assert_equal true, @leaderboard.check_member?('member_1')
|
255
|
-
assert_equal false, @leaderboard.check_member?('member_2')
|
256
|
-
end
|
257
|
-
|
258
|
-
def test_can_change_page_size_and_have_it_reflected_in_size_of_result_set
|
259
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
|
260
|
-
|
261
|
-
@leaderboard.page_size = 5
|
262
|
-
|
263
|
-
assert_equal 5, @leaderboard.total_pages
|
264
|
-
assert_equal 5, @leaderboard.leaders(1).size
|
265
|
-
end
|
266
|
-
|
267
|
-
def test_cannot_set_page_size_to_invalid_page_size
|
268
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE)
|
269
|
-
|
270
|
-
@leaderboard.page_size = 0
|
271
|
-
assert_equal 1, @leaderboard.total_pages
|
272
|
-
assert_equal Leaderboard::DEFAULT_PAGE_SIZE, @leaderboard.leaders(1).size
|
273
|
-
end
|
274
|
-
|
275
|
-
def test_score_and_rank_for
|
276
|
-
rank_members_in_leaderboard
|
277
|
-
|
278
|
-
data = @leaderboard.score_and_rank_for('member_1')
|
279
|
-
assert_equal 'member_1', data[:member]
|
280
|
-
assert_equal 1, data[:score]
|
281
|
-
assert_equal 5, data[:rank]
|
282
|
-
end
|
283
|
-
|
284
|
-
def test_remove_members_in_score_range
|
285
|
-
rank_members_in_leaderboard
|
286
|
-
|
287
|
-
assert_equal 5, @leaderboard.total_members
|
288
|
-
|
289
|
-
@leaderboard.rank_member('cheater_1', 100)
|
290
|
-
@leaderboard.rank_member('cheater_2', 101)
|
291
|
-
@leaderboard.rank_member('cheater_3', 102)
|
292
|
-
|
293
|
-
assert_equal 8, @leaderboard.total_members
|
294
|
-
|
295
|
-
@leaderboard.remove_members_in_score_range(100, 102)
|
296
|
-
|
297
|
-
assert_equal 5, @leaderboard.total_members
|
298
|
-
|
299
|
-
leaders = @leaderboard.leaders(1)
|
300
|
-
leaders.each do |leader|
|
301
|
-
assert leader[:score] < 100
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
def test_merge_leaderboards
|
306
|
-
foo = Leaderboard.new('foo')
|
307
|
-
bar = Leaderboard.new('bar')
|
308
|
-
|
309
|
-
foo.rank_member('foo_1', 1)
|
310
|
-
foo.rank_member('foo_2', 2)
|
311
|
-
bar.rank_member('bar_1', 3)
|
312
|
-
bar.rank_member('bar_2', 4)
|
313
|
-
bar.rank_member('bar_3', 5)
|
314
|
-
|
315
|
-
foobar_keys = foo.merge_leaderboards('foobar', ['bar'])
|
316
|
-
assert_equal 5, foobar_keys
|
317
|
-
|
318
|
-
foobar = Leaderboard.new('foobar')
|
319
|
-
assert_equal 5, foobar.total_members
|
320
|
-
|
321
|
-
first_leader_in_foobar = foobar.leaders(1).first
|
322
|
-
assert_equal 1, first_leader_in_foobar[:rank]
|
323
|
-
assert_equal 'bar_3', first_leader_in_foobar[:member]
|
324
|
-
assert_equal 5, first_leader_in_foobar[:score]
|
325
|
-
|
326
|
-
foo.disconnect
|
327
|
-
bar.disconnect
|
328
|
-
foobar.disconnect
|
329
|
-
end
|
330
|
-
|
331
|
-
def test_intersect_leaderboards
|
332
|
-
foo = Leaderboard.new('foo')
|
333
|
-
bar = Leaderboard.new('bar')
|
334
|
-
|
335
|
-
foo.rank_member('foo_1', 1)
|
336
|
-
foo.rank_member('foo_2', 2)
|
337
|
-
foo.rank_member('bar_3', 6)
|
338
|
-
bar.rank_member('bar_1', 3)
|
339
|
-
bar.rank_member('foo_1', 4)
|
340
|
-
bar.rank_member('bar_3', 5)
|
341
|
-
|
342
|
-
foobar_keys = foo.intersect_leaderboards('foobar', ['bar'], {:aggregate => :max})
|
343
|
-
assert_equal 2, foobar_keys
|
344
|
-
|
345
|
-
foobar = Leaderboard.new('foobar')
|
346
|
-
assert_equal 2, foobar.total_members
|
347
|
-
|
348
|
-
first_leader_in_foobar = foobar.leaders(1).first
|
349
|
-
assert_equal 1, first_leader_in_foobar[:rank]
|
350
|
-
assert_equal 'bar_3', first_leader_in_foobar[:member]
|
351
|
-
assert_equal 6, first_leader_in_foobar[:score]
|
352
|
-
|
353
|
-
foo.disconnect
|
354
|
-
bar.disconnect
|
355
|
-
foobar.disconnect
|
356
|
-
end
|
357
|
-
|
358
|
-
def test_massage_leader_data_respects_with_scores
|
359
|
-
rank_members_in_leaderboard(25)
|
360
|
-
|
361
|
-
assert_equal 25, @leaderboard.total_members
|
362
|
-
|
363
|
-
leaders = @leaderboard.leaders(1, {:with_scores => false, :with_rank => false})
|
364
|
-
assert_not_nil leaders[0][:member]
|
365
|
-
assert_nil leaders[0][:score]
|
366
|
-
assert_nil leaders[0][:rank]
|
367
|
-
|
368
|
-
@leaderboard.page_size = 25
|
369
|
-
leaders = @leaderboard.leaders(1, {:with_scores => false, :with_rank => false})
|
370
|
-
assert_equal 25, leaders.size
|
371
|
-
|
372
|
-
@leaderboard.page_size = Leaderboard::DEFAULT_PAGE_SIZE
|
373
|
-
leaders = @leaderboard.leaders(1, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
|
374
|
-
assert_not_nil leaders[0][:member]
|
375
|
-
assert_not_nil leaders[0][:score]
|
376
|
-
assert_not_nil leaders[0][:rank]
|
377
|
-
|
378
|
-
@leaderboard.page_size = 25
|
379
|
-
leaders = @leaderboard.leaders(1, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS)
|
380
|
-
assert_equal 25, leaders.size
|
381
|
-
end
|
382
|
-
|
383
|
-
def test_total_pages_in_with_new_page_size
|
384
|
-
rank_members_in_leaderboard(25)
|
385
|
-
|
386
|
-
assert_equal 1, @leaderboard.total_pages_in(@leaderboard.leaderboard_name)
|
387
|
-
assert_equal 5, @leaderboard.total_pages_in(@leaderboard.leaderboard_name, 5)
|
388
|
-
end
|
389
|
-
|
390
|
-
def test_leaders_call_with_new_page_size
|
391
|
-
rank_members_in_leaderboard(25)
|
392
|
-
|
393
|
-
assert_equal 5, @leaderboard.leaders(1, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 5})).size
|
394
|
-
assert_equal 10, @leaderboard.leaders(1, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 10})).size
|
395
|
-
assert_equal 10, @leaderboard.leaders(2, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 10})).size
|
396
|
-
assert_equal 5, @leaderboard.leaders(3, Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 10})).size
|
397
|
-
end
|
398
|
-
|
399
|
-
def test_around_me_call_with_new_page_size
|
400
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
|
401
|
-
|
402
|
-
leaders_around_me = @leaderboard.around_me('member_30', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 3}))
|
403
|
-
assert_equal 3, leaders_around_me.size
|
404
|
-
assert_equal 'member_31', leaders_around_me[0][:member]
|
405
|
-
assert_equal 'member_29', leaders_around_me[2][:member]
|
406
|
-
end
|
407
|
-
|
408
|
-
def test_percentile_for
|
409
|
-
rank_members_in_leaderboard(12)
|
410
|
-
|
411
|
-
assert_equal 0, @leaderboard.percentile_for('member_1')
|
412
|
-
assert_equal 9, @leaderboard.percentile_for('member_2')
|
413
|
-
assert_equal 17, @leaderboard.percentile_for('member_3')
|
414
|
-
assert_equal 25, @leaderboard.percentile_for('member_4')
|
415
|
-
assert_equal 92, @leaderboard.percentile_for('member_12')
|
416
|
-
end
|
417
|
-
|
418
|
-
def test_around_me_for_invalid_member
|
419
|
-
rank_members_in_leaderboard(Leaderboard::DEFAULT_PAGE_SIZE * 3 + 1)
|
420
|
-
|
421
|
-
leaders_around_me = @leaderboard.around_me('jones', Leaderboard::DEFAULT_LEADERBOARD_REQUEST_OPTIONS.merge({:page_size => 3}))
|
422
|
-
assert_equal 0, leaders_around_me.size
|
423
|
-
end
|
424
|
-
|
425
|
-
def test_score_and_rank_for_non_existent_member
|
426
|
-
score_and_rank_for_member = @leaderboard.score_and_rank_for('jones')
|
427
|
-
|
428
|
-
assert_equal 'jones', score_and_rank_for_member[:member]
|
429
|
-
assert_equal 0.0, score_and_rank_for_member[:score]
|
430
|
-
assert_nil score_and_rank_for_member[:rank]
|
431
|
-
end
|
432
|
-
|
433
|
-
def test_ranked_in_list_for_non_existent_member
|
434
|
-
rank_members_in_leaderboard
|
435
|
-
|
436
|
-
members = ['member_1', 'member_5', 'jones']
|
437
|
-
ranked_members = @leaderboard.ranked_in_list(members)
|
438
|
-
|
439
|
-
assert_equal 3, ranked_members.size
|
440
|
-
assert_nil ranked_members[2][:rank]
|
441
|
-
end
|
442
|
-
|
443
|
-
def test_percentile_for_non_existent_member
|
444
|
-
percentile = @leaderboard.percentile_for('jones')
|
445
|
-
|
446
|
-
assert_nil percentile
|
447
|
-
end
|
448
|
-
|
449
|
-
def test_change_score_for_non_existent_member
|
450
|
-
assert_equal 0.0, @leaderboard.score_for('jones')
|
451
|
-
@leaderboard.change_score_for('jones', 5)
|
452
|
-
assert_equal 5.0, @leaderboard.score_for('jones')
|
453
|
-
end
|
454
|
-
|
455
|
-
def test_page_for
|
456
|
-
assert_equal 0, @leaderboard.page_for('jones')
|
457
|
-
|
458
|
-
rank_members_in_leaderboard(20)
|
459
|
-
|
460
|
-
assert_equal 1, @leaderboard.page_for('member_17')
|
461
|
-
assert_equal 1, @leaderboard.page_for('member_11')
|
462
|
-
assert_equal 1, @leaderboard.page_for('member_10')
|
463
|
-
assert_equal 1, @leaderboard.page_for('member_1')
|
464
|
-
|
465
|
-
assert_equal 1, @leaderboard.page_for('member_17', 10)
|
466
|
-
assert_equal 1, @leaderboard.page_for('member_11', 10)
|
467
|
-
assert_equal 2, @leaderboard.page_for('member_10', 10)
|
468
|
-
assert_equal 2, @leaderboard.page_for('member_1', 10)
|
469
|
-
end
|
470
|
-
|
471
|
-
def test_rank_members
|
472
|
-
assert_equal 0, @leaderboard.total_members
|
473
|
-
@leaderboard.rank_members('member_1', 1, 'member_10', 10)
|
474
|
-
assert_equal 2, @leaderboard.total_members
|
475
|
-
assert_equal 'member_10', @leaderboard.leaders(1).first[:member]
|
476
|
-
end
|
477
|
-
|
478
|
-
def test_rank_members_with_array
|
479
|
-
assert_equal 0, @leaderboard.total_members
|
480
|
-
@leaderboard.rank_members(['member_1', 1, 'member_10', 10])
|
481
|
-
assert_equal 2, @leaderboard.total_members
|
482
|
-
assert_equal 'member_10', @leaderboard.leaders(1).first[:member]
|
483
|
-
end
|
484
|
-
end
|