import Foundation @main struct AdminPPTSelectionTests { static func record(_ id: String, user: String = "1", name: String = "张三", group: Int64 = 1, date: String = "2026-09-13", state: String = "approved") -> AdminExpense { AdminExpense(id: id, groupId: group, projectId: 1, userId: user, name: name, team: "组\(group)", projectName: "项目", type: "餐饮费用", amountCents: 1234, amountText: "12.34", note: "", status: "已批准", state: state, date: date, version: 1, files: [:], events: []) } static func main() { let records = [record("10"), record("2"), record("3", user: "2", group: 2, date: "2026-09-12"), record("4", state: "pending"), record("5", state: "returned")] let approved = AdminPPTSelection.filter(records, groupID: 0, userID: "", start: nil, end: nil) precondition(approved.count == 3) precondition(AdminPPTSelection.filter(records, groupID: 1, userID: "", start: nil, end: nil).count == 2) precondition(AdminPPTSelection.filter(records, groupID: 0, userID: "2", start: nil, end: nil).map(\.id) == ["3"]) precondition(AdminPPTSelection.filter(records, groupID: 0, userID: "", start: "2026-09-13", end: "2026-09-13").count == 2) precondition(AdminPPTSelection.filter(records, groupID: 0, userID: "", start: "2026-09-14", end: "2026-09-13").isEmpty) precondition(AdminPPTOrder.group.sorted(approved).map(\.id) == ["2", "10", "3"]) precondition(AdminPPTOrder.date.sorted(approved).map(\.id) == ["3", "2", "10"]) let sameName = [record("7", user: "2"), record("6", user: "1", group: 2)] precondition(AdminPPTOrder.person.sorted(sameName).map(\.id) == ["6", "7"]) print("PPT selection, approval filtering, date bounds and ordering tests passed") } }