8
8
9
9
import LoopKit
10
10
import LoopTestingKit
11
-
11
+ import LoopKitUI
12
12
13
13
protocol TestingScenariosManagerDelegate : AnyObject {
14
14
func testingScenariosManager( _ manager: TestingScenariosManager , didUpdateScenarioURLs scenarioURLs: [ URL ] )
@@ -198,7 +198,11 @@ extension TestingScenariosManagerRequirements {
198
198
199
199
if instance. hasCGMData {
200
200
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
+ }
202
206
} else {
203
207
bail ( with: ScenarioLoadingError . noTestingCGMManagerEnabled)
204
208
return
@@ -207,7 +211,11 @@ extension TestingScenariosManagerRequirements {
207
211
208
212
if instance. hasPumpData {
209
213
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
+ }
211
219
} else {
212
220
bail ( with: ScenarioLoadingError . noTestingPumpManagerEnabled)
213
221
return
@@ -242,12 +250,55 @@ extension TestingScenariosManagerRequirements {
242
250
}
243
251
}
244
252
}
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
+ }
245
296
246
297
private func wipeExistingData( completion: @escaping ( Error ? ) -> Void ) {
247
298
guard FeatureFlags . scenariosEnabled else {
248
299
fatalError ( " \( #function) should be invoked only when scenarios are enabled " )
249
300
}
250
-
301
+
251
302
deviceManager. deleteTestingPumpData { error in
252
303
guard error == nil else {
253
304
completion ( error!)
@@ -260,7 +311,14 @@ extension TestingScenariosManagerRequirements {
260
311
return
261
312
}
262
313
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
+ }
264
322
}
265
323
}
266
324
}
0 commit comments