Skip to content

Commit 942e0b4

Browse files
author
Darin Krauss
committed
Relax Dexcom API validations to match Tidepool data model validations
* Relax Dexcom API validations to match Tidepool data model validations * Rename insulin dose constants to properly include units
1 parent 4dee948 commit 942e0b4

File tree

14 files changed

+204
-247
lines changed

14 files changed

+204
-247
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
## HEAD
22

3+
## v1.31.1
4+
5+
* Relax Dexcom API validations to match Tidepool data model validations
6+
* Rename insulin dose constants to properly include units
7+
38
## v1.30.0
49

510
* Fix Dexcom API v2 edge cases

data/types/insulin/dose.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ import (
66
)
77

88
const (
9-
DoseActiveMaximum = 250.0
10-
DoseActiveMinimum = 0.0
11-
DoseCorrectionMaximum = 250.0
12-
DoseCorrectionMinimum = -250.0
13-
DoseFoodMaximum = 250.0
14-
DoseFoodMinimum = 0.0
15-
DoseTotalMaximum = 250.0
16-
DoseTotalMinimum = 0.0
17-
DoseUnitsUnits = "Units"
9+
DoseActiveUnitsMaximum = 250.0
10+
DoseActiveUnitsMinimum = 0.0
11+
DoseCorrectionUnitsMaximum = 250.0
12+
DoseCorrectionUnitsMinimum = -250.0
13+
DoseFoodUnitsMaximum = 250.0
14+
DoseFoodUnitsMinimum = 0.0
15+
DoseTotalUnitsMaximum = 250.0
16+
DoseTotalUnitsMinimum = 0.0
17+
DoseUnitsUnits = "Units"
1818
)
1919

2020
func DoseUnits() []string {
@@ -54,10 +54,10 @@ func (d *Dose) Parse(parser data.ObjectParser) {
5454
}
5555

5656
func (d *Dose) Validate(validator structure.Validator) {
57-
validator.Float64("active", d.Active).InRange(DoseActiveMinimum, DoseActiveMaximum)
58-
validator.Float64("correction", d.Correction).InRange(DoseCorrectionMinimum, DoseCorrectionMaximum)
59-
validator.Float64("food", d.Food).InRange(DoseFoodMinimum, DoseFoodMaximum)
60-
validator.Float64("total", d.Total).Exists().InRange(DoseTotalMinimum, DoseTotalMaximum)
57+
validator.Float64("active", d.Active).InRange(DoseActiveUnitsMinimum, DoseActiveUnitsMaximum)
58+
validator.Float64("correction", d.Correction).InRange(DoseCorrectionUnitsMinimum, DoseCorrectionUnitsMaximum)
59+
validator.Float64("food", d.Food).InRange(DoseFoodUnitsMinimum, DoseFoodUnitsMaximum)
60+
validator.Float64("total", d.Total).Exists().InRange(DoseTotalUnitsMinimum, DoseTotalUnitsMaximum)
6161
validator.String("units", d.Units).Exists().OneOf(DoseUnits()...)
6262
}
6363

data/types/insulin/dose_test.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,36 @@ import (
1616
)
1717

1818
var _ = Describe("Dose", func() {
19-
It("DoseActiveMaximum is expected", func() {
20-
Expect(insulin.DoseActiveMaximum).To(Equal(250.0))
19+
It("DoseActiveUnitsMaximum is expected", func() {
20+
Expect(insulin.DoseActiveUnitsMaximum).To(Equal(250.0))
2121
})
2222

23-
It("DoseActiveMinimum is expected", func() {
24-
Expect(insulin.DoseActiveMinimum).To(Equal(0.0))
23+
It("DoseActiveUnitsMinimum is expected", func() {
24+
Expect(insulin.DoseActiveUnitsMinimum).To(Equal(0.0))
2525
})
2626

27-
It("DoseCorrectionMaximum is expected", func() {
28-
Expect(insulin.DoseCorrectionMaximum).To(Equal(250.0))
27+
It("DoseCorrectionUnitsMaximum is expected", func() {
28+
Expect(insulin.DoseCorrectionUnitsMaximum).To(Equal(250.0))
2929
})
3030

31-
It("DoseCorrectionMinimum is expected", func() {
32-
Expect(insulin.DoseCorrectionMinimum).To(Equal(-250.0))
31+
It("DoseCorrectionUnitsMinimum is expected", func() {
32+
Expect(insulin.DoseCorrectionUnitsMinimum).To(Equal(-250.0))
3333
})
3434

35-
It("DoseFoodMaximum is expected", func() {
36-
Expect(insulin.DoseFoodMaximum).To(Equal(250.0))
35+
It("DoseFoodUnitsMaximum is expected", func() {
36+
Expect(insulin.DoseFoodUnitsMaximum).To(Equal(250.0))
3737
})
3838

39-
It("DoseFoodMinimum is expected", func() {
40-
Expect(insulin.DoseFoodMinimum).To(Equal(0.0))
39+
It("DoseFoodUnitsMinimum is expected", func() {
40+
Expect(insulin.DoseFoodUnitsMinimum).To(Equal(0.0))
4141
})
4242

43-
It("DoseTotalMaximum is expected", func() {
44-
Expect(insulin.DoseTotalMaximum).To(Equal(250.0))
43+
It("DoseTotalUnitsMaximum is expected", func() {
44+
Expect(insulin.DoseTotalUnitsMaximum).To(Equal(250.0))
4545
})
4646

47-
It("DoseTotalMinimum is expected", func() {
48-
Expect(insulin.DoseTotalMinimum).To(Equal(0.0))
47+
It("DoseTotalUnitsMinimum is expected", func() {
48+
Expect(insulin.DoseTotalUnitsMinimum).To(Equal(0.0))
4949
})
5050

5151
It("DoseUnitsUnits is expected", func() {

data/types/insulin/test/dose.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import (
88

99
func NewDose() *insulin.Dose {
1010
datum := insulin.NewDose()
11-
datum.Active = pointer.FromFloat64(test.RandomFloat64FromRange(insulin.DoseActiveMinimum, insulin.DoseActiveMaximum))
12-
datum.Correction = pointer.FromFloat64(test.RandomFloat64FromRange(insulin.DoseCorrectionMinimum, insulin.DoseCorrectionMaximum))
13-
datum.Food = pointer.FromFloat64(test.RandomFloat64FromRange(insulin.DoseFoodMinimum, insulin.DoseFoodMaximum))
14-
datum.Total = pointer.FromFloat64(test.RandomFloat64FromRange(insulin.DoseTotalMinimum, insulin.DoseTotalMaximum))
11+
datum.Active = pointer.FromFloat64(test.RandomFloat64FromRange(insulin.DoseActiveUnitsMinimum, insulin.DoseActiveUnitsMaximum))
12+
datum.Correction = pointer.FromFloat64(test.RandomFloat64FromRange(insulin.DoseCorrectionUnitsMinimum, insulin.DoseCorrectionUnitsMaximum))
13+
datum.Food = pointer.FromFloat64(test.RandomFloat64FromRange(insulin.DoseFoodUnitsMinimum, insulin.DoseFoodUnitsMaximum))
14+
datum.Total = pointer.FromFloat64(test.RandomFloat64FromRange(insulin.DoseTotalUnitsMinimum, insulin.DoseTotalUnitsMaximum))
1515
datum.Units = pointer.FromString(test.RandomStringFromArray(insulin.DoseUnits()))
1616
return datum
1717
}

dexcom/alert.go

Lines changed: 37 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"sort"
66
"strconv"
77

8+
dataTypesSettingsCgm "github.com/tidepool-org/platform/data/types/settings/cgm"
89
"github.com/tidepool-org/platform/errors"
910
"github.com/tidepool-org/platform/pointer"
1011
"github.com/tidepool-org/platform/structure"
@@ -32,9 +33,29 @@ const (
3233
AlertSettingAlertNameUrgentLow = "urgentLow"
3334
AlertSettingAlertNameUrgentLowSoon = "urgentLowSoon"
3435

36+
AlertSettingSnoozeMinutesMaximum = dataTypesSettingsCgm.SnoozeDurationMinutesMaximum
37+
AlertSettingSnoozeMinutesMinimum = dataTypesSettingsCgm.SnoozeDurationMinutesMinimum
38+
3539
AlertSettingUnitMinutes = "minutes"
3640
AlertSettingUnitMgdL = "mg/dL"
3741
AlertSettingUnitMgdLMinute = "mg/dL/min"
42+
43+
AlertSettingValueFallMgdLMinuteMaximum = dataTypesSettingsCgm.FallAlertRateMgdLMinuteMaximum
44+
AlertSettingValueFallMgdLMinuteMinimum = dataTypesSettingsCgm.FallAlertRateMgdLMinuteMinimum
45+
AlertSettingValueHighMgdLMaximum = dataTypesSettingsCgm.HighAlertLevelMgdLMaximum
46+
AlertSettingValueHighMgdLMinimum = dataTypesSettingsCgm.HighAlertLevelMgdLMinimum
47+
AlertSettingValueLowMgdLMaximum = dataTypesSettingsCgm.LowAlertLevelMgdLMaximum
48+
AlertSettingValueLowMgdLMinimum = dataTypesSettingsCgm.LowAlertLevelMgdLMinimum
49+
AlertSettingValueNoReadingsMgdLMaximum = dataTypesSettingsCgm.NoDataAlertDurationMinutesMaximum
50+
AlertSettingValueNoReadingsMgdLMinimum = dataTypesSettingsCgm.NoDataAlertDurationMinutesMinimum
51+
AlertSettingValueOutOfRangeMgdLMaximum = dataTypesSettingsCgm.OutOfRangeAlertDurationMinutesMaximum
52+
AlertSettingValueOutOfRangeMgdLMinimum = dataTypesSettingsCgm.OutOfRangeAlertDurationMinutesMinimum
53+
AlertSettingValueRiseMgdLMinuteMaximum = dataTypesSettingsCgm.RiseAlertRateMgdLMinuteMaximum
54+
AlertSettingValueRiseMgdLMinuteMinimum = dataTypesSettingsCgm.RiseAlertRateMgdLMinuteMinimum
55+
AlertSettingValueUrgentLowMgdLMaximum = dataTypesSettingsCgm.UrgentLowAlertLevelMgdLMaximum
56+
AlertSettingValueUrgentLowMgdLMinimum = dataTypesSettingsCgm.UrgentLowAlertLevelMgdLMinimum
57+
AlertSettingValueUrgentLowSoonMgdLMaximum = dataTypesSettingsCgm.UrgentLowAlertLevelMgdLMaximum
58+
AlertSettingValueUrgentLowSoonMgdLMinimum = dataTypesSettingsCgm.UrgentLowAlertLevelMgdLMinimum
3859
)
3960

4061
func AlertScheduleSettingsDays() []string {
@@ -87,108 +108,34 @@ func AlertSettingUnitFalls() []string {
87108
return []string{AlertSettingUnitMgdLMinute}
88109
}
89110

90-
func AlertSettingValueFallMgdLMinutes() []float64 {
91-
return []float64{2, 3}
92-
}
93-
94-
func AlertSettingSnoozeFalls() []int {
95-
return []int{0, 30}
96-
}
97-
98111
func AlertSettingUnitHighs() []string {
99112
return []string{AlertSettingUnitMgdL}
100113
}
101114

102-
func AlertSettingValueHighMgdLs() []float64 {
103-
return alertSettingValueHighMgdLs
104-
}
105-
106-
var alertSettingValueHighMgdLs = generateFloatRange(120, 400, 10)
107-
108-
func AlertSettingSnoozeHighs() []int {
109-
return alertSettingSnoozeHighs
110-
}
111-
112-
var alertSettingSnoozeHighs = append(append([]int{0}, generateIntegerRange(15, 240, 5)...), generateIntegerRange(255, 300, 15)...)
113-
114115
func AlertSettingUnitLows() []string {
115116
return []string{AlertSettingUnitMgdL}
116117
}
117118

118-
func AlertSettingValueLowMgdLs() []float64 {
119-
return alertSettingValueLowMgdLs
120-
}
121-
122-
var alertSettingValueLowMgdLs = generateFloatRange(60, 100, 5)
123-
124-
func AlertSettingSnoozeLows() []int {
125-
return alertSettingSnoozeLows
126-
}
127-
128-
var alertSettingSnoozeLows = append(append([]int{0}, generateIntegerRange(15, 240, 5)...), generateIntegerRange(255, 300, 15)...)
129-
130119
func AlertSettingUnitNoReadings() []string {
131120
return []string{AlertSettingUnitMinutes}
132121
}
133122

134-
func AlertSettingValueNoReadingsMinutes() []float64 {
135-
return []float64{0, 20}
136-
}
137-
138-
func AlertSettingSnoozeNoReadings() []int {
139-
return []int{0, 20, 25, 30}
140-
}
141-
142123
func AlertSettingUnitOutOfRanges() []string {
143124
return []string{AlertSettingUnitMinutes}
144125
}
145126

146-
func AlertSettingValueOutOfRangeMinutes() []float64 {
147-
return alertSettingValueOutOfRangeMinutes
148-
}
149-
150-
var alertSettingValueOutOfRangeMinutes = generateFloatRange(20, 240, 5)
151-
152-
func AlertSettingSnoozeOutOfRanges() []int {
153-
return []int{0, 20, 25, 30}
154-
}
155-
156127
func AlertSettingUnitRises() []string {
157128
return []string{AlertSettingUnitMgdLMinute}
158129
}
159130

160-
func AlertSettingValueRiseMgdLMinutes() []float64 {
161-
return []float64{2, 3}
162-
}
163-
164-
func AlertSettingSnoozeRises() []int {
165-
return []int{0, 30}
166-
}
167-
168131
func AlertSettingUnitUrgentLows() []string {
169132
return []string{AlertSettingUnitMgdL}
170133
}
171134

172-
func AlertSettingValueUrgentLowMgdLs() []float64 {
173-
return []float64{55}
174-
}
175-
176-
func AlertSettingSnoozeUrgentLows() []int {
177-
return []int{0, 30}
178-
}
179-
180135
func AlertSettingUnitUrgentLowSoons() []string {
181136
return []string{AlertSettingUnitMgdL}
182137
}
183138

184-
func AlertSettingValueUrgentLowSoonMgdLs() []float64 {
185-
return []float64{55}
186-
}
187-
188-
func AlertSettingSnoozeUrgentLowSoons() []int {
189-
return []int{0, 30}
190-
}
191-
192139
type AlertSchedules []*AlertSchedule
193140

194141
func ParseAlertSchedules(parser structure.ArrayParser) *AlertSchedules {
@@ -583,10 +530,10 @@ func (a *AlertSetting) validateFall(validator structure.Validator) {
583530
if a.Unit != nil {
584531
switch *a.Unit {
585532
case AlertSettingUnitMgdLMinute:
586-
validator.Float64("value", a.Value).Exists().OneOf(AlertSettingValueFallMgdLMinutes()...)
533+
validator.Float64("value", a.Value).Exists().InRange(AlertSettingValueFallMgdLMinuteMinimum, AlertSettingValueFallMgdLMinuteMaximum)
587534
}
588535
}
589-
validator.Int("snooze", a.Snooze).OneOf(AlertSettingSnoozeFalls()...)
536+
validator.Int("snooze", a.Snooze).InRange(AlertSettingSnoozeMinutesMinimum, AlertSettingSnoozeMinutesMaximum)
590537
validator.Bool("enabled", a.Enabled).Exists()
591538
}
592539

@@ -595,10 +542,10 @@ func (a *AlertSetting) validateHigh(validator structure.Validator) {
595542
if a.Unit != nil {
596543
switch *a.Unit {
597544
case AlertSettingUnitMgdL:
598-
validator.Float64("value", a.Value).Exists().OneOf(AlertSettingValueHighMgdLs()...)
545+
validator.Float64("value", a.Value).Exists().InRange(AlertSettingValueHighMgdLMinimum, AlertSettingValueHighMgdLMaximum)
599546
}
600547
}
601-
validator.Int("snooze", a.Snooze).Exists().OneOf(AlertSettingSnoozeHighs()...)
548+
validator.Int("snooze", a.Snooze).Exists().InRange(AlertSettingSnoozeMinutesMinimum, AlertSettingSnoozeMinutesMaximum)
602549
validator.Bool("enabled", a.Enabled).Exists()
603550
}
604551

@@ -607,10 +554,10 @@ func (a *AlertSetting) validateLow(validator structure.Validator) {
607554
if a.Unit != nil {
608555
switch *a.Unit {
609556
case AlertSettingUnitMgdL:
610-
validator.Float64("value", a.Value).Exists().OneOf(AlertSettingValueLowMgdLs()...)
557+
validator.Float64("value", a.Value).Exists().InRange(AlertSettingValueLowMgdLMinimum, AlertSettingValueLowMgdLMaximum)
611558
}
612559
}
613-
validator.Int("snooze", a.Snooze).Exists().OneOf(AlertSettingSnoozeLows()...)
560+
validator.Int("snooze", a.Snooze).Exists().InRange(AlertSettingSnoozeMinutesMinimum, AlertSettingSnoozeMinutesMaximum)
614561
validator.Bool("enabled", a.Enabled).Exists()
615562
}
616563

@@ -619,10 +566,10 @@ func (a *AlertSetting) validateNoReadings(validator structure.Validator) {
619566
if a.Unit != nil {
620567
switch *a.Unit {
621568
case AlertSettingUnitMinutes:
622-
validator.Float64("value", a.Value).Exists().OneOf(AlertSettingValueNoReadingsMinutes()...)
569+
validator.Float64("value", a.Value).Exists().InRange(AlertSettingValueNoReadingsMgdLMinimum, AlertSettingValueNoReadingsMgdLMaximum)
623570
}
624571
}
625-
validator.Int("snooze", a.Snooze).OneOf(AlertSettingSnoozeNoReadings()...)
572+
validator.Int("snooze", a.Snooze).InRange(AlertSettingSnoozeMinutesMinimum, AlertSettingSnoozeMinutesMaximum)
626573
validator.Bool("enabled", a.Enabled).Exists()
627574
}
628575

@@ -631,10 +578,10 @@ func (a *AlertSetting) validateOutOfRange(validator structure.Validator) {
631578
if a.Unit != nil {
632579
switch *a.Unit {
633580
case AlertSettingUnitMinutes:
634-
validator.Float64("value", a.Value).Exists().OneOf(AlertSettingValueOutOfRangeMinutes()...)
581+
validator.Float64("value", a.Value).Exists().InRange(AlertSettingValueOutOfRangeMgdLMinimum, AlertSettingValueOutOfRangeMgdLMaximum)
635582
}
636583
}
637-
validator.Int("snooze", a.Snooze).OneOf(AlertSettingSnoozeOutOfRanges()...)
584+
validator.Int("snooze", a.Snooze).InRange(AlertSettingSnoozeMinutesMinimum, AlertSettingSnoozeMinutesMaximum)
638585
validator.Bool("enabled", a.Enabled).Exists()
639586
}
640587

@@ -643,10 +590,10 @@ func (a *AlertSetting) validateRise(validator structure.Validator) {
643590
if a.Unit != nil {
644591
switch *a.Unit {
645592
case AlertSettingUnitMgdLMinute:
646-
validator.Float64("value", a.Value).Exists().OneOf(AlertSettingValueRiseMgdLMinutes()...)
593+
validator.Float64("value", a.Value).Exists().InRange(AlertSettingValueRiseMgdLMinuteMinimum, AlertSettingValueRiseMgdLMinuteMaximum)
647594
}
648595
}
649-
validator.Int("snooze", a.Snooze).OneOf(AlertSettingSnoozeRises()...)
596+
validator.Int("snooze", a.Snooze).InRange(AlertSettingSnoozeMinutesMinimum, AlertSettingSnoozeMinutesMaximum)
650597
validator.Bool("enabled", a.Enabled).Exists()
651598
}
652599

@@ -660,10 +607,10 @@ func (a *AlertSetting) validateUrgentLow(validator structure.Validator) {
660607
if a.Unit != nil {
661608
switch *a.Unit {
662609
case AlertSettingUnitMgdL:
663-
validator.Float64("value", a.Value).Exists().OneOf(AlertSettingValueUrgentLowMgdLs()...)
610+
validator.Float64("value", a.Value).Exists().InRange(AlertSettingValueUrgentLowMgdLMinimum, AlertSettingValueUrgentLowMgdLMaximum)
664611
}
665612
}
666-
validator.Int("snooze", a.Snooze).Exists().OneOf(AlertSettingSnoozeUrgentLows()...)
613+
validator.Int("snooze", a.Snooze).Exists().InRange(AlertSettingSnoozeMinutesMinimum, AlertSettingSnoozeMinutesMaximum)
667614
validator.Bool("enabled", a.Enabled).Exists().True()
668615
}
669616

@@ -672,10 +619,10 @@ func (a *AlertSetting) validateUrgentLowSoon(validator structure.Validator) {
672619
if a.Unit != nil {
673620
switch *a.Unit {
674621
case AlertSettingUnitMgdL:
675-
validator.Float64("value", a.Value).Exists().OneOf(AlertSettingValueUrgentLowSoonMgdLs()...)
622+
validator.Float64("value", a.Value).Exists().InRange(AlertSettingValueUrgentLowSoonMgdLMinimum, AlertSettingValueUrgentLowSoonMgdLMaximum)
676623
}
677624
}
678-
validator.Int("snooze", a.Snooze).Exists().OneOf(AlertSettingSnoozeUrgentLowSoons()...)
625+
validator.Int("snooze", a.Snooze).Exists().InRange(AlertSettingSnoozeMinutesMinimum, AlertSettingSnoozeMinutesMaximum)
679626
validator.Bool("enabled", a.Enabled).Exists()
680627
}
681628

0 commit comments

Comments
 (0)