migration

This commit is contained in:
Daniel Arantes Loverde
2026-08-11 13:22:02 -03:00
parent c4d6998595
commit 7702836fe7
231 changed files with 4329 additions and 1958 deletions

View File

@@ -0,0 +1,73 @@
import Foundation
import Testing
@testable import PediFoods
private func decode<T: Decodable>(_ type: T.Type, _ json: String) throws -> T {
try JSONDecoder().decode(T.self, from: Data(json.utf8))
}
@Test("CreateOrderResult decodes paymentPayload when it's a nested object")
func createOrderResultPaymentPayloadAsObject() throws {
let json = #"{"id":"1","paymentPayload":{"copyPaste":"00020126","qrCodeImage":"base64img","expirationDate":"2026-01-01"}}"#
let result = try decode(CreateOrderResult.self, json)
#expect(result.paymentPayload?.copyPaste == "00020126")
#expect(result.paymentPayload?.qrCodeImage == "base64img")
}
@Test("CreateOrderResult wraps a bare-string paymentPayload into copyPaste")
func createOrderResultPaymentPayloadAsBareString() throws {
let json = #"{"id":"1","paymentPayload":"00020126"}"#
let result = try decode(CreateOrderResult.self, json)
#expect(result.paymentPayload?.copyPaste == "00020126")
#expect(result.paymentPayload?.qrCodeImage == nil)
}
@Test("CreateOrderResult leaves paymentPayload nil when the field is absent")
func createOrderResultPaymentPayloadAbsent() throws {
let result = try decode(CreateOrderResult.self, #"{"id":"1"}"#)
#expect(result.paymentPayload == nil)
}
@Test("CreateOrderPaymentPayload falls back from copyPaste to the legacy payload key")
func createOrderPaymentPayloadCopyPasteKeyFallback() throws {
let payload = try decode(CreateOrderPaymentPayload.self, #"{"payload":"00020126"}"#)
#expect(payload.copyPaste == "00020126")
}
@Test("CreateOrderPaymentPayload falls back from qrCodeImage to the legacy encodedImage key")
func createOrderPaymentPayloadQrCodeImageKeyFallback() throws {
let payload = try decode(CreateOrderPaymentPayload.self, #"{"encodedImage":"base64img"}"#)
#expect(payload.qrCodeImage == "base64img")
}
@Test("ValidateDeliveryAddressResult reads camelCase or snake_case keys interchangeably")
func validateDeliveryAddressResultKeyFallback() throws {
let camelCase = try decode(ValidateDeliveryAddressResult.self, #"{"deliveryAllowed":true,"reasonCode":"OUT_OF_RANGE"}"#)
#expect(camelCase.deliveryAllowed == true)
#expect(camelCase.reasonCode == "OUT_OF_RANGE")
let snakeCase = try decode(ValidateDeliveryAddressResult.self, #"{"delivery_allowed":false,"reason_code":"OUT_OF_RANGE"}"#)
#expect(snakeCase.deliveryAllowed == false)
#expect(snakeCase.reasonCode == "OUT_OF_RANGE")
}
@Test("ValidateDeliveryAddressResult resolves deliveryFee from any of its three key names")
func validateDeliveryAddressResultDeliveryFeeThreeWayFallback() throws {
let viaDeliveryFee = try decode(ValidateDeliveryAddressResult.self, #"{"deliveryFee":5.5}"#)
#expect(viaDeliveryFee.deliveryFee == 5.5)
let viaFee = try decode(ValidateDeliveryAddressResult.self, #"{"fee":6.5}"#)
#expect(viaFee.deliveryFee == 6.5)
let viaTaxa = try decode(ValidateDeliveryAddressResult.self, #"{"taxa":"7,50"}"#)
#expect(viaTaxa.deliveryFee == 7.5)
}
@Test("ValidateDeliveryAddressResult defaults every field to nil on an empty payload")
func validateDeliveryAddressResultEmptyPayload() throws {
let result = try decode(ValidateDeliveryAddressResult.self, "{}")
#expect(result.deliveryAllowed == nil)
#expect(result.reasonCode == nil)
#expect(result.deliveryFee == nil)
#expect(result.sameCity == nil)
}