Skip to content

Commit d323b66

Browse files
author
Darin Krauss
authored
[LOOP-26] Upload loop dosing decision data to Tidepool backend (#484)
- https://tidepool.atlassian.net/browse/LOOP-26 - Make bolusUnits optional in AutomaticDoseRecommendation - Unify DosingDecisionStore in LoopKit from Loop - Remove unnecessary Codable support for various Errors - Return StoredGlucoseSamples after adding via DeviceDataManager - Update StoredDosingDecision properties - Refactor how errors and warnings are captured in StoredDosingDecision - Add more explicit LoopError cases - Add LoopWarning - Use explicit LoopError or PumpManagerError where possible - Add reason for various dosing decisions - Explicit creation of dosing decision when cancelling temp basal - Update LoopDataManager.update to return error rather than throw - Update LoopDataManager.updatePredictedGlucoseAndRecommendedDose to return error rather than throw - Inject updatable dosing decision into LoopDataManager loop - Capture all errors during LoopDataManager loop rather than just first - Update tests
1 parent 74d93c7 commit d323b66

35 files changed

+1008
-2420
lines changed

DoseMathTests/DoseMathTests.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class RecommendTempBasalTests: XCTestCase {
194194

195195
XCTAssertEqual(0.8, dose!.basalAdjustment!.unitsPerHour, accuracy: 1.0 / 40.0)
196196
XCTAssertEqual(TimeInterval(minutes: 30), dose!.basalAdjustment!.duration)
197-
XCTAssertEqual(0, dose!.bolusUnits)
197+
XCTAssertEqual(0, dose!.bolusUnits!)
198198
}
199199

200200
func testStartHighEndInRange() {
@@ -277,7 +277,7 @@ class RecommendTempBasalTests: XCTestCase {
277277

278278
XCTAssertEqual(0, dose!.basalAdjustment!.unitsPerHour)
279279
XCTAssertEqual(TimeInterval(minutes: 0), dose!.basalAdjustment!.duration)
280-
XCTAssertEqual(0, dose!.bolusUnits)
280+
XCTAssertEqual(0, dose!.bolusUnits!)
281281
}
282282

283283
func testStartHighEndInRangeAutomaticBolusWithOverride() {
@@ -441,7 +441,7 @@ class RecommendTempBasalTests: XCTestCase {
441441

442442
XCTAssertEqual(0, dose!.basalAdjustment!.unitsPerHour)
443443
XCTAssertEqual(TimeInterval(minutes: 0), dose!.basalAdjustment!.duration)
444-
XCTAssertEqual(0, dose!.bolusUnits)
444+
XCTAssertEqual(0, dose!.bolusUnits!)
445445
}
446446

447447
func testCorrectLowAtMin() {
@@ -510,7 +510,7 @@ class RecommendTempBasalTests: XCTestCase {
510510

511511
XCTAssertEqual(0, dose!.basalAdjustment!.unitsPerHour)
512512
XCTAssertEqual(TimeInterval(minutes: 0), dose!.basalAdjustment!.duration)
513-
XCTAssertEqual(0, dose!.bolusUnits)
513+
XCTAssertEqual(0, dose!.bolusUnits!)
514514

515515
dose = glucose.recommendedAutomaticDose(
516516
to: glucoseTargetRange,
@@ -562,7 +562,7 @@ class RecommendTempBasalTests: XCTestCase {
562562

563563
XCTAssertEqual(0, dose!.basalAdjustment!.unitsPerHour)
564564
XCTAssertEqual(TimeInterval(minutes: 30), dose!.basalAdjustment!.duration)
565-
XCTAssertEqual(0, dose!.bolusUnits)
565+
XCTAssertEqual(0, dose!.bolusUnits!)
566566
}
567567

568568
func testStartHighEndLowExponentialModel() {
@@ -662,7 +662,7 @@ class RecommendTempBasalTests: XCTestCase {
662662

663663
XCTAssertEqual(0, dose!.basalAdjustment!.unitsPerHour)
664664
XCTAssertEqual(TimeInterval(minutes: 0), dose!.basalAdjustment!.duration)
665-
XCTAssertEqual(0, dose!.bolusUnits)
665+
XCTAssertEqual(0, dose!.bolusUnits!)
666666
}
667667

668668
func testFlatAndHigh() {
@@ -699,7 +699,7 @@ class RecommendTempBasalTests: XCTestCase {
699699
)
700700

701701
XCTAssertNil(dose!.basalAdjustment)
702-
XCTAssertEqual(0.85, dose!.bolusUnits, accuracy: 1.0 / 40.0)
702+
XCTAssertEqual(0.85, dose!.bolusUnits!, accuracy: 1.0 / 40.0)
703703
}
704704

705705
func testFlatAndHighAutomaticBolusWithOverride() {
@@ -720,7 +720,7 @@ class RecommendTempBasalTests: XCTestCase {
720720

721721
XCTAssertEqual(0.8, dose!.basalAdjustment!.unitsPerHour, accuracy: 1.0 / 40.0)
722722
XCTAssertEqual(TimeInterval(minutes: 30), dose!.basalAdjustment!.duration)
723-
XCTAssertEqual(0.85, dose!.bolusUnits, accuracy: 1.0 / 40.0)
723+
XCTAssertEqual(0.85, dose!.bolusUnits!, accuracy: 1.0 / 40.0)
724724

725725
// Continue temp
726726
let lastTempBasal = DoseEntry(
@@ -745,7 +745,7 @@ class RecommendTempBasalTests: XCTestCase {
745745
)
746746

747747
XCTAssertNil(dose!.basalAdjustment)
748-
XCTAssertEqual(0.85, dose!.bolusUnits, accuracy: 1.0 / 40.0)
748+
XCTAssertEqual(0.85, dose!.bolusUnits!, accuracy: 1.0 / 40.0)
749749

750750
}
751751

@@ -785,7 +785,7 @@ class RecommendTempBasalTests: XCTestCase {
785785
)
786786

787787
XCTAssertNil(dose!.basalAdjustment)
788-
XCTAssertEqual(0.2, dose!.bolusUnits, accuracy: 1.0 / 40.0)
788+
XCTAssertEqual(0.2, dose!.bolusUnits!, accuracy: 1.0 / 40.0)
789789
}
790790

791791
func testHighAndFallingExponentialModel() {
@@ -822,7 +822,7 @@ class RecommendTempBasalTests: XCTestCase {
822822
)
823823

824824
XCTAssertNil(dose!.basalAdjustment)
825-
XCTAssertEqual(0.2, dose!.bolusUnits, accuracy: 1.0 / 40.0)
825+
XCTAssertEqual(0.2, dose!.bolusUnits!, accuracy: 1.0 / 40.0)
826826
}
827827

828828
func testInRangeAndRising() {

Loop.xcodeproj/project.pbxproj

Lines changed: 12 additions & 36 deletions
Large diffs are not rendered by default.

Loop/Extensions/CarbStore.swift

Lines changed: 0 additions & 79 deletions
This file was deleted.

Loop/Extensions/DeviceDataManager+BolusEntryViewModelDelegate.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ extension DeviceDataManager: BolusEntryViewModelDelegate, ManualDoseViewModelDel
2828
loopManager.addCarbEntry(carbEntry, replacing: replacingEntry, completion: completion)
2929
}
3030

31-
func storeBolusDosingDecision(_ bolusDosingDecision: BolusDosingDecision, withDate date: Date) {
32-
loopManager.storeBolusDosingDecision(bolusDosingDecision, withDate: date)
31+
func storeManualBolusDosingDecision(_ bolusDosingDecision: BolusDosingDecision, withDate date: Date) {
32+
loopManager.storeManualBolusDosingDecision(bolusDosingDecision, withDate: date)
3333
}
3434

3535
func getGlucoseSamples(start: Date?, end: Date?, completion: @escaping (Swift.Result<[StoredGlucoseSample], Error>) -> Void) {

Loop/Extensions/DeviceDataManager+SimpleBolusViewModelDelegate.swift

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,8 @@ import LoopCore
1111
import LoopKit
1212

1313
extension DeviceDataManager: SimpleBolusViewModelDelegate {
14-
func addGlucose(_ samples: [NewGlucoseSample], completion: @escaping (Error?) -> Void) {
15-
loopManager.addGlucoseSamples(samples) { (result) in
16-
switch result {
17-
case .failure(let error):
18-
completion(error)
19-
case .success:
20-
completion(nil)
21-
}
22-
}
14+
func addGlucose(_ samples: [NewGlucoseSample], completion: @escaping (Swift.Result<[StoredGlucoseSample], Error>) -> Void) {
15+
loopManager.addGlucoseSamples(samples, completion: completion)
2316
}
2417

2518
func enactBolus(units: Double, automatic: Bool) {

Loop/Extensions/DoseStore.swift

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)