diff --git a/体己Tests/ModelsSchemaTests.swift b/体己Tests/ModelsSchemaTests.swift new file mode 100644 index 0000000..f73f5f8 --- /dev/null +++ b/体己Tests/ModelsSchemaTests.swift @@ -0,0 +1,79 @@ +import Testing +import SwiftData +import Foundation +@testable import 体己 + +struct ModelsSchemaTests { + + private func makeContainer() throws -> ModelContainer { + let schema = Schema([ + Indicator.self, + Report.self, + DiaryEntry.self, + Asset.self, + ChatTurn.self, + ]) + let config = ModelConfiguration(schema: schema, isStoredInMemoryOnly: true) + return try ModelContainer(for: schema, configurations: [config]) + } + + @Test func insertIndicatorWithReportRelationship() throws { + let container = try makeContainer() + let ctx = ModelContext(container) + + let report = Report(title: "春检", type: .checkup, reportDate: .now) + let indicator = Indicator( + name: "ALT", + value: "32", + unit: "U/L", + range: "9-50", + status: .normal, + report: report + ) + ctx.insert(report) + ctx.insert(indicator) + try ctx.save() + + #expect(report.indicators.count == 1) + #expect(indicator.report?.title == "春检") + } + + @Test func cascadeDeleteReportRemovesIndicators() throws { + let container = try makeContainer() + let ctx = ModelContext(container) + + let report = Report(title: "春检", type: .checkup, reportDate: .now) + let indicator = Indicator( + name: "ALT", value: "32", unit: "U/L", range: "9-50", + status: .normal, report: report + ) + ctx.insert(report) + ctx.insert(indicator) + try ctx.save() + + ctx.delete(report) + try ctx.save() + + let remaining = try ctx.fetch(FetchDescriptor()) + #expect(remaining.isEmpty) + } + + @Test func chatTurnPersistsReferencedIDs() throws { + let container = try makeContainer() + let ctx = ModelContext(container) + + let turn = ChatTurn( + question: "我的 LDL 怎么样?", + answer: "近 3 个月 LDL 偏高 [1]", + referencedIndicatorIDs: ["abc"], + referencedReportIDs: [], + decodeRate: 24.3 + ) + ctx.insert(turn) + try ctx.save() + + let all = try ctx.fetch(FetchDescriptor()) + #expect(all.count == 1) + #expect(all.first?.referencedIndicatorIDs == ["abc"]) + } +}