Skip to content

Commit e7e6fe6

Browse files
authored
[LOOP-4492] reset managers and delete alert store (#563)
1 parent c61cd6e commit e7e6fe6

File tree

1 file changed

+63
-5
lines changed

1 file changed

+63
-5
lines changed

Loop/Managers/TestingScenariosManager.swift

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import LoopKit
1010
import LoopTestingKit
11-
11+
import LoopKitUI
1212

1313
protocol TestingScenariosManagerDelegate: AnyObject {
1414
func testingScenariosManager(_ manager: TestingScenariosManager, didUpdateScenarioURLs scenarioURLs: [URL])
@@ -198,7 +198,11 @@ extension TestingScenariosManagerRequirements {
198198

199199
if instance.hasCGMData {
200200
if let cgmManager = deviceManager.cgmManager as? TestingCGMManager {
201-
testingCGMManager = cgmManager
201+
if instance.shouldReloadManager?.cgm == true {
202+
testingCGMManager = reloadCGMManager(withIdentifier: cgmManager.managerIdentifier)
203+
} else {
204+
testingCGMManager = cgmManager
205+
}
202206
} else {
203207
bail(with: ScenarioLoadingError.noTestingCGMManagerEnabled)
204208
return
@@ -207,7 +211,11 @@ extension TestingScenariosManagerRequirements {
207211

208212
if instance.hasPumpData {
209213
if let pumpManager = deviceManager.pumpManager as? TestingPumpManager {
210-
testingPumpManager = pumpManager
214+
if instance.shouldReloadManager?.pump == true {
215+
testingPumpManager = reloadPumpManager(withIdentifier: pumpManager.managerIdentifier)
216+
} else {
217+
testingPumpManager = pumpManager
218+
}
211219
} else {
212220
bail(with: ScenarioLoadingError.noTestingPumpManagerEnabled)
213221
return
@@ -242,12 +250,55 @@ extension TestingScenariosManagerRequirements {
242250
}
243251
}
244252
}
253+
254+
private func reloadPumpManager(withIdentifier pumpManagerIdentifier: String) -> TestingPumpManager {
255+
deviceManager.pumpManager = nil
256+
guard let maximumBasalRate = deviceManager.loopManager.settings.maximumBasalRatePerHour,
257+
let maxBolus = deviceManager.loopManager.settings.maximumBolus,
258+
let basalSchedule = deviceManager.loopManager.settings.basalRateSchedule else
259+
{
260+
fatalError("Failed to reload pump manager. Missing initial settings")
261+
}
262+
let initialSettings = PumpManagerSetupSettings(maxBasalRateUnitsPerHour: maximumBasalRate,
263+
maxBolusUnits: maxBolus,
264+
basalSchedule: basalSchedule)
265+
let result = deviceManager.setupPumpManager(withIdentifier: pumpManagerIdentifier,
266+
initialSettings: initialSettings,
267+
prefersToSkipUserInteraction: true)
268+
switch result {
269+
case .success(let setupUIResult):
270+
switch setupUIResult {
271+
case .createdAndOnboarded(let pumpManager):
272+
return pumpManager as! TestingPumpManager
273+
default:
274+
fatalError("Failed to reload pump manager. UI interaction required for setup")
275+
}
276+
default:
277+
fatalError("Failed to reload pump manager. Setup failed")
278+
}
279+
}
280+
281+
private func reloadCGMManager(withIdentifier cgmManagerIdentifier: String) -> TestingCGMManager {
282+
deviceManager.cgmManager = nil
283+
let result = deviceManager.setupCGMManager(withIdentifier: cgmManagerIdentifier, prefersToSkipUserInteraction: true)
284+
switch result {
285+
case .success(let setupUIResult):
286+
switch setupUIResult {
287+
case .createdAndOnboarded(let cgmManager):
288+
return cgmManager as! TestingCGMManager
289+
default:
290+
fatalError("Failed to reload CGM manager. UI interaction required for setup")
291+
}
292+
default:
293+
fatalError("Failed to reload CGM manager. Setup failed")
294+
}
295+
}
245296

246297
private func wipeExistingData(completion: @escaping (Error?) -> Void) {
247298
guard FeatureFlags.scenariosEnabled else {
248299
fatalError("\(#function) should be invoked only when scenarios are enabled")
249300
}
250-
301+
251302
deviceManager.deleteTestingPumpData { error in
252303
guard error == nil else {
253304
completion(error!)
@@ -260,7 +311,14 @@ extension TestingScenariosManagerRequirements {
260311
return
261312
}
262313

263-
self.deviceManager.carbStore.deleteAllCarbEntries(completion: completion)
314+
self.deviceManager.carbStore.deleteAllCarbEntries() { error in
315+
guard error == nil else {
316+
completion(error!)
317+
return
318+
}
319+
320+
self.deviceManager.alertManager.alertStore.purge(before: Date(), completion: completion)
321+
}
264322
}
265323
}
266324
}

0 commit comments

Comments
 (0)