Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Shipping labels] Add Yosemite support for address validation #14934

Merged
merged 2 commits into from
Jan 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions Fakes/Fakes/Networking.generated.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2761,6 +2761,23 @@ extension Networking.WooShippingAccountSettings {
)
}
}
extension Networking.WooShippingAddress {
/// Returns a "ready to use" type filled with fake values.
///
public static func fake() -> Networking.WooShippingAddress {
.init(
company: .fake(),
name: .fake(),
phone: .fake(),
country: .fake(),
state: .fake(),
address1: .fake(),
address2: .fake(),
city: .fake(),
postcode: .fake()
)
}
}
extension Networking.WooShippingCarrierPredefinedOptions {
/// Returns a "ready to use" type filled with fake values.
///
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import Codegen

/// Represents an address for the WooCommerce Shipping extension.
///
public struct WooShippingAddress: Equatable {
public struct WooShippingAddress: Equatable, GeneratedFakeable {
/// The name of the company at the address.
public let company: String

Expand Down
6 changes: 6 additions & 0 deletions Yosemite/Yosemite/Actions/WooShippingAction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,10 @@ public enum WooShippingAction: Action {
///
case loadOriginAddresses(siteID: Int64,
completion: (Result<[WooShippingOriginAddress], Error>) -> Void)

/// Validate a shipping address.
///
case validateAddress(siteID: Int64,
address: ShippingLabelAddress,
completion: (Result<WooShippingAddressValidationSuccess, Error>) -> Void)
}
2 changes: 2 additions & 0 deletions Yosemite/Yosemite/Model/Model.swift
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,8 @@ public typealias TopEarnerStats = Networking.TopEarnerStats
public typealias TopEarnerStatsItem = Networking.TopEarnerStatsItem
public typealias User = Networking.User
public typealias WooAPIVersion = Networking.WooAPIVersion
public typealias WooShippingAddressValidationSuccess = Networking.WooShippingAddressValidationSuccess
public typealias WooShippingAddressValidationError = Networking.WooShippingAddressValidationError
public typealias WooShippingCustomPackage = Networking.WooShippingCustomPackage
public typealias WooShippingSavedPredefinedPackage = Networking.WooShippingSavedPredefinedPackage
public typealias WooShippingPredefinedOption = Networking.WooShippingPredefinedOption
Expand Down
8 changes: 8 additions & 0 deletions Yosemite/Yosemite/Stores/WooShippingStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ public final class WooShippingStore: Store {
printLabel(siteID: siteID, labelIDs: labelIDs, paperSize: paperSize, completion: completion)
case .loadOriginAddresses(let siteID, let completion):
loadOriginAddresses(siteID: siteID, completion: completion)
case let .validateAddress(siteID, address, completion):
validateAddress(siteID: siteID, address: address, completion: completion)
}
}
}
Expand Down Expand Up @@ -250,6 +252,12 @@ private extension WooShippingStore {
}
}
}

func validateAddress(siteID: Int64,
address: ShippingLabelAddress,
completion: @escaping (Result<WooShippingAddressValidationSuccess, Error>) -> Void) {
remote.addressValidation(siteID: siteID, address: address, completion: completion)
}
}

// MARK: - Storage
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 @@ -604,6 +604,52 @@ final class WooShippingStoreTests: XCTestCase {
// Then
XCTAssertEqual(error as? NetworkError, expectedError)
}

// MARK: `validateAddress`

func test_validateAddress_returns_WooShippingAddressValidationSuccess_on_success() throws {
// Given
let remote = MockWooShippingRemote()
let expectedResult = WooShippingAddressValidationSuccess(normalizedAddress: WooShippingAddress.fake(),
originalAddress: WooShippingAddress.fake(),
isTrivialNormalization: true)
remote.whenAddressValidation(siteID: sampleSiteID, thenReturn: .success(expectedResult))
let store = WooShippingStore(dispatcher: dispatcher, storageManager: storageManager, network: network, remote: remote)

// When
let result: Result<WooShippingAddressValidationSuccess, Error> = waitFor { promise in
let action = WooShippingAction.validateAddress(siteID: self.sampleSiteID,
address: ShippingLabelAddress.fake()) { result in
promise(result)
}
store.onAction(action)
}

// Then
let validationSuccess = try XCTUnwrap(result.get())
XCTAssertEqual(validationSuccess, expectedResult)
}

func test_validateAddress_returns_error_on_failure() throws {
// Given
let remote = MockWooShippingRemote()
let expectedError = WooShippingAddressValidationError(addressError: "House number not found", generalError: nil, nameError: nil)
remote.whenAddressValidation(siteID: sampleSiteID, thenReturn: .failure(expectedError))
let store = WooShippingStore(dispatcher: dispatcher, storageManager: storageManager, network: network, remote: remote)

// When
let result: Result<WooShippingAddressValidationSuccess, Error> = waitFor { promise in
let action = WooShippingAction.validateAddress(siteID: self.sampleSiteID,
address: ShippingLabelAddress.fake()) { result in
promise(result)
}
store.onAction(action)
}

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

private extension WooShippingStoreTests {
Expand Down
Loading