@@ -5,34 +5,70 @@ import XCTest
55///
66final class LeaderboardsRemoteV4Tests : XCTestCase {
77
8- let network = MockNetwork ( )
9- let sampleSiteID : Int64 = 1234
8+ private let network = MockNetwork ( )
9+ private let sampleSiteID : Int64 = 1234
1010
1111 override func setUp( ) {
1212 super. setUp ( )
1313 network. removeAllSimulatedResponses ( )
1414 }
1515
16- func testLeaderboardReturnsCorrectParsedValues ( ) throws {
16+ func test_leaderboard_returns_correctly_parsed_values ( ) throws {
1717 // Given
1818 let remote = LeaderboardsRemote ( network: network)
19- network. simulateResponse ( requestUrlSuffix: " leaderboards " , filename: " leaderboards-year " )
19+ network. simulateResponse ( requestUrlSuffix: " leaderboards/products " , filename: " leaderboards-year " )
2020
2121 // When
22- var remoteResult : Result < [ Leaderboard ] , Error > ?
23- waitForExpectation { exp in
24- remote. loadLeaderboards ( for: sampleSiteID,
22+ let result = waitFor { promise in
23+ remote. loadLeaderboards ( for: self . sampleSiteID,
2524 unit: . yearly,
2625 earliestDateToInclude: " 2020-01-01T00:00:00 " ,
2726 latestDateToInclude: " 2020-12-31T23:59:59 " ,
2827 quantity: 3 ) { result in
29- remoteResult = result
30- exp. fulfill ( )
28+ promise ( result)
29+ }
30+ }
31+
32+ // Then
33+ let leaderboards = try XCTUnwrap ( result. get ( ) )
34+
35+ // API Returns 4 leaderboards
36+ XCTAssertEqual ( leaderboards. count, 4 )
37+
38+ // The 4th leaderboard contains the top products and should not be empty
39+ let topProducts = leaderboards [ 3 ]
40+ XCTAssertFalse ( topProducts. rows. isEmpty)
41+
42+ // Each product should have non-empty values
43+ let expectedValues = [ ( quantity: 4 , total: 20000.0 ) , ( quantity: 1 , total: 15.99 ) ]
44+ zip ( topProducts. rows, expectedValues) . forEach { product, expectedValue in
45+ XCTAssertFalse ( product. subject. display. isEmpty)
46+ XCTAssertFalse ( product. subject. value. isEmpty)
47+ XCTAssertFalse ( product. quantity. display. isEmpty)
48+ XCTAssertEqual ( product. quantity. value, expectedValue. quantity)
49+ XCTAssertFalse ( product. total. display. isEmpty)
50+ XCTAssertEqual ( product. total. value, expectedValue. total)
51+ }
52+ }
53+
54+ func test_leaderboardDeprecated_returns_correctly_parsed_values( ) throws {
55+ // Given
56+ let remote = LeaderboardsRemote ( network: network)
57+ network. simulateResponse ( requestUrlSuffix: " leaderboards " , filename: " leaderboards-year " )
58+
59+ // When
60+ let result = waitFor { promise in
61+ remote. loadLeaderboardsDeprecated ( for: self . sampleSiteID,
62+ unit: . yearly,
63+ earliestDateToInclude: " 2020-01-01T00:00:00 " ,
64+ latestDateToInclude: " 2020-12-31T23:59:59 " ,
65+ quantity: 3 ) { result in
66+ promise ( result)
3167 }
3268 }
3369
3470 // Then
35- let leaderboards = try XCTUnwrap ( remoteResult ? . get ( ) )
71+ let leaderboards = try XCTUnwrap ( result . get ( ) )
3672
3773 // API Returns 4 leaderboards
3874 XCTAssertEqual ( leaderboards. count, 4 )
@@ -41,7 +77,7 @@ final class LeaderboardsRemoteV4Tests: XCTestCase {
4177 let topProducts = leaderboards [ 3 ]
4278 XCTAssertFalse ( topProducts. rows. isEmpty)
4379
44- // Each prodcut should have non-empty values
80+ // Each product should have non-empty values
4581 let expectedValues = [ ( quantity: 4 , total: 20000.0 ) , ( quantity: 1 , total: 15.99 ) ]
4682 zip ( topProducts. rows, expectedValues) . forEach { product, expectedValue in
4783 XCTAssertFalse ( product. subject. display. isEmpty)
@@ -53,7 +89,7 @@ final class LeaderboardsRemoteV4Tests: XCTestCase {
5389 }
5490 }
5591
56- func testLeaderboardsProperlyRelaysNetwokingErrors ( ) {
92+ func testLeaderboardsProperlyRelaysNetworkingErrors ( ) {
5793 // Given
5894 let remote = LeaderboardsRemote ( network: network)
5995
0 commit comments