Files
reimburse/tests/AdminAttachmentsTests.swift
T
2026-09-12 22:44:53 +08:00

22 lines
1.2 KiB
Swift

import Foundation
@main
struct AdminAttachmentsTests {
static func main() throws {
let first = #"{"id":"one","name":"first.pdf","kind":"invoice","mime":"application/pdf","size":10}"#
let second = #"{"id":"two","name":"second.pdf","kind":"invoice","mime":"application/pdf","size":20}"#
let decoder = JSONDecoder()
let legacy = try decoder.decode(AdminAttachmentList.self, from: Data(first.utf8))
precondition(legacy.files.count == 1 && legacy.files[0].id == "one")
let multiple = try decoder.decode(AdminAttachmentList.self, from: Data("[\(first),\(second)]".utf8))
precondition(multiple.files.map(\.id) == ["one", "two"])
let roundTrip = try decoder.decode(AdminAttachmentList.self, from: JSONEncoder().encode(multiple))
precondition(roundTrip.files.map(\.id) == ["one", "two"])
let empty = try decoder.decode(AdminAttachmentList.self, from: Data("[]".utf8))
precondition(empty.files.isEmpty)
let mixed = try decoder.decode([String: AdminAttachmentList].self, from: Data("{\"invoice\":[\(first),\(second)],\"legacy\":\(first)}".utf8))
precondition(mixed.values.flatMap { $0.files }.count == 3)
print("Admin attachment compatibility tests passed")
}
}