Skip to content

Commit 4e244c8

Browse files
committed
Tests for changes
1 parent d1f6908 commit 4e244c8

File tree

1 file changed

+65
-7
lines changed

1 file changed

+65
-7
lines changed

LoopTests/Managers/MealDetectionManagerTests.swift

Lines changed: 65 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,22 @@ import LoopCore
1212
import LoopKit
1313
@testable import Loop
1414

15+
fileprivate class MockGlucoseSample: GlucoseSampleValue {
16+
let provenanceIdentifier = ""
17+
let isDisplayOnly: Bool
18+
let wasUserEntered: Bool
19+
let condition: LoopKit.GlucoseCondition? = nil
20+
let trendRate: HKQuantity? = nil
21+
let quantity: HKQuantity = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: 100)
22+
let startDate: Date
23+
24+
init(startDate: Date, isDisplayOnly: Bool = false, wasUserEntered: Bool = false) {
25+
self.startDate = startDate
26+
self.isDisplayOnly = isDisplayOnly
27+
self.wasUserEntered = wasUserEntered
28+
}
29+
}
30+
1531
enum MissedMealTestType {
1632
private static var dateFormatter = ISO8601DateFormatter.localTimeDate()
1733

@@ -160,6 +176,8 @@ class MealDetectionManagerTests: XCTestCase {
160176
var bolusUnits: Double?
161177
var bolusDurationEstimator: ((Double) -> TimeInterval?)!
162178

179+
fileprivate var glucoseSamples: [MockGlucoseSample]!
180+
163181
@discardableResult func setUp(for testType: MissedMealTestType) -> [GlucoseEffectVelocity] {
164182
let healthStore = HKHealthStoreMock()
165183

@@ -198,6 +216,8 @@ class MealDetectionManagerTests: XCTestCase {
198216
test_currentDate: testType.currentDate
199217
)
200218

219+
glucoseSamples = [MockGlucoseSample(startDate: now)]
220+
201221
bolusDurationEstimator = { units in
202222
self.bolusUnits = units
203223
return self.pumpManager.estimatedDuration(toBolus: units)
@@ -252,7 +272,7 @@ class MealDetectionManagerTests: XCTestCase {
252272

253273
let updateGroup = DispatchGroup()
254274
updateGroup.enter()
255-
mealDetectionManager.hasMissedMeal(insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
275+
mealDetectionManager.hasMissedMeal(glucoseSamples: glucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
256276
XCTAssertEqual(status, .noMissedMeal)
257277
updateGroup.leave()
258278
}
@@ -264,7 +284,7 @@ class MealDetectionManagerTests: XCTestCase {
264284

265285
let updateGroup = DispatchGroup()
266286
updateGroup.enter()
267-
mealDetectionManager.hasMissedMeal(insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
287+
mealDetectionManager.hasMissedMeal(glucoseSamples: glucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
268288
XCTAssertEqual(status, .noMissedMeal)
269289
updateGroup.leave()
270290
}
@@ -277,7 +297,7 @@ class MealDetectionManagerTests: XCTestCase {
277297

278298
let updateGroup = DispatchGroup()
279299
updateGroup.enter()
280-
mealDetectionManager.hasMissedMeal(insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
300+
mealDetectionManager.hasMissedMeal(glucoseSamples: glucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
281301
XCTAssertEqual(status, .hasMissedMeal(startTime: testType.missedMealDate!, carbAmount: 55))
282302
updateGroup.leave()
283303
}
@@ -290,7 +310,7 @@ class MealDetectionManagerTests: XCTestCase {
290310

291311
let updateGroup = DispatchGroup()
292312
updateGroup.enter()
293-
mealDetectionManager.hasMissedMeal(insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
313+
mealDetectionManager.hasMissedMeal(glucoseSamples: glucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
294314
XCTAssertEqual(status, .hasMissedMeal(startTime: testType.missedMealDate!, carbAmount: 25))
295315
updateGroup.leave()
296316
}
@@ -303,7 +323,7 @@ class MealDetectionManagerTests: XCTestCase {
303323

304324
let updateGroup = DispatchGroup()
305325
updateGroup.enter()
306-
mealDetectionManager.hasMissedMeal(insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
326+
mealDetectionManager.hasMissedMeal(glucoseSamples: glucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
307327
XCTAssertEqual(status, .hasMissedMeal(startTime: testType.missedMealDate!, carbAmount: 50))
308328
updateGroup.leave()
309329
}
@@ -315,7 +335,7 @@ class MealDetectionManagerTests: XCTestCase {
315335

316336
let updateGroup = DispatchGroup()
317337
updateGroup.enter()
318-
mealDetectionManager.hasMissedMeal(insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
338+
mealDetectionManager.hasMissedMeal(glucoseSamples: glucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
319339
XCTAssertEqual(status, .noMissedMeal)
320340
updateGroup.leave()
321341
}
@@ -328,7 +348,7 @@ class MealDetectionManagerTests: XCTestCase {
328348

329349
let updateGroup = DispatchGroup()
330350
updateGroup.enter()
331-
mealDetectionManager.hasMissedMeal(insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
351+
mealDetectionManager.hasMissedMeal(glucoseSamples: glucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
332352
XCTAssertEqual(status, .hasMissedMeal(startTime: testType.missedMealDate!, carbAmount: 40))
333353
updateGroup.leave()
334354
}
@@ -436,6 +456,44 @@ class MealDetectionManagerTests: XCTestCase {
436456
XCTAssertEqual(bolusUnits, 4.5)
437457
XCTAssertEqual(mealDetectionManager.lastMissedMealNotification?.deliveryTime, expectedDeliveryTime2)
438458
}
459+
460+
func testHasCalibrationPoints_NoNotification() {
461+
let testType = MissedMealTestType.manyMeals
462+
let counteractionEffects = setUp(for: testType)
463+
464+
let calibratedGlucoseSamples = [MockGlucoseSample(startDate: now), MockGlucoseSample(startDate: now, isDisplayOnly: true)]
465+
466+
let updateGroup = DispatchGroup()
467+
updateGroup.enter()
468+
mealDetectionManager.hasMissedMeal(glucoseSamples: calibratedGlucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
469+
XCTAssertEqual(status, .noMissedMeal)
470+
updateGroup.leave()
471+
}
472+
updateGroup.wait()
473+
474+
let manualGlucoseSamples = [MockGlucoseSample(startDate: now), MockGlucoseSample(startDate: now, wasUserEntered: true)]
475+
updateGroup.enter()
476+
mealDetectionManager.hasMissedMeal(glucoseSamples: manualGlucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
477+
XCTAssertEqual(status, .noMissedMeal)
478+
updateGroup.leave()
479+
}
480+
updateGroup.wait()
481+
}
482+
483+
func testHasTooOldCalibrationPoint_NoImpactOnNotificationDelivery() {
484+
let testType = MissedMealTestType.manyMeals
485+
let counteractionEffects = setUp(for: testType)
486+
487+
let tooOldCalibratedGlucoseSamples = [MockGlucoseSample(startDate: now, isDisplayOnly: false), MockGlucoseSample(startDate: now.addingTimeInterval(-MissedMealSettings.maxRecency-1), isDisplayOnly: true)]
488+
489+
let updateGroup = DispatchGroup()
490+
updateGroup.enter()
491+
mealDetectionManager.hasMissedMeal(glucoseSamples: tooOldCalibratedGlucoseSamples, insulinCounteractionEffects: counteractionEffects, carbEffects: mealDetectionCarbEffects(using: counteractionEffects)) { status in
492+
XCTAssertEqual(status, .hasMissedMeal(startTime: testType.missedMealDate!, carbAmount: 40))
493+
updateGroup.leave()
494+
}
495+
updateGroup.wait()
496+
}
439497
}
440498

441499
extension MealDetectionManagerTests {

0 commit comments

Comments
 (0)