Skip to content

Commit

Permalink
[Shipping labels] Add Yosemite support for updating origin address (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
rachelmcr authored Jan 22, 2025
2 parents 3d8e8c4 + 1605087 commit b0f4522
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 1 deletion.
7 changes: 7 additions & 0 deletions Yosemite/Yosemite/Actions/WooShippingAction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,11 @@ public enum WooShippingAction: Action {
case validateAddress(siteID: Int64,
address: ShippingLabelAddress,
completion: (Result<WooShippingAddressValidationSuccess, Error>) -> Void)

/// Update an origin address.
///
case updateOriginAddress(siteID: Int64,
address: WooShippingOriginAddress,
isVerified: Bool,
completion: (Result<WooShippingOriginAddressUpdate, Error>) -> Void)
}
9 changes: 9 additions & 0 deletions Yosemite/Yosemite/Stores/WooShippingStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ public final class WooShippingStore: Store {
loadOriginAddresses(siteID: siteID, completion: completion)
case let .validateAddress(siteID, address, completion):
validateAddress(siteID: siteID, address: address, completion: completion)
case let .updateOriginAddress(siteID, address, isVerified, completion):
updateOriginAddress(siteID: siteID, address: address, isVerified: isVerified, completion: completion)
}
}
}
Expand Down Expand Up @@ -258,6 +260,13 @@ private extension WooShippingStore {
completion: @escaping (Result<WooShippingAddressValidationSuccess, Error>) -> Void) {
remote.addressValidation(siteID: siteID, address: address, completion: completion)
}

func updateOriginAddress(siteID: Int64,
address: WooShippingOriginAddress,
isVerified: Bool,
completion: @escaping (Result<WooShippingOriginAddressUpdate, Error>) -> Void) {
remote.updateOriginAddress(siteID: siteID, address: address, isVerified: isVerified, completion: completion)
}
}

// MARK: - Storage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ final class MockWooShippingRemote {
}

/// Set the value passed to the `completion` block if `updateOriginAddress` is called.
func whenupdatingOriginAddress(siteID: Int64,
func whenUpdatingOriginAddress(siteID: Int64,
thenReturn result: Result<WooShippingOriginAddressUpdate, Error>) {
let key = ResultKey(siteID: siteID)
updateOriginAddress[key] = result
Expand Down
46 changes: 46 additions & 0 deletions Yosemite/YosemiteTests/Stores/WooShippingStoreTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,52 @@ final class WooShippingStoreTests: XCTestCase {
let error = try XCTUnwrap(result.failure)
XCTAssertEqual(error as? WooShippingAddressValidationError, expectedError)
}

// MARK: `updateOriginAddress`

func test_updateOriginAddress_returns_success_response() throws {
// Given
let remote = MockWooShippingRemote()
let expectedAddressUpdate = WooShippingOriginAddressUpdate(address: WooShippingOriginAddress.fake(), isVerified: true)
remote.whenUpdatingOriginAddress(siteID: sampleSiteID, thenReturn: .success(expectedAddressUpdate))
let store = WooShippingStore(dispatcher: dispatcher, storageManager: storageManager, network: network, remote: remote)

// When
let result: Result<WooShippingOriginAddressUpdate, Error> = waitFor { promise in
let action = WooShippingAction.updateOriginAddress(siteID: self.sampleSiteID,
address: WooShippingOriginAddress.fake(),
isVerified: false) { result in
promise(result)
}
store.onAction(action)
}

// Then
let actualAddressUpdate = try XCTUnwrap(result.get())
XCTAssertEqual(actualAddressUpdate, expectedAddressUpdate)
}

func test_updateOriginAddress_returns_error_on_failure() throws {
// Given
let remote = MockWooShippingRemote()
let expectedError = NetworkError.timeout()
remote.whenUpdatingOriginAddress(siteID: sampleSiteID, thenReturn: .failure(expectedError))
let store = WooShippingStore(dispatcher: dispatcher, storageManager: storageManager, network: network, remote: remote)

// When
let result: Result<WooShippingOriginAddressUpdate, Error> = waitFor { promise in
let action = WooShippingAction.updateOriginAddress(siteID: self.sampleSiteID,
address: WooShippingOriginAddress.fake(),
isVerified: false) { result in
promise(result)
}
store.onAction(action)
}

// Then
let error = try XCTUnwrap(result.failure)
XCTAssertEqual(error as? NetworkError, expectedError)
}
}

private extension WooShippingStoreTests {
Expand Down

0 comments on commit b0f4522

Please sign in to comment.