From 0d820a4645ff673f865621e5ab7880a86b8b3e73 Mon Sep 17 00:00:00 2001
From: Diogo Guimaraes <guimaraes@uphold.com>
Date: Fri, 6 Nov 2015 13:03:11 +0000
Subject: [PATCH] Add tests to the reserve model

---
 Tests/Integration/Model/ReserveTest.swift | 151 ++++++++++++++++++++++
 Tests/Integration/Util/HeaderTest.swift   |  15 ++-
 UpholdSdk.xcodeproj/project.pbxproj       |   4 +
 3 files changed, 165 insertions(+), 5 deletions(-)
 create mode 100644 Tests/Integration/Model/ReserveTest.swift

diff --git a/Tests/Integration/Model/ReserveTest.swift b/Tests/Integration/Model/ReserveTest.swift
new file mode 100644
index 0000000..db1ac4f
--- /dev/null
+++ b/Tests/Integration/Model/ReserveTest.swift
@@ -0,0 +1,151 @@
+import XCTest
+import ObjectMapper
+import PromiseKit
+@testable import UpholdSdk
+@testable import SwiftClient
+
+/// Reserve integration tests.
+class ReserveTest: UpholdTestCase {
+
+    func testGetLedgerShouldReturnTheArrayWithDeposits() {
+        let expectation = expectationWithDescription("Reserve test.")
+        let json: String = "[{" +
+            "\"type\": \"foo\"," +
+            "\"out\": {" +
+                "\"amount\": \"foobar\"," +
+                "\"currency\": \"fuz\"" +
+            "}," +
+            "\"in\": {" +
+                "\"amount\": \"foobiz\"," +
+                "\"currency\": \"fiz\"" +
+            "}," +
+            "\"createdAt\": \"2015-04-20T14:57:12.398Z\"" +
+        "},{" +
+            "\"type\": \"bar\"," +
+            "\"out\": {" +
+                "\"amount\": \"foobiz\"," +
+                "\"currency\": \"buz\"" +
+            "}," +
+            "\"in\": {" +
+                "\"amount\": \"foobar\"," +
+                "\"currency\": \"biz\"" +
+            "}," +
+            "\"TransactionId\": \"foobar\"," +
+            "\"createdAt\": \"2015-04-21T14:57:12.398Z\"" +
+        "}]";
+        let reserve = UpholdClient().getReserve()
+        reserve.adapter = MockRestAdapter(body: json)
+
+        reserve.getLedger(0, end: 5).then { (deposits: [Deposit]) -> () in
+            XCTAssertEqual(deposits[0].createdAt, "2015-04-20T14:57:12.398Z", "Failed: DepositMovement in currency didn't match.")
+            XCTAssertEqual(deposits[0].input?.amount, "foobiz", "Failed: DepositMovement in amount didn't match.")
+            XCTAssertEqual(deposits[0].input?.currency, "fiz", "Failed: DepositMovement in currency didn't match.")
+            XCTAssertEqual(deposits[0].output?.amount, "foobar", "Failed: DepositMovement out amount didn't match.")
+            XCTAssertEqual(deposits[0].output?.currency, "fuz", "Failed: DepositMovement out currency didn't match.")
+            XCTAssertEqual(deposits[0].type, "foo", "Failed: Deposit type didn't match.")
+            XCTAssertEqual(deposits[1].createdAt, "2015-04-21T14:57:12.398Z", "Failed: CreatedAt didn't match.")
+            XCTAssertEqual(deposits[1].input?.amount, "foobar", "Failed: DepositMovement in amount didn't match.")
+            XCTAssertEqual(deposits[1].input?.currency, "biz", "Failed: DepositMovement in currency didn't match.")
+            XCTAssertEqual(deposits[1].output?.amount, "foobiz", "Failed: DepositMovement out amount didn't match.")
+            XCTAssertEqual(deposits[1].output?.currency, "buz", "Failed: DepositMovement out currency didn't match.")
+            XCTAssertEqual(deposits[1].transactionId, "foobar", "Failed: TransactionId didn't match.")
+            XCTAssertEqual(deposits[1].type, "bar", "Failed: Deposit type didn't match.")
+
+            expectation.fulfill()
+        }
+
+        wait()
+    }
+
+    func testGetStatisticsShouldReturnTheListWithReserveStatistics() {
+        let expectation = expectationWithDescription("Reserve test.")
+        let json: String = "[{" +
+            "\"currency\": \"FOO\"," +
+            "\"values\": [{" +
+                "\"assets\": \"foobar\"," +
+                "\"currency\": \"foo\"," +
+                "\"liabilities\": \"bar\"," +
+                "\"rate\": \"biz\"" +
+            "}]," +
+            "\"totals\": {" +
+                "\"commissions\": \"foo\"," +
+                "\"transactions\": \"bar\"," +
+                "\"assets\": \"foobar\"," +
+                "\"liabilities\": \"foobiz\"" +
+            "}" +
+        "}, {" +
+            "\"currency\": \"BAR\"," +
+            "\"values\": [{" +
+                "\"assets\": \"foobiz\"," +
+                "\"currency\": \"biz\"," +
+                "\"liabilities\": \"buz\"," +
+                "\"rate\": \"foo\"" +
+            "}]," +
+            "\"totals\": {" +
+                "\"commissions\": \"fiz\"," +
+                "\"transactions\": \"biz\"," +
+                "\"assets\": \"fuz\"," +
+                "\"liabilities\": \"buz\"" +
+            "}" +
+        "}]"
+        let reserve = UpholdClient().getReserve()
+        reserve.adapter = MockRestAdapter(body: json)
+
+        reserve.getStatistics().then { (statistics: [ReserveStatistics]) -> () in
+            XCTAssertEqual(statistics[0].currency, "FOO", "Failed: Currency didn't match.")
+            XCTAssertEqual(statistics[0].totals?.assets, "foobar", "Failed: Totals assets didn't match.")
+            XCTAssertEqual(statistics[0].totals?.commissions, "foo", "Failed: Totals comissions didn't match.")
+            XCTAssertEqual(statistics[0].totals?.transactions, "bar", "Failed: Totals transactions didn't match.")
+            XCTAssertEqual(statistics[0].totals?.liabilities, "foobiz", "Failed: Totals liabilities didn't match.")
+            XCTAssertEqual(statistics[0].values?.first?.assets, "foobar", "Failed: Values assests didn't match.")
+            XCTAssertEqual(statistics[0].values?.first?.currency, "foo", "Failed: Values currency didn't match.")
+            XCTAssertEqual(statistics[0].values?.first?.liabilities, "bar", "Failed: Values liabilities didn't match.")
+            XCTAssertEqual(statistics[0].values?.first?.rate, "biz", "Failed: Values rate didn't match.")
+            XCTAssertEqual(statistics[1].currency, "BAR", "Failed: Currency didn't match.")
+            XCTAssertEqual(statistics[1].totals?.assets, "fuz", "Failed: Totals assets didn't match.")
+            XCTAssertEqual(statistics[1].totals?.commissions, "fiz", "Failed: Totals comissions didn't match.")
+            XCTAssertEqual(statistics[1].totals?.transactions, "biz", "Failed: Totals transactions didn't match.")
+            XCTAssertEqual(statistics[1].totals?.liabilities, "buz", "Failed: Totals liabilities didn't match.")
+            XCTAssertEqual(statistics[1].values?.first?.assets, "foobiz", "Failed: Values assests didn't match.")
+            XCTAssertEqual(statistics[1].values?.first?.currency, "biz", "Failed: Values currency didn't match.")
+            XCTAssertEqual(statistics[1].values?.first?.liabilities, "buz", "Failed: Values liabilities didn't match.")
+            XCTAssertEqual(statistics[1].values?.first?.rate, "foo", "Failed: Values rate didn't match.")
+
+            expectation.fulfill()
+        }
+
+        wait()
+    }
+
+    func testGetTransactionsByIdShouldReturnTheTransaction() {
+        let expectation = expectationWithDescription("Reserve test.")
+        let json: String = "{ \"id\": \"foobar\" }"
+        let reserve = UpholdClient().getReserve()
+        reserve.adapter = MockRestAdapter(body: json)
+
+        reserve.getTransactionById("foobar").then { (transaction: Transaction) -> () in
+            XCTAssertEqual(transaction.id, "foobar", "Failed: TransactionId didn't match.")
+
+            expectation.fulfill()
+        }
+
+        wait()
+    }
+
+    func testGetTransactionsShouldReturnTheListOfTransactions() {
+        let expectation = expectationWithDescription("Reserve test.")
+        let json: String = "[{ \"id\": \"foobar\" }, { \"id\": \"foobiz\" }]"
+        let reserve = UpholdClient().getReserve()
+        reserve.adapter = MockRestAdapter(body: json)
+
+        reserve.getTransactions(0, end: 5).then { (transaction: [Transaction]) -> () in
+            XCTAssertEqual(transaction.first?.id, "foobar", "Failed: TransactionId didn't match.")
+            XCTAssertEqual(transaction.last?.id, "foobiz", "Failed: TransactionId didn't match.")
+
+            expectation.fulfill()
+        }
+
+        wait()
+    }
+
+}
diff --git a/Tests/Integration/Util/HeaderTest.swift b/Tests/Integration/Util/HeaderTest.swift
index efbdb85..ad52df3 100644
--- a/Tests/Integration/Util/HeaderTest.swift
+++ b/Tests/Integration/Util/HeaderTest.swift
@@ -5,19 +5,24 @@ import UpholdSdk
 /// Header integration tests.
 class HeaderTest: XCTestCase {
 
+    func testBuildRangeHeaderShouldReturnRange() {
+        XCTAssertEqual(Header.buildRangeHeader(0, end: 5), "items=0-5", "Failed: Wrong value.")
+    }
+
     func testGetDefaultHeadersShouldReturnHeaders() {
         let headers: [String: String] = Header.getDefaultHeaders()
 
-        XCTAssertEqual(headers["User-Agent"], String(format: "uphold-ios-sdk/%@ (%@)", GlobalConfigurations.UPHOLD_SDK_VERSION, GlobalConfigurations.SDK_GITHUB_URL), "Failed: Wrong header")
+        XCTAssertEqual(headers["User-Agent"], String(format: "uphold-ios-sdk/%@ (%@)", GlobalConfigurations.UPHOLD_SDK_VERSION, GlobalConfigurations.SDK_GITHUB_URL), "Failed: Wrong header.")
     }
 
     func testGetRateLimitValueShouldReturnRateLimit() {
-        XCTAssertEqual(Header.getRateLimitValue(["x-ratelimit-limit": "300"]), "300", "Failed: Wrong value")
-        XCTAssertNotEqual(Header.getRateLimitValue(["foobar": "300"]), "300", "Failed: Wrong value")
+        XCTAssertEqual(Header.getRateLimitValue(["x-ratelimit-limit": "300"]), "300", "Failed: Wrong value.")
+        XCTAssertNotEqual(Header.getRateLimitValue(["foobar": "300"]), "300", "Failed: Wrong value.")
     }
 
     func testGetSecondsUntilRateLimitResetShouldReturnResetTime() {
-        XCTAssertEqual(Header.getSecondsUntilRateLimitReset(["retry-after": "10"]), "10", "Failed: Wrong value")
-        XCTAssertNotEqual(Header.getSecondsUntilRateLimitReset(["foobar": "10"]), "10", "Failed: Wrong value")
+        XCTAssertEqual(Header.getSecondsUntilRateLimitReset(["retry-after": "10"]), "10", "Failed: Wrong value.")
+        XCTAssertNotEqual(Header.getSecondsUntilRateLimitReset(["foobar": "10"]), "10", "Failed: Wrong value.")
     }
+
 }
diff --git a/UpholdSdk.xcodeproj/project.pbxproj b/UpholdSdk.xcodeproj/project.pbxproj
index 154ff45..1214de2 100644
--- a/UpholdSdk.xcodeproj/project.pbxproj
+++ b/UpholdSdk.xcodeproj/project.pbxproj
@@ -51,6 +51,7 @@
 		BC91E8A21BECD8270074C538 /* ReserveStatistics.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC91E89D1BECD8270074C538 /* ReserveStatistics.swift */; };
 		BC91E8A31BECD8270074C538 /* Total.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC91E89E1BECD8270074C538 /* Total.swift */; };
 		BC91E8A41BECD8270074C538 /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC91E89F1BECD8270074C538 /* Value.swift */; };
+		BC91E8A61BECDB030074C538 /* ReserveTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC91E8A51BECDB030074C538 /* ReserveTest.swift */; };
 		BCB089911BD52DC20097C475 /* UpholdRestAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCB089901BD52DC20097C475 /* UpholdRestAdapter.swift */; };
 		BCB089B81BD52F270097C475 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCB089A71BD52EEC0097C475 /* PromiseKit.framework */; };
 		BCC1EB2F1BE3939800F37B7D /* UpholdClientErrorHandlingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC1EB2E1BE3939800F37B7D /* UpholdClientErrorHandlingTest.swift */; };
@@ -271,6 +272,7 @@
 		BC91E89D1BECD8270074C538 /* ReserveStatistics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ReserveStatistics.swift; path = Reserve/ReserveStatistics.swift; sourceTree = "<group>"; };
 		BC91E89E1BECD8270074C538 /* Total.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Total.swift; path = Reserve/Total.swift; sourceTree = "<group>"; };
 		BC91E89F1BECD8270074C538 /* Value.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Reserve/Value.swift; sourceTree = "<group>"; };
+		BC91E8A51BECDB030074C538 /* ReserveTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReserveTest.swift; sourceTree = "<group>"; };
 		BCB089901BD52DC20097C475 /* UpholdRestAdapter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpholdRestAdapter.swift; sourceTree = "<group>"; };
 		BCB0899A1BD52EEC0097C475 /* PromiseKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PromiseKit.xcodeproj; path = Carthage/Checkouts/PromiseKit/PromiseKit.xcodeproj; sourceTree = "<group>"; };
 		BCC1EB2E1BE3939800F37B7D /* UpholdClientErrorHandlingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UpholdClientErrorHandlingTest.swift; path = ErrorHandling/UpholdClientErrorHandlingTest.swift; sourceTree = "<group>"; };
@@ -437,6 +439,7 @@
 			children = (
 				BC23817B1BB4627C0060CC80 /* CardTest.swift */,
 				BC23817C1BB4627C0060CC80 /* RateTest.swift */,
+				BC91E8A51BECDB030074C538 /* ReserveTest.swift */,
 				BC23817D1BB4627C0060CC80 /* TransactionTest.swift */,
 				BC23817E1BB4627C0060CC80 /* UserTest.swift */,
 			);
@@ -928,6 +931,7 @@
 				BC38DA001BB97E4F0044239A /* TickerServiceTest.swift in Sources */,
 				BC2381821BB4627C0060CC80 /* TransactionTest.swift in Sources */,
 				BC2381801BB4627C0060CC80 /* CardTest.swift in Sources */,
+				BC91E8A61BECDB030074C538 /* ReserveTest.swift in Sources */,
 				BC7E73FD1BEA7BB6006AAE0E /* UpholdClientTest.swift in Sources */,
 				BCC9E0B01BD10F4300C5C3C8 /* HeaderTest.swift in Sources */,
 				BC38D9FF1BB97E4F0044239A /* ReserveServiceTest.swift in Sources */,