74 lines
4.1 KiB
Swift
74 lines
4.1 KiB
Swift
import Foundation
|
|
|
|
private struct Check {
|
|
var assertions = 0
|
|
|
|
mutating func expect(_ condition: @autoclosure () -> Bool, _ message: String) {
|
|
assertions += 1
|
|
guard condition() else { fatalError("Assertion \(assertions) failed: \(message)") }
|
|
}
|
|
}
|
|
|
|
private func detail(
|
|
direction: String = "RECEIVED",
|
|
status: String = GiftStatus.delivered.rawValue,
|
|
recipientAddress: GiftRecipientAddressResponse? = GiftRecipientAddressResponse(name: "수령인", phoneNumber: "전화", address: "주소"),
|
|
undeliverableReason: String? = nil,
|
|
nestedApplicationNo: String? = "nested-only"
|
|
) -> GiftDetailResponse {
|
|
GiftDetailResponse(
|
|
applicationNo: "synthetic",
|
|
direction: direction,
|
|
status: status,
|
|
statusName: "상태",
|
|
giftInfo: GiftInfoResponse(
|
|
recipientCreatorNickname: nil,
|
|
senderNickname: "보낸이",
|
|
sizeName: "중형",
|
|
categoryName: "도서",
|
|
applicationNo: nestedApplicationNo,
|
|
paidCan: nil,
|
|
tracking: nil,
|
|
shippingRequestedAt: nil
|
|
),
|
|
senderInfo: nil,
|
|
recipientAddress: recipientAddress,
|
|
mailbox: nil,
|
|
trackingRequired: false,
|
|
recipientAddressRequired: true,
|
|
recipientAddressDeadlineAt: nil,
|
|
delivery: GiftDeliveryResponse(canceledAt: nil, undeliverableAt: nil, undeliverableReason: undeliverableReason),
|
|
statusTimeline: GiftProgressStep.allCases.map { GiftStatusTimelineResponse(status: $0.rawValue, statusName: "상태", occurredAt: nil) }
|
|
)
|
|
}
|
|
|
|
@main
|
|
enum ReceivedGiftDetailCheck {
|
|
static func main() {
|
|
var check = Check()
|
|
|
|
for status in GiftStatus.allCases {
|
|
check.expect(GiftDisplayPolicy.receivedDetail(from: detail(status: status.rawValue))?.status == status, "accepts \(status.rawValue)")
|
|
}
|
|
check.expect(GiftDisplayPolicy.receivedDetail(from: detail(direction: "SENT")) == nil, "rejects SENT")
|
|
check.expect(GiftDisplayPolicy.receivedDetail(from: detail(direction: "OTHER")) == nil, "rejects unknown direction")
|
|
check.expect(GiftDisplayPolicy.receivedDetail(from: detail(status: "UNKNOWN")) == nil, "rejects unknown status")
|
|
check.expect(GiftDisplayPolicy.sentDetail(from: detail(direction: "SENT"))?.applicationNo == "synthetic", "sent detail uses top-level applicationNo")
|
|
check.expect(GiftDisplayPolicy.sentDetail(from: detail(direction: "SENT", nestedApplicationNo: nil))?.applicationNo == "synthetic", "sent detail uses top-level applicationNo when nested is nil")
|
|
|
|
let model = GiftDisplayPolicy.receivedDetail(from: detail())!
|
|
check.expect(model.statusName == "상태", "maps statusName")
|
|
check.expect(model.senderNickname == "보낸이", "maps senderNickname")
|
|
check.expect(model.sizeName == "중형" && model.categoryName == "도서", "maps size and category")
|
|
check.expect(Set(Mirror(reflecting: model).children.compactMap { $0.label }) == ["status", "statusName", "undeliverableReason", "senderNickname", "sizeName", "categoryName", "shippingRequestedDateText", "recipientAddressRequired", "recipientAddress", "progress"], "stored-property allowlist")
|
|
check.expect(GiftDisplayPolicy.receivedDetail(from: detail(undeliverableReason: "수령인 부재"))?.undeliverableReason == "수령인 부재", "maps undeliverable reason")
|
|
check.expect(model.recipientAddress?.address == "주소", "maps present recipient address")
|
|
check.expect(GiftDisplayPolicy.receivedDetail(from: detail(recipientAddress: nil))?.recipientAddress == nil, "keeps nil recipient address nil")
|
|
let undeliverable = GiftDisplayPolicy.receivedDetail(from: detail(status: GiftStatus.undeliverable.rawValue, undeliverableReason: "주소 오류"))!
|
|
check.expect(!undeliverable.recipientAddressRequired && undeliverable.recipientAddress == nil, "suppresses undeliverable address")
|
|
check.expect(model.progress.map(\.step) == GiftProgressStep.allCases, "progress has five steps")
|
|
|
|
print("PASS ReceivedGiftDetailCheck assertions=\(check.assertions)")
|
|
}
|
|
}
|