Skip to content

Commit

Permalink
LOOP-4769 Premeal Storage (#698)
Browse files Browse the repository at this point in the history
* Store premeal activations in overrides storage

* Remove test of old behavior, and cleanup unused code
  • Loading branch information
ps2 authored Aug 27, 2024
1 parent 4775711 commit f55dac2
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 39 deletions.
18 changes: 11 additions & 7 deletions Loop/Managers/TemporaryPresetsManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@ class TemporaryPresetsManager {

scheduleOverride = overrideHistory.activeOverride(at: Date())

// TODO: Pre-meal is not stored in overrideHistory yet. https://tidepool.atlassian.net/browse/LOOP-4759
//preMealOverride = overrideHistory.preMealOverride
if scheduleOverride?.context == .preMeal {
preMealOverride = scheduleOverride
scheduleOverride = nil
}

overrideIntentObserver = UserDefaults.appGroup?.observe(
\.intentExtensionOverrideToSet,
Expand Down Expand Up @@ -79,6 +81,10 @@ class TemporaryPresetsManager {
return
}

if scheduleOverride != nil {
preMealOverride = nil
}

if let newValue = scheduleOverride, newValue.context == .preMeal {
preconditionFailure("The `scheduleOverride` field should not be used for a pre-meal target range override; use `preMealOverride` instead")
}
Expand All @@ -98,10 +104,6 @@ class TemporaryPresetsManager {
}
}

if scheduleOverride?.context == .legacyWorkout {
preMealOverride = nil
}

notify(forChange: .preferences)
}
}
Expand All @@ -116,10 +118,12 @@ class TemporaryPresetsManager {
preconditionFailure("The `preMealOverride` field should be used only for a pre-meal target range override")
}

if preMealOverride != nil, scheduleOverride?.context == .legacyWorkout {
if preMealOverride != nil {
scheduleOverride = nil
}

overrideHistory.recordOverride(preMealOverride)

notify(forChange: .preferences)
}
}
Expand Down
32 changes: 0 additions & 32 deletions LoopTests/Managers/TemporaryPresetsManagerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,23 +34,20 @@ class TemporaryPresetsManagerTests: XCTestCase {
}

func testPreMealOverride() {
var settings = self.settings
let preMealStart = Date()
manager.enablePreMealOverride(at: preMealStart, for: 1 /* hour */ * 60 * 60)
let actualPreMealRange = manager.effectiveGlucoseTargetRangeSchedule()?.quantityRange(at: preMealStart.addingTimeInterval(30 /* minutes */ * 60))
XCTAssertEqual(preMealRange, actualPreMealRange)
}

func testPreMealOverrideWithPotentialCarbEntry() {
var settings = self.settings
let preMealStart = Date()
manager.enablePreMealOverride(at: preMealStart, for: 1 /* hour */ * 60 * 60)
let actualRange = manager.effectiveGlucoseTargetRangeSchedule(presumingMealEntry: true)?.value(at: preMealStart.addingTimeInterval(30 /* minutes */ * 60))
XCTAssertEqual(targetRange, actualRange)
}

func testScheduleOverride() {
var settings = self.settings
let overrideStart = Date()
let overrideTargetRange = DoubleRange(minValue: 130, maxValue: 150)
let override = TemporaryScheduleOverride(
Expand All @@ -69,36 +66,7 @@ class TemporaryPresetsManagerTests: XCTestCase {
XCTAssertEqual(actualOverrideRange, overrideTargetRange)
}

func testBothPreMealAndScheduleOverride() {
var settings = self.settings
let preMealStart = Date()
manager.enablePreMealOverride(at: preMealStart, for: 1 /* hour */ * 60 * 60)

let overrideStart = Date()
let overrideTargetRange = DoubleRange(minValue: 130, maxValue: 150)
let override = TemporaryScheduleOverride(
context: .custom,
settings: TemporaryScheduleOverrideSettings(
unit: .milligramsPerDeciliter,
targetRange: overrideTargetRange
),
startDate: overrideStart,
duration: .finite(3 /* hours */ * 60 * 60),
enactTrigger: .local,
syncIdentifier: UUID()
)
manager.scheduleOverride = override

let actualPreMealRange = manager.effectiveGlucoseTargetRangeSchedule()?.quantityRange(at: preMealStart.addingTimeInterval(30 /* minutes */ * 60))
XCTAssertEqual(actualPreMealRange, preMealRange)

// The pre-meal range should be projected into the future, despite the simultaneous schedule override
let preMealRangeDuringOverride = manager.effectiveGlucoseTargetRangeSchedule()?.quantityRange(at: preMealStart.addingTimeInterval(2 /* hours */ * 60 * 60))
XCTAssertEqual(preMealRangeDuringOverride, preMealRange)
}

func testScheduleOverrideWithExpiredPreMealOverride() {
var settings = self.settings
manager.preMealOverride = TemporaryScheduleOverride(
context: .preMeal,
settings: TemporaryScheduleOverrideSettings(targetRange: preMealRange),
Expand Down

0 comments on commit f55dac2

Please sign in to comment.