migration
This commit is contained in:
73
PediFoodsTests/ApiOrderModelsDecodingTests.swift
Normal file
73
PediFoodsTests/ApiOrderModelsDecodingTests.swift
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user