Skip to content

Commit c5595ec

Browse files
committed
Merge remote-tracking branch 'origin/develop' into issue/90-load-sites-remote
2 parents 9d4928c + 9faac23 commit c5595ec

File tree

28 files changed

+973
-73
lines changed

28 files changed

+973
-73
lines changed

Networking/Networking/Model/Address.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public struct Address: Decodable {
1313
public let state: String
1414
public let postcode: String
1515
public let country: String
16+
public let phone: String?
17+
public let email: String?
1618
}
1719

1820

@@ -30,6 +32,8 @@ private extension Address {
3032
case state = "state"
3133
case postcode = "postcode"
3234
case country = "country"
35+
case phone = "phone"
36+
case email = "email"
3337
}
3438
}
3539

@@ -46,7 +50,9 @@ extension Address: Comparable {
4650
lhs.city == rhs.city &&
4751
lhs.state == rhs.state &&
4852
lhs.postcode == rhs.postcode &&
49-
lhs.country == rhs.country
53+
lhs.country == rhs.country &&
54+
lhs.phone == rhs.phone &&
55+
lhs.email == rhs.email
5056
}
5157

5258
public static func < (lhs: Address, rhs: Address) -> Bool {

Networking/Networking/Remote/OrdersRemote.swift

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,31 @@ public class OrdersRemote: Remote {
1212
/// - siteID: Site for which we'll fetch remote orders.
1313
/// - completion: Closure to be executed upon completion.
1414
///
15-
public func loadAllOrders(for siteID: Int, completion: @escaping ([Order]?, Error?) -> Void) {
16-
let path = "orders"
17-
let request = JetpackRequest(wooApiVersion: .mark2, method: .get, siteID: siteID, path: path)
15+
public func loadAllOrders(for siteID: Int, page: Int = 1, completion: @escaping ([Order]?, Error?) -> Void) {
16+
let path = Constants.ordersPath
17+
let parameters = [ParameterKeys.page: String(page),
18+
ParameterKeys.perPage: String(Constants.defaultPageSize)]
19+
let request = JetpackRequest(wooApiVersion: .mark2, method: .get, siteID: siteID, path: path, parameters: parameters)
1820
let mapper = OrderListMapper()
1921

2022
enqueue(request, mapper: mapper, completion: completion)
2123
}
2224

25+
/// Retrieves a specific `Order`
26+
///
27+
/// - Parameters:
28+
/// - siteID: Site for which we'll fetch remote orders.
29+
/// - orderID: Order for which we'll fetch remote orders.
30+
/// - completion: Closure to be executed upon completion.
31+
///
32+
public func loadOrder(for siteID: Int, orderID: Int, completion: @escaping (Order?, Error?) -> Void) {
33+
let path = "\(Constants.ordersPath)/\(orderID)"
34+
let request = JetpackRequest(wooApiVersion: .mark2, method: .get, siteID: siteID, path: path, parameters: nil)
35+
let mapper = OrderMapper()
36+
37+
enqueue(request, mapper: mapper, completion: completion)
38+
}
39+
2340
/// Updates the `OrderStatus` of a given Order.
2441
///
2542
/// - Parameters:
@@ -29,11 +46,27 @@ public class OrdersRemote: Remote {
2946
/// - completion: Closure to be executed upon completion.
3047
///
3148
public func updateOrder(from siteID: Int, orderID: Int, status: String, completion: @escaping (Order?, Error?) -> Void) {
32-
let path = "orders/" + String(orderID)
33-
let parameters = ["status": status]
49+
let path = "\(Constants.ordersPath)/" + String(orderID)
50+
let parameters = [ParameterKeys.status: status]
3451
let mapper = OrderMapper()
3552

3653
let request = JetpackRequest(wooApiVersion: .mark2, method: .post, siteID: siteID, path: path, parameters: parameters)
3754
enqueue(request, mapper: mapper, completion: completion)
3855
}
3956
}
57+
58+
59+
// MARK: - Constants!
60+
//
61+
private extension OrdersRemote {
62+
enum Constants {
63+
static let defaultPageSize: Int = 75
64+
static let ordersPath: String = "orders"
65+
}
66+
67+
enum ParameterKeys {
68+
static let status: String = "status"
69+
static let page: String = "page"
70+
static let perPage: String = "per_page"
71+
}
72+
}

Networking/NetworkingTests/Remote/OrdersRemoteTests.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,23 @@ class OrdersRemoteTests: XCTestCase {
4444
wait(for: [expectation], timeout: Constants.expectationTimeout)
4545
}
4646

47+
/// Verifies that loadOrder properly parses the `order` sample response.
48+
///
49+
func testLoadSingleOrderProperlyReturnsParsedOrder() {
50+
let remote = OrdersRemote(network: network)
51+
let expectation = self.expectation(description: "Load Order")
52+
53+
network.simulateResponse(requestUrlSuffix: "orders/\(sampleOrderID)", filename: "order")
54+
55+
remote.loadOrder(for: sampleSiteID, orderID: sampleOrderID) { order, error in
56+
XCTAssertNil(error)
57+
XCTAssertNotNil(order)
58+
expectation.fulfill()
59+
}
60+
61+
wait(for: [expectation], timeout: Constants.expectationTimeout)
62+
}
63+
4764
/// Verifies that loadAllOrders properly relays Networking Layer errors.
4865
///
4966
func testLoadAllOrdersProperlyRelaysNetwokingErrors() {

Storage/Storage.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
B505F6DB20BEEA3200BB1B69 /* Account+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = B505F6D920BEEA3200BB1B69 /* Account+CoreDataClass.swift */; };
1414
B505F6DE20BEEA4F00BB1B69 /* CoreDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B505F6DD20BEEA4F00BB1B69 /* CoreDataManager.swift */; };
1515
B505F6E020BEEA8100BB1B69 /* StorageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B505F6DF20BEEA8100BB1B69 /* StorageType.swift */; };
16-
B52B0F7920AA287C00477698 /* StorageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52B0F7820AA287C00477698 /* StorageManager.swift */; };
16+
B52B0F7920AA287C00477698 /* StorageManagerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52B0F7820AA287C00477698 /* StorageManagerType.swift */; };
1717
B52B0F7B20AA28A800477698 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52B0F7A20AA28A800477698 /* Object.swift */; };
1818
B54CA5A320A4BBA600F38CD1 /* Storage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B54CA59920A4BBA500F38CD1 /* Storage.framework */; };
1919
B54CA5AA20A4BBA600F38CD1 /* Storage.h in Headers */ = {isa = PBXBuildFile; fileRef = B54CA59C20A4BBA500F38CD1 /* Storage.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -49,7 +49,7 @@
4949
B505F6D920BEEA3200BB1B69 /* Account+CoreDataClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Account+CoreDataClass.swift"; sourceTree = "<group>"; };
5050
B505F6DD20BEEA4F00BB1B69 /* CoreDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataManager.swift; sourceTree = "<group>"; };
5151
B505F6DF20BEEA8100BB1B69 /* StorageType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageType.swift; sourceTree = "<group>"; };
52-
B52B0F7820AA287C00477698 /* StorageManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageManager.swift; sourceTree = "<group>"; };
52+
B52B0F7820AA287C00477698 /* StorageManagerType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageManagerType.swift; sourceTree = "<group>"; };
5353
B52B0F7A20AA28A800477698 /* Object.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Object.swift; sourceTree = "<group>"; };
5454
B54CA59920A4BBA500F38CD1 /* Storage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Storage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5555
B54CA59C20A4BBA500F38CD1 /* Storage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Storage.h; sourceTree = "<group>"; };
@@ -115,7 +115,7 @@
115115
isa = PBXGroup;
116116
children = (
117117
B52B0F7A20AA28A800477698 /* Object.swift */,
118-
B52B0F7820AA287C00477698 /* StorageManager.swift */,
118+
B52B0F7820AA287C00477698 /* StorageManagerType.swift */,
119119
B505F6DF20BEEA8100BB1B69 /* StorageType.swift */,
120120
);
121121
path = Protocols;
@@ -396,7 +396,7 @@
396396
B505F6DB20BEEA3200BB1B69 /* Account+CoreDataClass.swift in Sources */,
397397
B54CA5BD20A4BD3B00F38CD1 /* NSManagedObjectContext+Storage.swift in Sources */,
398398
B59E11DA20A9D00C004121A4 /* WooCommerce.xcdatamodeld in Sources */,
399-
B52B0F7920AA287C00477698 /* StorageManager.swift in Sources */,
399+
B52B0F7920AA287C00477698 /* StorageManagerType.swift in Sources */,
400400
B505F6E020BEEA8100BB1B69 /* StorageType.swift in Sources */,
401401
B54CA5C920A4C17800F38CD1 /* NSObject+Storage.swift in Sources */,
402402
B505F6DA20BEEA3200BB1B69 /* Account+CoreDataProperties.swift in Sources */,

Storage/Storage/CoreData/CoreDataManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import CoreData
44

55
/// CoreDataManager: Manages the entire CoreData Stack. Conforms to the StorageManager API.
66
///
7-
public class CoreDataManager: StorageManager {
7+
public class CoreDataManager: StorageManagerType {
88

99
/// Storage Identifier.
1010
///

Storage/Storage/Protocols/StorageManager.swift renamed to Storage/Storage/Protocols/StorageManagerType.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Foundation
33

44
/// Defines the methods and properties implemented by any concrete StorageManager implementation.
55
///
6-
public protocol StorageManager {
6+
public protocol StorageManagerType {
77

88
/// Returns the `Storage` associated to the main thread.
99
///

WooCommerce/Classes/Authentication/AuthenticationManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Foundation
22
import WordPressAuthenticator
33
import WordPressUI
4-
import Networking
4+
import Yosemite
55

66

77

WooCommerce/Classes/System/CredentialsManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Foundation
2-
import Networking
2+
import Yosemite
33
import KeychainAccess
44

55

WooCommerce/Classes/Yosemite/AuthenticatedState.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ class AuthenticatedState: StoresManagerState {
3434
let network = AlamofireNetwork(credentials: credentials)
3535

3636
services = [
37-
AccountStore(dispatcher: dispatcher, storageManager: storageManager, network: network)
37+
AccountStore(dispatcher: dispatcher, storageManager: storageManager, network: network),
38+
OrderStore(dispatcher: dispatcher, storageManager: storageManager, network: network)
3839
]
3940

4041
self.credentials = credentials

WooCommerce/Classes/Yosemite/StoresManager.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import Foundation
22
import Yosemite
33
import Storage
4-
import Networking
54

65

76

0 commit comments

Comments
 (0)