@@ -66,6 +66,9 @@ class LCLeaderboardTestCase: BaseTestCase {
6666 }
6767
6868 func testGetUserStatistics( ) {
69+ defer {
70+ LCUser . logOut ( )
71+ }
6972 let user = LCUser ( )
7073 expecting { exp in
7174 user. login ( withAuthData: [ " openid " : uuid] , platformId: " test " , options: nil ) { _, error in
@@ -123,25 +126,25 @@ class LCLeaderboardTestCase: BaseTestCase {
123126
124127 expecting ( count: 2 ) { exp in
125128 leaderboard0. getStatisticsWithUserIds ( [ userObjectId] ) { statistics, error in
126- // XCTAssertEqual(statistics?.count, 1)
127- // XCTAssertNil(error)
128- // XCTAssertEqual(leaderboard0.statisticName, statistics?.first?.name)
129- // XCTAssertEqual(statistics?.first?.value, 100)
130- // XCTAssertGreaterThanOrEqual(statistics?.first?.version ?? -1, 0)
131- // XCTAssertNotNil(statistics?.first?.user)
132- // XCTAssertNil(statistics?.first?.object)
133- // XCTAssertNil(statistics?.first?.entity)
129+ XCTAssertEqual ( statistics? . count, 1 )
130+ XCTAssertNil ( error)
131+ XCTAssertEqual ( leaderboard0. statisticName, statistics? . first? . name)
132+ XCTAssertEqual ( statistics? . first? . value, 100 )
133+ XCTAssertGreaterThanOrEqual ( statistics? . first? . version ?? - 1 , 0 )
134+ XCTAssertNotNil ( statistics? . first? . user)
135+ XCTAssertNil ( statistics? . first? . object)
136+ XCTAssertNil ( statistics? . first? . entity)
134137 exp. fulfill ( )
135138 }
136139 leaderboard1. getStatisticsWithUserIds ( [ userObjectId] ) { statistics, error in
137- // XCTAssertEqual(statistics?.count, 1)
138- // XCTAssertNil(error)
139- // XCTAssertEqual(leaderboard1.statisticName, statistics?.first?.name)
140- // XCTAssertEqual(statistics?.first?.value, 100)
141- // XCTAssertGreaterThanOrEqual(statistics?.first?.version ?? -1, 0)
142- // XCTAssertNotNil(statistics?.first?.user)
143- // XCTAssertNil(statistics?.first?.object)
144- // XCTAssertNil(statistics?.first?.entity)
140+ XCTAssertEqual ( statistics? . count, 1 )
141+ XCTAssertNil ( error)
142+ XCTAssertEqual ( leaderboard1. statisticName, statistics? . first? . name)
143+ XCTAssertEqual ( statistics? . first? . value, 100 )
144+ XCTAssertGreaterThanOrEqual ( statistics? . first? . version ?? - 1 , 0 )
145+ XCTAssertNotNil ( statistics? . first? . user)
146+ XCTAssertNil ( statistics? . first? . object)
147+ XCTAssertNil ( statistics? . first? . entity)
145148 exp. fulfill ( )
146149 }
147150 }
@@ -153,8 +156,6 @@ class LCLeaderboardTestCase: BaseTestCase {
153156 exp. fulfill ( )
154157 }
155158 }
156-
157- LCUser . logOut ( )
158159 }
159160
160161 func testGetObjectStatistics( ) {
@@ -246,4 +247,328 @@ class LCLeaderboardTestCase: BaseTestCase {
246247 }
247248 }
248249 }
250+
251+ func testGetEntityStatistics( ) {
252+ let entityId = uuid
253+
254+ let statisticName0 = " test-entity-0 "
255+ let statisticName1 = " test-entity-1 "
256+
257+ useMasterKey ( )
258+ expecting { exp in
259+ LCLeaderboard . update (
260+ withIdentity: entityId,
261+ leaderboardPath: . entities,
262+ statistics: [
263+ statisticName0 : 100 ,
264+ statisticName1 : 100 ,
265+ ] )
266+ { statistics, error in
267+ XCTAssertEqual ( statistics? . count, 2 )
268+ XCTAssertNil ( error)
269+ XCTAssertNotEqual ( statistics? . first? . name, statistics? . last? . name)
270+ for item in statistics ?? [ ] {
271+ XCTAssertTrue ( [ statisticName0, statisticName1] . contains ( item. name ?? " " ) )
272+ XCTAssertEqual ( item. value, 100 )
273+ XCTAssertGreaterThanOrEqual ( item. version, 0 )
274+ }
275+ exp. fulfill ( )
276+ }
277+ }
278+ useCommonKey ( )
279+
280+ expecting { exp in
281+ LCLeaderboard . getStatisticsWithEntity (
282+ entityId,
283+ statisticNames: [ statisticName0, statisticName1] )
284+ { statistics, error in
285+ XCTAssertEqual ( statistics? . count, 2 )
286+ XCTAssertNil ( error)
287+ XCTAssertNotEqual ( statistics? . first? . name, statistics? . last? . name)
288+ for item in statistics ?? [ ] {
289+ XCTAssertTrue ( [ statisticName0, statisticName1] . contains ( item. name ?? " " ) )
290+ XCTAssertEqual ( item. value, 100 )
291+ XCTAssertGreaterThanOrEqual ( item. version, 0 )
292+ XCTAssertNotNil ( item. entity)
293+ XCTAssertEqual ( item. entity, entityId)
294+ XCTAssertNil ( item. user)
295+ XCTAssertNil ( item. object)
296+ }
297+ exp. fulfill ( )
298+ }
299+ }
300+
301+ let leaderboard0 = LCLeaderboard ( statisticName: statisticName0)
302+ let leaderboard1 = LCLeaderboard ( statisticName: statisticName1)
303+
304+ expecting ( count: 2 ) { exp in
305+ leaderboard0. getStatisticsWithEntities ( [ entityId] ) { statistics, error in
306+ XCTAssertEqual ( statistics? . count, 1 )
307+ XCTAssertNil ( error)
308+ XCTAssertEqual ( leaderboard0. statisticName, statistics? . first? . name)
309+ XCTAssertEqual ( statistics? . first? . value, 100 )
310+ XCTAssertGreaterThanOrEqual ( statistics? . first? . version ?? - 1 , 0 )
311+ XCTAssertEqual ( statistics? . first? . entity, entityId)
312+ XCTAssertNil ( statistics? . first? . user)
313+ XCTAssertNil ( statistics? . first? . object)
314+ exp. fulfill ( )
315+ }
316+ leaderboard1. getStatisticsWithEntities ( [ entityId] ) { statistics, error in
317+ XCTAssertEqual ( statistics? . count, 1 )
318+ XCTAssertNil ( error)
319+ XCTAssertEqual ( leaderboard1. statisticName, statistics? . first? . name)
320+ XCTAssertEqual ( statistics? . first? . value, 100 )
321+ XCTAssertGreaterThanOrEqual ( statistics? . first? . version ?? - 1 , 0 )
322+ XCTAssertEqual ( statistics? . first? . entity, entityId)
323+ XCTAssertNil ( statistics? . first? . user)
324+ XCTAssertNil ( statistics? . first? . object)
325+ exp. fulfill ( )
326+ }
327+ }
328+ }
329+
330+ func testGetUserRankings( ) {
331+ defer {
332+ LCUser . logOut ( )
333+ }
334+ let object = LCObject ( )
335+ XCTAssertTrue ( object. save ( ) )
336+ let user = LCUser ( )
337+ let objectFieldKey = " objectField "
338+ user [ objectFieldKey] = object
339+ expecting { exp in
340+ user. login ( withAuthData: [ " openid " : uuid] , platformId: " test " , options: nil ) { _, error in
341+ XCTAssertNil ( error)
342+ exp. fulfill ( )
343+ }
344+ }
345+ guard let userObjectId = user. objectId else {
346+ XCTFail ( )
347+ return
348+ }
349+
350+ let statisticName0 = " test-user-0 "
351+ let statisticName1 = " test-user-1 "
352+ var statistic0version = - 1
353+ var statistic1version = - 1
354+
355+ expecting { exp in
356+ LCLeaderboard . updateCurrentUserStatistics (
357+ [ statisticName0 : 100 ,
358+ statisticName1 : 100 ] )
359+ { statistics, error in
360+ XCTAssertEqual ( statistics? . count, 2 )
361+ XCTAssertNil ( error)
362+ XCTAssertNotEqual ( statistics? . first? . name, statistics? . last? . name)
363+ for item in statistics ?? [ ] {
364+ XCTAssertTrue ( [ statisticName0, statisticName1] . contains ( item. name ?? " " ) )
365+ XCTAssertEqual ( item. value, 100 )
366+ XCTAssertGreaterThanOrEqual ( item. version, 0 )
367+ if ( item. name ?? " " ) == statisticName0 {
368+ statistic0version = item. version
369+ } else {
370+ statistic1version = item. version
371+ }
372+ }
373+ exp. fulfill ( )
374+ }
375+ }
376+
377+ let leaderboard0 = LCLeaderboard ( statisticName: statisticName0)
378+ let leaderboard1 = LCLeaderboard ( statisticName: statisticName1)
379+ let option = LCLeaderboardQueryOption ( )
380+ option. selectKeys = [ objectFieldKey]
381+ option. includeKeys = [ objectFieldKey]
382+
383+ expecting ( count: 2 ) { exp in
384+ leaderboard0. limit = 1
385+ leaderboard0. includeStatistics = [ statisticName1]
386+ leaderboard0. version = statistic0version
387+ leaderboard0. returnCount = true
388+ leaderboard0. getUserResultsAroundUser ( userObjectId, option: option) { rankings, count, error in
389+ XCTAssertEqual ( rankings? . count, 1 )
390+ XCTAssertGreaterThanOrEqual ( count, 1 )
391+ XCTAssertNil ( error)
392+ for item in rankings ?? [ ] {
393+ XCTAssertEqual ( item. statisticName, leaderboard0. statisticName)
394+ XCTAssertGreaterThanOrEqual ( item. rank, 0 )
395+ XCTAssertEqual ( item. value, 100 )
396+ XCTAssertEqual ( item. includedStatistics? . first? . name, statisticName1)
397+ XCTAssertEqual ( item. includedStatistics? . first? . value, 100 )
398+ XCTAssertEqual ( item. user? . objectId, userObjectId)
399+ XCTAssertNotNil ( ( item. user ? [ objectFieldKey] as? LCObject ) ? . createdAt)
400+ XCTAssertNil ( item. object)
401+ XCTAssertNil ( item. entity)
402+ }
403+ exp. fulfill ( )
404+ }
405+ leaderboard1. skip = 1
406+ leaderboard1. version = statistic1version
407+ leaderboard1. getUserResults ( with: nil ) { rankings, count, error in
408+ for item in rankings ?? [ ] {
409+ XCTAssertNotEqual ( item. rank, 0 )
410+ }
411+ XCTAssertEqual ( count, 0 )
412+ XCTAssertNil ( error)
413+ exp. fulfill ( )
414+ }
415+ }
416+ }
417+
418+ func testGetObjectRankings( ) {
419+ let object = LCObject ( )
420+ let objectFieldKey = " objectField "
421+ object [ objectFieldKey] = LCObject ( )
422+ XCTAssertTrue ( object. save ( ) )
423+ guard let objectId = object. objectId else {
424+ XCTFail ( )
425+ return
426+ }
427+
428+ let statisticName0 = " test-object-0 "
429+ let statisticName1 = " test-object-1 "
430+ var statistic0version = - 1
431+ var statistic1version = - 1
432+
433+ useMasterKey ( )
434+ expecting { exp in
435+ LCLeaderboard . update (
436+ withIdentity: objectId,
437+ leaderboardPath: . objects,
438+ statistics: [
439+ statisticName0 : 100 ,
440+ statisticName1 : 100 ,
441+ ] )
442+ { statistics, error in
443+ XCTAssertEqual ( statistics? . count, 2 )
444+ XCTAssertNil ( error)
445+ XCTAssertNotEqual ( statistics? . first? . name, statistics? . last? . name)
446+ for item in statistics ?? [ ] {
447+ XCTAssertTrue ( [ statisticName0, statisticName1] . contains ( item. name ?? " " ) )
448+ XCTAssertEqual ( item. value, 100 )
449+ XCTAssertGreaterThanOrEqual ( item. version, 0 )
450+ if ( item. name ?? " " ) == statisticName0 {
451+ statistic0version = item. version
452+ } else {
453+ statistic1version = item. version
454+ }
455+ }
456+ exp. fulfill ( )
457+ }
458+ }
459+ useCommonKey ( )
460+
461+ let leaderboard0 = LCLeaderboard ( statisticName: statisticName0)
462+ let leaderboard1 = LCLeaderboard ( statisticName: statisticName1)
463+ let option = LCLeaderboardQueryOption ( )
464+ option. selectKeys = [ objectFieldKey]
465+ option. includeKeys = [ objectFieldKey]
466+
467+ expecting ( count: 2 ) { exp in
468+ leaderboard0. limit = 1
469+ leaderboard0. includeStatistics = [ statisticName1]
470+ leaderboard0. version = statistic0version
471+ leaderboard0. returnCount = true
472+ leaderboard0. getObjectResultsAroundObject ( objectId, option: option) { rankings, count, error in
473+ XCTAssertEqual ( rankings? . count, 1 )
474+ XCTAssertGreaterThanOrEqual ( count, 1 )
475+ XCTAssertNil ( error)
476+ for item in rankings ?? [ ] {
477+ XCTAssertEqual ( item. statisticName, leaderboard0. statisticName)
478+ XCTAssertGreaterThanOrEqual ( item. rank, 0 )
479+ XCTAssertEqual ( item. value, 100 )
480+ XCTAssertEqual ( item. includedStatistics? . first? . name, statisticName1)
481+ XCTAssertEqual ( item. includedStatistics? . first? . value, 100 )
482+ XCTAssertEqual ( item. object? . objectId, objectId)
483+ XCTAssertNotNil ( ( item. object ? [ objectFieldKey] as? LCObject ) ? . createdAt)
484+ XCTAssertNil ( item. user)
485+ XCTAssertNil ( item. entity)
486+ }
487+ exp. fulfill ( )
488+ }
489+ leaderboard1. skip = 1
490+ leaderboard1. version = statistic1version
491+ leaderboard1. getObjectResults ( with: nil ) { rankings, count, error in
492+ for item in rankings ?? [ ] {
493+ XCTAssertNotEqual ( item. rank, 0 )
494+ }
495+ XCTAssertEqual ( count, 0 )
496+ XCTAssertNil ( error)
497+ exp. fulfill ( )
498+ }
499+ }
500+ }
501+
502+ func testGetEntityRankings( ) {
503+ let entityId = uuid
504+
505+ let statisticName0 = " test-entity-0 "
506+ let statisticName1 = " test-entity-1 "
507+ var statistic0version = - 1
508+ var statistic1version = - 1
509+
510+ useMasterKey ( )
511+ expecting { exp in
512+ LCLeaderboard . update (
513+ withIdentity: entityId,
514+ leaderboardPath: . entities,
515+ statistics: [
516+ statisticName0 : 100 ,
517+ statisticName1 : 100 ,
518+ ] )
519+ { statistics, error in
520+ XCTAssertEqual ( statistics? . count, 2 )
521+ XCTAssertNil ( error)
522+ XCTAssertNotEqual ( statistics? . first? . name, statistics? . last? . name)
523+ for item in statistics ?? [ ] {
524+ XCTAssertTrue ( [ statisticName0, statisticName1] . contains ( item. name ?? " " ) )
525+ XCTAssertEqual ( item. value, 100 )
526+ XCTAssertGreaterThanOrEqual ( item. version, 0 )
527+ if ( item. name ?? " " ) == statisticName0 {
528+ statistic0version = item. version
529+ } else {
530+ statistic1version = item. version
531+ }
532+ }
533+ exp. fulfill ( )
534+ }
535+ }
536+ useCommonKey ( )
537+
538+ let leaderboard0 = LCLeaderboard ( statisticName: statisticName0)
539+ let leaderboard1 = LCLeaderboard ( statisticName: statisticName1)
540+
541+ expecting ( count: 2 ) { exp in
542+ leaderboard0. limit = 1
543+ leaderboard0. includeStatistics = [ statisticName1]
544+ leaderboard0. version = statistic0version
545+ leaderboard0. returnCount = true
546+ leaderboard0. getEntityResultsAroundEntity ( entityId) { rankings, count, error in
547+ XCTAssertEqual ( rankings? . count, 1 )
548+ XCTAssertGreaterThanOrEqual ( count, 1 )
549+ XCTAssertNil ( error)
550+ for item in rankings ?? [ ] {
551+ XCTAssertEqual ( item. statisticName, leaderboard0. statisticName)
552+ XCTAssertGreaterThanOrEqual ( item. rank, 0 )
553+ XCTAssertEqual ( item. value, 100 )
554+ XCTAssertEqual ( item. includedStatistics? . first? . name, statisticName1)
555+ XCTAssertEqual ( item. includedStatistics? . first? . value, 100 )
556+ XCTAssertEqual ( item. entity, entityId)
557+ XCTAssertNil ( item. user)
558+ XCTAssertNil ( item. object)
559+ }
560+ exp. fulfill ( )
561+ }
562+ leaderboard1. skip = 1
563+ leaderboard1. version = statistic1version
564+ leaderboard1. getEntityResults { rankings, count, error in
565+ for item in rankings ?? [ ] {
566+ XCTAssertNotEqual ( item. rank, 0 )
567+ }
568+ XCTAssertEqual ( count, 0 )
569+ XCTAssertNil ( error)
570+ exp. fulfill ( )
571+ }
572+ }
573+ }
249574}
0 commit comments