DeliveryLimitsSyncTests.swift 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import Foundation
  2. import HealthKit
  3. import LoopKit
  4. import Testing
  5. @testable import Trio
  6. /// Pins the `PumpSettings` → `DeliveryLimits` mapping that
  7. /// `BaseDeviceDataManager.pumpManager.didSet` performs inline before calling
  8. /// `pumpManager.syncDeliveryLimits`. Keep this builder identical to the inline
  9. /// expression in `DeviceDataManager.swift` so a regression that re-introduces
  10. /// the default-collapse bug breaks here too.
  11. @Suite("Delivery Limits Sync Tests") struct DeliveryLimitsSyncTests {
  12. private let basalUnit = HKUnit.internationalUnitsPerHour
  13. private let bolusUnit = HKUnit.internationalUnit()
  14. private func makeSettings(maxBasal: Decimal, maxBolus: Decimal) -> PumpSettings {
  15. PumpSettings(insulinActionCurve: 6, maxBolus: maxBolus, maxBasal: maxBasal)
  16. }
  17. private func deliveryLimits(from settings: PumpSettings) -> DeliveryLimits {
  18. DeliveryLimits(
  19. maximumBasalRate: HKQuantity(unit: .internationalUnitsPerHour, doubleValue: Double(settings.maxBasal)),
  20. maximumBolus: HKQuantity(unit: .internationalUnit(), doubleValue: Double(settings.maxBolus))
  21. )
  22. }
  23. @Test("maxBasal maps to maximumBasalRate in U/hr") func testMaxBasalMapping() {
  24. let settings = makeSettings(maxBasal: 5.0, maxBolus: 10.0)
  25. let limits = deliveryLimits(from: settings)
  26. #expect(limits.maximumBasalRate?.doubleValue(for: basalUnit) == 5.0)
  27. }
  28. @Test("maxBolus maps to maximumBolus in U") func testMaxBolusMapping() {
  29. let settings = makeSettings(maxBasal: 5.0, maxBolus: 10.0)
  30. let limits = deliveryLimits(from: settings)
  31. #expect(limits.maximumBolus?.doubleValue(for: bolusUnit) == 10.0)
  32. }
  33. /// The derived limit must be the user's configured value, not the `PumpInitialSettings` default.
  34. @Test("User-configured limit is preserved, not collapsed to the 2 U/hr default") func testDoesNotFallBackToDefault() {
  35. let configuredMaxBasal: Decimal = 3.0
  36. let defaultMaxBasal = PumpConfig.PumpInitialSettings.default.maxBasalRateUnitsPerHour
  37. let settings = makeSettings(maxBasal: configuredMaxBasal, maxBolus: 10.0)
  38. let limits = deliveryLimits(from: settings)
  39. #expect(limits.maximumBasalRate?.doubleValue(for: basalUnit) == Double(configuredMaxBasal))
  40. #expect(limits.maximumBasalRate?.doubleValue(for: basalUnit) != defaultMaxBasal)
  41. }
  42. /// The derived limit must be the user's configured value, not the `PumpInitialSettings` default.
  43. @Test("User-configured bolus limit is preserved, not collapsed to the default") func testBolusDoesNotFallBackToDefault() {
  44. let configuredMaxBolus: Decimal = 25.0
  45. let defaultMaxBolus = PumpConfig.PumpInitialSettings.default.maxBolusUnits
  46. let settings = makeSettings(maxBasal: 3.0, maxBolus: configuredMaxBolus)
  47. let limits = deliveryLimits(from: settings)
  48. #expect(limits.maximumBolus?.doubleValue(for: bolusUnit) == Double(configuredMaxBolus))
  49. #expect(limits.maximumBolus?.doubleValue(for: bolusUnit) != defaultMaxBolus)
  50. }
  51. }