product_quantity shouldn't be an issue anymore; and some tests

This commit is contained in:
cdricms
2023-12-26 15:17:49 +01:00
parent e699d71597
commit 5e3b9e703f
3 changed files with 43 additions and 16 deletions

View File

@@ -166,7 +166,7 @@ public class Product: Codable, ObjectDebugger {
public var popularityKey: Int? public var popularityKey: Int?
public var producerVersionId: String? public var producerVersionId: String?
public var productName: String? public var productName: String?
public var productQuantity: String? public var productQuantity: Float?
public var purchasePlaces: String? public var purchasePlaces: String?
public var purchasePlacesDebugTags: [String]? public var purchasePlacesDebugTags: [String]?
public var purchasePlacesTags: [String]? public var purchasePlacesTags: [String]?
@@ -397,4 +397,34 @@ public class Product: Codable, ObjectDebugger {
case vitaminsPrevTags = "vitamins_prev_tags" case vitaminsPrevTags = "vitamins_prev_tags"
case vitaminsTags = "vitamins_tags" case vitaminsTags = "vitamins_tags"
} }
public required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
// Check for null value
if container.contains(.productQuantity) {
if try container.decodeNil(forKey: .productQuantity) {
productQuantity = nil
} else {
// Try to decode as Int
if let intValue = try? container.decode(Float.self, forKey: .productQuantity) {
productQuantity = intValue
} else if let stringValue = try? container.decode(String.self, forKey: .productQuantity) {
// If decoding as Int fails, try to decode as String
productQuantity = Float(stringValue)
} else {
// If decoding as both Int and String fails, handle the error accordingly
throw DecodingError.dataCorruptedError(
forKey: .productQuantity,
in: container,
debugDescription: "Unable to decode productQuantity"
)
}
}
} else {
productQuantity = nil
}
// ... (initialize other properties)
}
} }

View File

@@ -2,12 +2,4 @@ import Foundation
import OpenFoodFacts import OpenFoodFacts
let off = OpenFoodFactsClient() let off = OpenFoodFactsClient()
off.prod = true
for barcode in ["0737628064502", "0812133010036", "0849092103196", "22007377", "3033610048398", "3222473161867", "3242272260059", "3245412470929", "3502110000880", "3551100749018", "3560070805259", "3560070976867", "3596710352418", "3800020430781", "4000539770708", "4388858946739", "5010251168577", "5015821151720", "5050854517631", "5054070608074", "5201051001076", "5410228196693", "5449000179661"] {
do {
try await off.getProductByBarcode(barcode)
// print(res.product!)
} catch {
print("[BARCODE: \(barcode)]\(error)")
}
}

View File

@@ -1,12 +1,17 @@
@testable import swift_openfoodfacts_sdk @testable import OpenFoodFacts
import XCTest import XCTest
final class swift_openfoodfacts_sdkTests: XCTestCase { final class swift_openfoodfacts_sdkTests: XCTestCase {
func testExample() throws { func testBarcodeProcessing() async throws {
// XCTest Documentation let off = OpenFoodFactsClient()
// https://developer.apple.com/documentation/xctest off.prod = true
// Defining Test Cases and Test Methods for barcode in ["0737628064502", "0812133010036", "0849092103196", "22007377", "3033610048398", "3222473161867", "3242272260059", "3245412470929", "3502110000880", "3551100749018", "3560070805259", "3560070976867", "3596710352418", "3800020430781", "4000539770708", "4388858946739", "5010251168577", "5015821151720", "5050854517631", "5054070608074", "5201051001076", "5410228196693", "5449000179661", "5601077161035", "6194002510064", "7311041026670", "7640101710236", "8424259826051", "8585002476821", "8712000031312", "8992696419766", "9300601768226", "9300650658615", "9310155100335"] {
// https://developer.apple.com/documentation/xctest/defining_test_cases_and_test_methods do {
let _ = try await off.getProductByBarcode(barcode)
} catch {
XCTFail("[BARCODE: \(barcode)] \(error)")
}
}
} }
} }