5d8385832926f805f37d016a43f3ead09057d9d9
[kraftakt.git] / fitbit / sleep_test.go
1 package fitbit
2
3 import (
4         "context"
5         "reflect"
6         "testing"
7         "time"
8 )
9
10 func TestParseSleep(t *testing.T) {
11         ctx := context.Background()
12
13         input := `{
14     "dateOfSleep": "2017-04-02",
15     "duration": 42000,
16     "efficiency": 42,
17     "isMainSleep": true,
18     "levels": {
19         "summary": {
20             "deep": {
21                 "count": 42,
22                 "minutes": 42,
23                 "thirtyDayAvgMinutes": 42
24             },
25             "light": {
26                 "count": 42,
27                 "minutes": 42,
28                 "thirtyDayAvgMinutes": 42
29             },
30             "rem": {
31                 "count": 42,
32                 "minutes": 42,
33                 "thirtyDayAvgMinutes": 42
34             },
35             "wake": {
36                 "count": 42,
37                 "minutes": 42,
38                 "thirtyDayAvgMinutes": 42
39             }
40         },
41         "data": [
42             {
43                 "datetime": "2017-04-01T23:58:30.000",
44                 "level": "wake",
45                 "seconds": 1080
46             },
47             {
48                 "datetime": "2017-04-02T00:16:30.000",
49                 "level": "rem",
50                 "seconds": 2000
51             }
52         ],
53         "shortData": [
54             {
55                 "datetime": "2017-04-01T23:58:30.000",
56                 "level": "wake",
57                 "seconds": 1080
58             },
59             {
60                 "datetime": "2017-04-02T00:16:30.000",
61                 "level": "deep",
62                 "seconds": 100
63             },
64             {
65                 "datetime": "2017-04-02T00:18:10.000",
66                 "level": "rem",
67                 "seconds": 1900
68             }
69         ]
70     },
71     "logId": 42,
72     "minutesAfterWakeup": 42,
73     "minutesAsleep": 42,
74     "minutesAwake": 42,
75     "minutesToFallAsleep": 0,
76     "startTime": "2017-04-01T23:58:30.000",
77     "timeInBed": 42,
78     "type": "stages"
79 }`
80
81         want := &Sleep{
82                 Stages: []SleepStage{
83                         SleepStage{
84                                 StartTime: time.Date(2017, time.April, 1, 23, 58, 30, 0, time.UTC),
85                                 EndTime:   time.Date(2017, time.April, 2, 0, 16, 30, 0, time.UTC),
86                                 Level:     SleepLevelWake,
87                         },
88                         SleepStage{
89                                 StartTime: time.Date(2017, time.April, 2, 0, 16, 30, 0, time.UTC),
90                                 EndTime:   time.Date(2017, time.April, 2, 0, 18, 10, 0, time.UTC),
91                                 Level:     SleepLevelDeep,
92                         },
93                         SleepStage{
94                                 StartTime: time.Date(2017, time.April, 2, 0, 18, 10, 0, time.UTC),
95                                 EndTime:   time.Date(2017, time.April, 2, 0, 49, 50, 0, time.UTC),
96                                 Level:     SleepLevelREM,
97                         },
98                 },
99         }
100
101         got, err := parseSleep(ctx, []byte(input), time.UTC)
102         if err != nil {
103                 t.Errorf("parseSleep() = %v", err)
104         }
105
106         for i, stg := range got.Stages {
107                 t.Logf("got.Stages[%d] = %+v", i, stg)
108         }
109         for i, stg := range want.Stages {
110                 t.Logf("want.Stages[%d] = %+v", i, stg)
111         }
112
113         if !reflect.DeepEqual(got, want) {
114                 t.Errorf("parseSleep() = %+v, want %+v", got, want)
115         }
116 }