wangzhibo
2026-08-16 ae6f40460dcd56af6c5f60ba52c883854c3bac55
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
122
package nodomain.freeyourgadget.gadgetbridge.model;
 
import static org.junit.Assert.*;
 
import org.junit.Test;
 
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
 
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryEntry;
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummaryProgressEntry;
import nodomain.freeyourgadget.gadgetbridge.activities.workouts.entries.ActivitySummarySimpleEntry;
 
public class ActivitySummaryDataTest {
    /**
     * Ensure that we can still deserialize old workouts that consisted of manual json and had
     * no explicit type.
     */
    @Test
    public void deserializeOld() {
        final String json = "{\n" +
                "    \"activeSeconds\": {\n" +
                "        \"group\": \"Some Group\",\n" +
                "        \"value\": 3828,\n" +
                "        \"unit\": \"seconds\"\n" +
                "    },\n" +
                "    \"averageHR\": {\n" +
                "        \"value\": 81,\n" +
                "        \"unit\": \"bpm\"\n" +
                "    },\n" +
                "    \"maxHR\": {\n" +
                "        \"value\": 115,\n" +
                "        \"unit\": \"bpm\"\n" +
                "    },\n" +
                "    \"minHR\": {\n" +
                "        \"value\": 61,\n" +
                "        \"unit\": \"bpm\"\n" +
                "    },\n" +
                "    \"caloriesBurnt\": {\n" +
                "        \"value\": 228,\n" +
                "        \"unit\": \"calories_unit\"\n" +
                "    },\n" +
                "    \"hrZoneNa\": {\n" +
                "        \"value\": 3365,\n" +
                "        \"unit\": \"seconds\"\n" +
                "    },\n" +
                "    \"hrZoneWarmUp\": {\n" +
                "        \"value\": 447,\n" +
                "        \"unit\": \"seconds\"\n" +
                "    },\n" +
                "    \"aerobicTrainingEffect\": {\n" +
                "        \"value\": 0.20000000298023224,\n" +
                "        \"unit\": \"\"\n" +
                "    },\n" +
                "    \"currentWorkoutLoad\": {\n" +
                "        \"value\": 1,\n" +
                "        \"unit\": \"\"\n" +
                "    }\n" +
                "}";
 
        final ActivitySummaryData summaryData = ActivitySummaryData.fromJson(json);
 
        assertNotNull(summaryData);
 
        final Map<String, ActivitySummaryEntry> expected = new LinkedHashMap<String, ActivitySummaryEntry>() {{
            put("activeSeconds", new ActivitySummarySimpleEntry("Some Group", 3828, "seconds"));
            put("averageHR", new ActivitySummarySimpleEntry(81, "bpm"));
            put("maxHR", new ActivitySummarySimpleEntry(115, "bpm"));
            put("minHR", new ActivitySummarySimpleEntry(61, "bpm"));
            put("caloriesBurnt", new ActivitySummarySimpleEntry(228, "calories_unit"));
            put("hrZoneNa", new ActivitySummarySimpleEntry(3365, "seconds"));
            put("hrZoneWarmUp", new ActivitySummarySimpleEntry(447, "seconds"));
            put("aerobicTrainingEffect", new ActivitySummarySimpleEntry(0.20000000298023224, ""));
            put("currentWorkoutLoad", new ActivitySummarySimpleEntry(1, ""));
        }};
 
        final List<String> keys = new ArrayList<>(summaryData.getKeys());
        assertEquals(new ArrayList<>(expected.keySet()), keys);
 
        for (final Map.Entry<String, ActivitySummaryEntry> e : expected.entrySet()) {
            final ActivitySummaryEntry jsonEntry = summaryData.get(e.getKey());
            assertTrue(jsonEntry instanceof ActivitySummarySimpleEntry);
            assertEquals(e.getValue().getGroup(), jsonEntry.getGroup());
 
            Number expectedValue = (Number) ((ActivitySummarySimpleEntry) e.getValue()).getValue();
            Number actualValue = (Number) ((ActivitySummarySimpleEntry) jsonEntry).getValue();
 
            assertEquals(expectedValue.doubleValue(), actualValue.doubleValue(), 0.000000001d);
            assertEquals(((ActivitySummarySimpleEntry) e.getValue()).getUnit(), ((ActivitySummarySimpleEntry) jsonEntry).getUnit());
        }
    }
 
    @Test
    public void deserializeSerializeNew() {
        final String json = "{" +
                "\"test_progress\":{" +
                "\"type\":\"progress\"," +
                "\"progress\":51," +
                "\"color\":0," +
                "\"value\":3828.0," +
                "\"unit\":\"seconds\"" +
                "}" +
                "}";
 
        final ActivitySummaryData summaryData = ActivitySummaryData.fromJson(json);
 
        assertNotNull(summaryData);
 
        ActivitySummaryEntry activitySummaryEntry = summaryData.get("test_progress");
        assertTrue(activitySummaryEntry instanceof ActivitySummaryProgressEntry);
 
        ActivitySummaryProgressEntry testProgress = (ActivitySummaryProgressEntry) activitySummaryEntry;
 
        assertEquals(3828, ((Number) testProgress.getValue()).doubleValue(), 0.000000001d);
        assertEquals("seconds", testProgress.getUnit());
        assertEquals(51, testProgress.getProgress());
 
        assertEquals(json, summaryData.toJson());
    }
}