forked from LoopKit/Loop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLoopSettingsTests.swift
More file actions
121 lines (107 loc) · 5.02 KB
/
LoopSettingsTests.swift
File metadata and controls
121 lines (107 loc) · 5.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//
// LoopSettingsTests.swift
// LoopTests
//
// Created by Michael Pangburn on 3/1/20.
// Copyright © 2020 LoopKit Authors. All rights reserved.
//
import XCTest
import LoopCore
import LoopKit
class LoopSettingsTests: XCTestCase {
private let preMealRange = DoubleRange(minValue: 80, maxValue: 80).quantityRange(for: .milligramsPerDeciliter)
private let targetRange = DoubleRange(minValue: 95, maxValue: 105)
private lazy var settings: LoopSettings = {
var settings = LoopSettings()
settings.preMealTargetRange = preMealRange
settings.glucoseTargetRangeSchedule = GlucoseRangeSchedule(
unit: .milligramsPerDeciliter,
dailyItems: [.init(startTime: 0, value: targetRange)]
)
return settings
}()
func testPreMealOverride() {
var settings = self.settings
let preMealStart = Date()
settings.enablePreMealOverride(at: preMealStart, for: 1 /* hour */ * 60 * 60)
let actualPreMealRange = settings.effectiveGlucoseTargetRangeSchedule()?.quantityRange(at: preMealStart.addingTimeInterval(30 /* minutes */ * 60))
XCTAssertEqual(preMealRange, actualPreMealRange)
}
func testPreMealOverrideWithPotentialCarbEntry() {
var settings = self.settings
let preMealStart = Date()
settings.enablePreMealOverride(at: preMealStart, for: 1 /* hour */ * 60 * 60)
let actualRange = settings.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(
context: .custom,
settings: TemporaryScheduleOverrideSettings(
unit: .milligramsPerDeciliter,
targetRange: overrideTargetRange
),
startDate: overrideStart,
duration: .finite(3 /* hours */ * 60 * 60),
enactTrigger: .local,
syncIdentifier: UUID()
)
settings.scheduleOverride = override
let actualOverrideRange = settings.effectiveGlucoseTargetRangeSchedule()?.value(at: overrideStart.addingTimeInterval(30 /* minutes */ * 60))
XCTAssertEqual(actualOverrideRange, overrideTargetRange)
}
func testBothPreMealAndScheduleOverride() {
var settings = self.settings
let preMealStart = Date()
settings.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()
)
settings.scheduleOverride = override
let actualPreMealRange = settings.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 = settings.effectiveGlucoseTargetRangeSchedule()?.quantityRange(at: preMealStart.addingTimeInterval(2 /* hours */ * 60 * 60))
XCTAssertEqual(preMealRangeDuringOverride, preMealRange)
}
func testScheduleOverrideWithExpiredPreMealOverride() {
var settings = self.settings
settings.preMealOverride = TemporaryScheduleOverride(
context: .preMeal,
settings: TemporaryScheduleOverrideSettings(targetRange: preMealRange),
startDate: Date(timeIntervalSinceNow: -2 /* hours */ * 60 * 60),
duration: .finite(1 /* hours */ * 60 * 60),
enactTrigger: .local,
syncIdentifier: UUID()
)
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()
)
settings.scheduleOverride = override
let actualOverrideRange = settings.effectiveGlucoseTargetRangeSchedule()?.value(at: overrideStart.addingTimeInterval(2 /* hours */ * 60 * 60))
XCTAssertEqual(actualOverrideRange, overrideTargetRange)
}
}