Skip to content

Commit 86e1842

Browse files
committed
Add fallback when variation weight is a number
1 parent 57c73da commit 86e1842

File tree

3 files changed

+8
-2
lines changed

3 files changed

+8
-2
lines changed

Networking/Networking/Model/Product/ProductVariation.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,12 @@ public struct ProductVariation: Codable, GeneratedCopiable, Equatable, Generated
275275
let backordersKey = try container.decode(String.self, forKey: .backordersKey)
276276
let backordersAllowed = try container.decode(Bool.self, forKey: .backordersAllowed)
277277
let backordered = try container.decode(Bool.self, forKey: .backordered)
278-
let weight = try container.decodeIfPresent(String.self, forKey: .weight)
278+
279+
// Even though a plain install of WooCommerce Core provides String values,
280+
// some plugins alter the field value from String to Int or Decimal.
281+
let weight = container.failsafeDecodeIfPresent(targetType: String.self,
282+
forKey: .weight,
283+
alternativeTypes: [.decimal(transform: { NSDecimalNumber(decimal: $0).stringValue })])
279284
let dimensions = try container.decode(ProductDimensions.self, forKey: .dimensions)
280285
let shippingClass = try container.decodeIfPresent(String.self, forKey: .shippingClass)
281286
let shippingClassID = try container.decode(Int64.self, forKey: .shippingClassID)

Networking/NetworkingTests/Mapper/ProductVariationMapperTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ final class ProductVariationMapperTests: XCTestCase {
4141
XCTAssertTrue(productVariation.purchasable)
4242
XCTAssertEqual(productVariation.permalink, "")
4343
XCTAssertEqual(productVariation.sku, "12345")
44+
XCTAssertEqual(productVariation.weight, "2.5")
4445
}
4546

4647
/// Test that the fields for variations of a subscription product are properly parsed.

Networking/NetworkingTests/Responses/product-variation-alternative-types.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"backorders": "notify",
3333
"backorders_allowed": true,
3434
"backordered": false,
35-
"weight": "2.5",
35+
"weight": 2.5,
3636
"dimensions": {
3737
"length": "10",
3838
"width": "2.5",

0 commit comments

Comments
 (0)