|
|
@@ -0,0 +1,67 @@
|
|
|
+import Foundation
|
|
|
+import HealthKit
|
|
|
+import LoopKit
|
|
|
+import Testing
|
|
|
+
|
|
|
+@testable import Trio
|
|
|
+
|
|
|
+/// Pins the `PumpSettings` → `DeliveryLimits` mapping that
|
|
|
+/// `BaseDeviceDataManager.pumpManager.didSet` performs inline before calling
|
|
|
+/// `pumpManager.syncDeliveryLimits`. Keep this builder identical to the inline
|
|
|
+/// expression in `DeviceDataManager.swift` so a regression that re-introduces
|
|
|
+/// the default-collapse bug breaks here too.
|
|
|
+@Suite("Delivery Limits Sync Tests") struct DeliveryLimitsSyncTests {
|
|
|
+ private let basalUnit = HKUnit.internationalUnitsPerHour
|
|
|
+ private let bolusUnit = HKUnit.internationalUnit()
|
|
|
+
|
|
|
+ private func makeSettings(maxBasal: Decimal, maxBolus: Decimal) -> PumpSettings {
|
|
|
+ PumpSettings(insulinActionCurve: 6, maxBolus: maxBolus, maxBasal: maxBasal)
|
|
|
+ }
|
|
|
+
|
|
|
+ private func deliveryLimits(from settings: PumpSettings) -> DeliveryLimits {
|
|
|
+ DeliveryLimits(
|
|
|
+ maximumBasalRate: HKQuantity(unit: .internationalUnitsPerHour, doubleValue: Double(settings.maxBasal)),
|
|
|
+ maximumBolus: HKQuantity(unit: .internationalUnit(), doubleValue: Double(settings.maxBolus))
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test("maxBasal maps to maximumBasalRate in U/hr") func testMaxBasalMapping() {
|
|
|
+ let settings = makeSettings(maxBasal: 5.0, maxBolus: 10.0)
|
|
|
+
|
|
|
+ let limits = deliveryLimits(from: settings)
|
|
|
+
|
|
|
+ #expect(limits.maximumBasalRate?.doubleValue(for: basalUnit) == 5.0)
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test("maxBolus maps to maximumBolus in U") func testMaxBolusMapping() {
|
|
|
+ let settings = makeSettings(maxBasal: 5.0, maxBolus: 10.0)
|
|
|
+
|
|
|
+ let limits = deliveryLimits(from: settings)
|
|
|
+
|
|
|
+ #expect(limits.maximumBolus?.doubleValue(for: bolusUnit) == 10.0)
|
|
|
+ }
|
|
|
+
|
|
|
+ /// The derived limit must be the user's configured value, not the `PumpInitialSettings` default.
|
|
|
+ @Test("User-configured limit is preserved, not collapsed to the 2 U/hr default") func testDoesNotFallBackToDefault() {
|
|
|
+ let configuredMaxBasal: Decimal = 3.0
|
|
|
+ let defaultMaxBasal = PumpConfig.PumpInitialSettings.default.maxBasalRateUnitsPerHour
|
|
|
+
|
|
|
+ let settings = makeSettings(maxBasal: configuredMaxBasal, maxBolus: 10.0)
|
|
|
+ let limits = deliveryLimits(from: settings)
|
|
|
+
|
|
|
+ #expect(limits.maximumBasalRate?.doubleValue(for: basalUnit) == Double(configuredMaxBasal))
|
|
|
+ #expect(limits.maximumBasalRate?.doubleValue(for: basalUnit) != defaultMaxBasal)
|
|
|
+ }
|
|
|
+
|
|
|
+ /// The derived limit must be the user's configured value, not the `PumpInitialSettings` default.
|
|
|
+ @Test("User-configured bolus limit is preserved, not collapsed to the default") func testBolusDoesNotFallBackToDefault() {
|
|
|
+ let configuredMaxBolus: Decimal = 25.0
|
|
|
+ let defaultMaxBolus = PumpConfig.PumpInitialSettings.default.maxBolusUnits
|
|
|
+
|
|
|
+ let settings = makeSettings(maxBasal: 3.0, maxBolus: configuredMaxBolus)
|
|
|
+ let limits = deliveryLimits(from: settings)
|
|
|
+
|
|
|
+ #expect(limits.maximumBolus?.doubleValue(for: bolusUnit) == Double(configuredMaxBolus))
|
|
|
+ #expect(limits.maximumBolus?.doubleValue(for: bolusUnit) != defaultMaxBolus)
|
|
|
+ }
|
|
|
+}
|