Skip to content
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
Original file line number Diff line number Diff line change
Expand Up @@ -132,14 +132,15 @@ final class WooShippingRemoteTests: XCTestCase {
let remote = WooShippingRemote(network: network)
network.simulateResponse(requestUrlSuffix: "label/rate", filename: "wooshipping-get-label-rates-success")
let expectedDefaultRate = sampleLabelRate()
let expectedPackage = ShippingLabelPackageSelected.fake().copy(length: 12, width: 20, height: 0)

// When
let result: Result<[ShippingLabelCarriersAndRates], Error> = waitFor { promise in
remote.loadLabelRates(siteID: self.sampleSiteID,
orderID: self.sampleOrderID,
originAddress: WooShippingAddress.fake(),
destinationAddress: WooShippingAddress.fake(),
packages: [ShippingLabelPackageSelected.fake()]) { (result) in
packages: [expectedPackage]) { (result) in
promise(result)
}
}
Expand All @@ -148,6 +149,9 @@ final class WooShippingRemoteTests: XCTestCase {
let request = try XCTUnwrap(network.requestsForResponseData.last as? JetpackRequest)
let featuresParam = try XCTUnwrap(request.parameters["features_supported_by_client"] as? [String])
XCTAssertEqual(featuresParam, ["upsdap"])
let packagesParam = try XCTUnwrap(request.parameters["packages"] as? [[String: Any]])
let package = try XCTUnwrap(packagesParam.first)
XCTAssertEqual(package["height"] as? Double, 0.25)

let successResponse = try XCTUnwrap(result.get())
XCTAssertEqual(successResponse.first?.defaultRates.first, expectedDefaultRate)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,10 @@ extension ShippingLabelPackageSelected: Encodable {
try container.encode(boxID.isEmpty ? "0" : boxID, forKey: .boxID)
try container.encode(length, forKey: .length)
try container.encode(width, forKey: .width)
try container.encode(height, forKey: .height)

// workaround because 0 would cause an error for the API request
try container.encode(height > 0 ? height : 0.25, forKey: .height)

try container.encode(weight, forKey: .weight)
try container.encode(isLetter, forKey: .isLetter)
try container.encodeIfPresent(hazmatCategory, forKey: .hazmatCategory)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public struct WooShippingPredefinedPackage: Equatable, GeneratedFakeable, Identi
}

public func getLength() -> Double {
let firstComponent = dimensions.components(separatedBy: " x ").first ?? ""
let firstComponent = dimensions.components(separatedBy: " x ")[safe: 0] ?? ""
return Double(firstComponent) ?? 0
}

Expand All @@ -48,7 +48,7 @@ public struct WooShippingPredefinedPackage: Equatable, GeneratedFakeable, Identi
}

public func getHeight() -> Double {
let lastComponent = dimensions.components(separatedBy: " x ").last ?? ""
let lastComponent = dimensions.components(separatedBy: " x ")[safe: 2] ?? ""
return Double(lastComponent) ?? 0
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ struct WooShippingPackageData: WooShippingPackageDataRepresentable {

extension WooShippingPackageDataRepresentable {
func dimensionsDescription(unit: String) -> String {
guard height.isNotEmpty, let numericHeight = Int(height), numericHeight > 0 else {
return "\(length) x \(width) \( unit)"
}
return "\(length) x \(width) x \(height) \( unit)"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,43 @@ final class WooShippingAddCustomPackageViewModelTests: XCTestCase {
XCTAssertEqual(updatedPackageData.id, "a")
}

func test_packageData_does_not_show_height_if_height_is_unavailable() throws {
// Given
let dimensionUnit = "cm"
let weightUnit = "kg"
let siteID: Int64 = 1234
let mockStores = MockStoresManager(sessionManager: .testingInstance)
let viewModel = WooShippingAddCustomPackageViewModel(siteID: siteID,
stores: mockStores)
let length = "1"
let width = "2"
let height = "0"
let weight = "4"

let expectedDimensions = "\(length) x \(width) \(dimensionUnit)"
let expectedWeight = "\(weight) \(weightUnit)"

// When
viewModel.fieldValues[.length] = length
viewModel.fieldValues[.width] = width
viewModel.fieldValues[.height] = height
viewModel.fieldValues[.weight] = weight

// Then
let packageData = try XCTUnwrap(viewModel.packageData)
XCTAssertEqual(packageData.dimensionsDescription(unit: dimensionUnit), expectedDimensions)
XCTAssertEqual(packageData.weightDescription(unit: weightUnit), expectedWeight)
XCTAssertEqual(packageData.id, "custom_box")

// When: selecting a template
viewModel.showSaveTemplate = true
viewModel.packageTemplateName = "a"

// Then
let updatedPackageData = try XCTUnwrap(viewModel.packageData)
XCTAssertEqual(updatedPackageData.id, "a")
}

@MainActor
func test_save_package_as_template_action() async {
// Given
Expand Down