Skip to content

Commit e3571f9

Browse files
authored
[Shipping labels] Add Yosemite support for getting list of packages (#14435)
2 parents beff276 + 20d03dc commit e3571f9

File tree

4 files changed

+58
-0
lines changed

4 files changed

+58
-0
lines changed

Yosemite/Yosemite/Actions/WooShippingAction.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,9 @@ public enum WooShippingAction: Action {
1616
destinationAddress: ShippingLabelAddress,
1717
packages: [ShippingLabelPackageSelected],
1818
completion: (Result<[ShippingLabelCarriersAndRates], Error>) -> Void)
19+
20+
/// Fetch list of packages.
21+
///
22+
case loadPackages(siteID: Int64,
23+
completion: (Result<WooShippingPackagesResponse, Error>) -> Void)
1924
}

Yosemite/Yosemite/Model/Model.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,9 @@ public typealias TopEarnerStatsItem = Networking.TopEarnerStatsItem
179179
public typealias User = Networking.User
180180
public typealias WooAPIVersion = Networking.WooAPIVersion
181181
public typealias WooShippingCustomPackage = Networking.WooShippingCustomPackage
182+
public typealias WooShippingPredefinedPackage = Networking.WooShippingPredefinedPackage
182183
public typealias WooShippingCreatePackageResponse = Networking.WooShippingCreatePackageResponse
184+
public typealias WooShippingPackagesResponse = Networking.WooShippingPackagesResponse
183185
public typealias WPComPlan = Networking.WPComPlan
184186
public typealias WPComSitePlan = Networking.WPComSitePlan
185187
public typealias LoadSiteCurrentPlanError = Networking.LoadSiteCurrentPlanError

Yosemite/Yosemite/Stores/WooShippingStore.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ public final class WooShippingStore: Store {
3939
destinationAddress: destinationAddress,
4040
packages: packages,
4141
completion: completion)
42+
case .loadPackages(let siteID, completion: let completion):
43+
loadPackages(siteID: siteID, completion: completion)
4244
}
4345
}
4446
}
@@ -71,4 +73,9 @@ private extension WooShippingStore {
7173
packages: packages,
7274
completion: completion)
7375
}
76+
77+
func loadPackages(siteID: Int64,
78+
completion: @escaping (Result<WooShippingPackagesResponse, Error>) -> Void) {
79+
remote.loadPackages(siteID: siteID, completion: completion)
80+
}
7481
}

Yosemite/YosemiteTests/Stores/WooShippingStoreTests.swift

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,50 @@ final class WooShippingStoreTests: XCTestCase {
130130
let error = try XCTUnwrap(result.failure)
131131
XCTAssertEqual(error as? NetworkError, expectedError)
132132
}
133+
134+
// MARK: `loadPackages`
135+
136+
func test_loadPackages_returns_success_response_with_rates() throws {
137+
// Given
138+
let remote = MockWooShippingRemote()
139+
let response = WooShippingPackagesResponse.fake().copy(customPackages: [WooShippingCustomPackage.fake()])
140+
remote.whenLoadPackages(siteID: sampleSiteID, thenReturn: .success(response))
141+
let store = WooShippingStore(dispatcher: dispatcher, storageManager: storageManager, network: network, remote: remote)
142+
143+
// When
144+
let result: Result<WooShippingPackagesResponse, Error> = waitFor { promise in
145+
let action = WooShippingAction.loadPackages(siteID: self.sampleSiteID) { result in
146+
promise(result)
147+
}
148+
store.onAction(action)
149+
}
150+
151+
// Then
152+
XCTAssertTrue(result.isSuccess)
153+
let actualResponse = try result.get()
154+
XCTAssertEqual(actualResponse, response)
155+
}
156+
157+
func test_loadPackages_returns_error_on_failure() throws {
158+
// Given
159+
let remote = MockWooShippingRemote()
160+
let expectedError = NetworkError.notFound()
161+
remote.whenLoadPackages(siteID: sampleSiteID, thenReturn: .failure(expectedError))
162+
let store = WooShippingStore(dispatcher: dispatcher, storageManager: storageManager, network: network, remote: remote)
163+
164+
// When
165+
let result: Result<WooShippingPackagesResponse, Error> = waitFor { promise in
166+
let action = WooShippingAction.loadPackages(siteID: self.sampleSiteID) { result in
167+
promise(result)
168+
}
169+
store.onAction(action)
170+
}
171+
172+
// Then
173+
XCTAssertTrue(result.isFailure)
174+
let error = try XCTUnwrap(result.failure)
175+
XCTAssertEqual(error as? NetworkError, expectedError)
176+
}
133177
}
134178

135179
private extension WooShippingStoreTests {

0 commit comments

Comments
 (0)