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 expected = new LinkedHashMap() {{ 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 keys = new ArrayList<>(summaryData.getKeys()); assertEquals(new ArrayList<>(expected.keySet()), keys); for (final Map.Entry 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()); } }