Skip to content

Commit 8f0de03

Browse files
authored
Shipping Label: Fix incorrect height for predefined packages when unavailable (#15812)
2 parents b47d109 + ad88973 commit 8f0de03

File tree

5 files changed

+51
-4
lines changed

5 files changed

+51
-4
lines changed

Networking/NetworkingTests/Remote/WooShippingRemoteTests.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,15 @@ final class WooShippingRemoteTests: XCTestCase {
132132
let remote = WooShippingRemote(network: network)
133133
network.simulateResponse(requestUrlSuffix: "label/rate", filename: "wooshipping-get-label-rates-success")
134134
let expectedDefaultRate = sampleLabelRate()
135+
let expectedPackage = ShippingLabelPackageSelected.fake().copy(length: 12, width: 20, height: 0)
135136

136137
// When
137138
let result: Result<[ShippingLabelCarriersAndRates], Error> = waitFor { promise in
138139
remote.loadLabelRates(siteID: self.sampleSiteID,
139140
orderID: self.sampleOrderID,
140141
originAddress: WooShippingAddress.fake(),
141142
destinationAddress: WooShippingAddress.fake(),
142-
packages: [ShippingLabelPackageSelected.fake()]) { (result) in
143+
packages: [expectedPackage]) { (result) in
143144
promise(result)
144145
}
145146
}
@@ -148,6 +149,9 @@ final class WooShippingRemoteTests: XCTestCase {
148149
let request = try XCTUnwrap(network.requestsForResponseData.last as? JetpackRequest)
149150
let featuresParam = try XCTUnwrap(request.parameters["features_supported_by_client"] as? [String])
150151
XCTAssertEqual(featuresParam, ["upsdap"])
152+
let packagesParam = try XCTUnwrap(request.parameters["packages"] as? [[String: Any]])
153+
let package = try XCTUnwrap(packagesParam.first)
154+
XCTAssertEqual(package["height"] as? Double, 0.25)
151155

152156
let successResponse = try XCTUnwrap(result.get())
153157
XCTAssertEqual(successResponse.first?.defaultRates.first, expectedDefaultRate)

Networking/Sources/Extended/Model/ShippingLabel/Packages/CarriersAndRates/ShippingLabelPackageSelected.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ extension ShippingLabelPackageSelected: Encodable {
4646
try container.encode(boxID.isEmpty ? "0" : boxID, forKey: .boxID)
4747
try container.encode(length, forKey: .length)
4848
try container.encode(width, forKey: .width)
49-
try container.encode(height, forKey: .height)
49+
50+
// workaround because 0 would cause an error for the API request
51+
try container.encode(height > 0 ? height : 0.25, forKey: .height)
52+
5053
try container.encode(weight, forKey: .weight)
5154
try container.encode(isLetter, forKey: .isLetter)
5255
try container.encodeIfPresent(hazmatCategory, forKey: .hazmatCategory)

Networking/Sources/Extended/Model/ShippingLabel/Packages/PredefinedPackage/WooShippingPredefinedPackage.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public struct WooShippingPredefinedPackage: Equatable, GeneratedFakeable, Identi
3838
}
3939

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

@@ -48,7 +48,7 @@ public struct WooShippingPredefinedPackage: Equatable, GeneratedFakeable, Identi
4848
}
4949

5050
public func getHeight() -> Double {
51-
let lastComponent = dimensions.components(separatedBy: " x ").last ?? ""
51+
let lastComponent = dimensions.components(separatedBy: " x ")[safe: 2] ?? ""
5252
return Double(lastComponent) ?? 0
5353
}
5454
}

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShipping Package and Rate Selection/WooSavedPackagesSelectionView.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ struct WooShippingPackageData: WooShippingPackageDataRepresentable {
9292

9393
extension WooShippingPackageDataRepresentable {
9494
func dimensionsDescription(unit: String) -> String {
95+
guard height.isNotEmpty, let numericHeight = Int(height), numericHeight > 0 else {
96+
return "\(length) x \(width) \( unit)"
97+
}
9598
return "\(length) x \(width) x \(height) \( unit)"
9699
}
97100

WooCommerce/WooCommerceTests/ViewRelated/Shipping Label/WooShipping Create Shipping Labels/WooShippingAddCustomPackageViewModelTests.swift

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,43 @@ final class WooShippingAddCustomPackageViewModelTests: XCTestCase {
187187
XCTAssertEqual(updatedPackageData.id, "a")
188188
}
189189

190+
func test_packageData_does_not_show_height_if_height_is_unavailable() throws {
191+
// Given
192+
let dimensionUnit = "cm"
193+
let weightUnit = "kg"
194+
let siteID: Int64 = 1234
195+
let mockStores = MockStoresManager(sessionManager: .testingInstance)
196+
let viewModel = WooShippingAddCustomPackageViewModel(siteID: siteID,
197+
stores: mockStores)
198+
let length = "1"
199+
let width = "2"
200+
let height = "0"
201+
let weight = "4"
202+
203+
let expectedDimensions = "\(length) x \(width) \(dimensionUnit)"
204+
let expectedWeight = "\(weight) \(weightUnit)"
205+
206+
// When
207+
viewModel.fieldValues[.length] = length
208+
viewModel.fieldValues[.width] = width
209+
viewModel.fieldValues[.height] = height
210+
viewModel.fieldValues[.weight] = weight
211+
212+
// Then
213+
let packageData = try XCTUnwrap(viewModel.packageData)
214+
XCTAssertEqual(packageData.dimensionsDescription(unit: dimensionUnit), expectedDimensions)
215+
XCTAssertEqual(packageData.weightDescription(unit: weightUnit), expectedWeight)
216+
XCTAssertEqual(packageData.id, "custom_box")
217+
218+
// When: selecting a template
219+
viewModel.showSaveTemplate = true
220+
viewModel.packageTemplateName = "a"
221+
222+
// Then
223+
let updatedPackageData = try XCTUnwrap(viewModel.packageData)
224+
XCTAssertEqual(updatedPackageData.id, "a")
225+
}
226+
190227
@MainActor
191228
func test_save_package_as_template_action() async {
192229
// Given

0 commit comments

Comments
 (0)