package org.openmhealth.shim.jawbone.mapper; import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.Maps; import org.openmhealth.schema.domain.omh.*; import org.springframework.core.io.ClassPathResource; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import java.io.IOException; import java.time.OffsetDateTime; import java.util.List; import java.util.Map; import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; /** * @author Chris Schaefbauer */ public class JawboneSleepDurationDataPointMapperUnitTests extends JawboneDataPointMapperUnitTests<SleepDuration> { JawboneSleepDurationDataPointMapper mapper = new JawboneSleepDurationDataPointMapper(); @BeforeTest public void initializeResponseNodes() throws IOException { ClassPathResource resource = new ClassPathResource("org/openmhealth/shim/jawbone/mapper/jawbone-sleeps.json"); responseNode = objectMapper.readTree(resource.getInputStream()); initializeEmptyNode(); } @Test public void asDataPointsShouldReturnNoDataPointsWithEmptyResponse() { testEmptyNode(mapper); } @Test public void asDataPointsShouldReturnCorrectNumberOfDataPoints() { List<DataPoint<SleepDuration>> dataPoints = mapper.asDataPoints(singletonList(responseNode)); assertThat(dataPoints.size(), equalTo(2)); } @Test public void asDataPointsShouldReturnCorrectDataPointsWhenWakeUpCountEqualZeroAndShared() { List<DataPoint<SleepDuration>> dataPoints = mapper.asDataPoints(singletonList(responseNode)); SleepDuration expectedSleepDuration = new SleepDuration .Builder(new DurationUnitValue(DurationUnit.SECOND, 10356)) .setEffectiveTimeFrame( TimeInterval.ofStartDateTimeAndEndDateTime(OffsetDateTime.parse("2015-08-04T22:48:51-06:00"), OffsetDateTime.parse("2015-08-05T01:58:35-06:00"))) .build(); expectedSleepDuration.setAdditionalProperty("wakeup_count", 0); assertThat(dataPoints.get(0).getBody(), equalTo(expectedSleepDuration)); Map<String, Object> testProperties = Maps.newHashMap(); testProperties.put(HEADER_EXTERNAL_ID_KEY, "QkfTizSpRdsDKwErMhvMqG9VDhpfyDGd"); testProperties.put(HEADER_SOURCE_UPDATE_KEY, "2015-08-05T09:52:00Z"); testProperties.put(HEADER_SCHEMA_ID_KEY, SleepDuration.SCHEMA_ID); testProperties.put(HEADER_SHARED_KEY, true); testProperties.put(HEADER_SENSED_KEY, DataPointModality.SENSED); testDataPointHeader(dataPoints.get(0).getHeader(), testProperties); } @Test public void asDataPointsShouldReturnCorrectDataPointsWhenWakeUpCountGreaterThanZeroAndNotShared() { List<DataPoint<SleepDuration>> dataPoints = mapper.asDataPoints(singletonList(responseNode)); SleepDuration expectedSleepDuration = new SleepDuration.Builder(new DurationUnitValue(DurationUnit.SECOND, 27900)).setEffectiveTimeFrame( TimeInterval.ofStartDateTimeAndEndDateTime(OffsetDateTime.parse("2015-08-03T23:05:00-04:00"), OffsetDateTime.parse("2015-08-04T07:15:00-04:00"))).build(); expectedSleepDuration.setAdditionalProperty("wakeup_count", 2); assertThat(dataPoints.get(1).getBody(), equalTo(expectedSleepDuration)); Map<String, Object> testProperties = Maps.newHashMap(); testProperties.put(HEADER_SHARED_KEY, false); testProperties.put(HEADER_EXTERNAL_ID_KEY, "QkfTizSpRdvIs6MMJbKP6ulqeYwu5c2v"); testProperties.put(HEADER_SCHEMA_ID_KEY, SleepDuration.SCHEMA_ID); testProperties.put(HEADER_SOURCE_UPDATE_KEY, "2015-08-04T12:10:56Z"); testProperties.put(HEADER_SENSED_KEY, DataPointModality.SENSED); testDataPointHeader(dataPoints.get(1).getHeader(), testProperties); } @Test public void isSensedShouldReturnTrueWhenAwakePropertyExistsAndGreaterThanZero() throws IOException { JsonNode testNode = objectMapper.readTree("{\n" + "\"details\": {\n" + "\"awake\": 100,\n" + "\"light\": 0\n" + "},\n" + "\"time_created\": 1439990403\n" + "}"); assertThat(mapper.isSensed(testNode), equalTo(true)); } @Test public void isSensedShouldReturnTrueWhenLightPropertyExistsAndGreaterThanZero() throws IOException { JsonNode testNode = objectMapper.readTree("{\n" + "\"details\": {\n" + "\"awake\": 0,\n" + "\"light\": 100\n" + "},\n" + "\"time_created\": 1439990403\n" + "}"); assertThat(mapper.isSensed(testNode), equalTo(true)); } @Test public void isSensedShouldReturnTrueWhenLightAndAwakePropertiesExistsAndGreaterThanZero() throws IOException { JsonNode testNode = objectMapper.readTree("{\n" + "\"details\": {\n" + "\"awake\": 100,\n" + "\"light\": 100\n" + "},\n" + "\"time_created\": 1439990403\n" + "}"); assertThat(mapper.isSensed(testNode), equalTo(true)); } @Test public void isSensedShouldReturnFalseWhenLightAndAwakePropertiesAreEqualToZero() throws IOException { JsonNode testNode = objectMapper.readTree("{\n" + "\"details\": {\n" + "\"awake\": 0,\n" + "\"light\": 0\n" + "},\n" + "\"time_created\": 1439990403\n" + "}"); assertThat(mapper.isSensed(testNode), equalTo(false)); } @Test public void isSensedShouldReturnFalseWhenLightOrAwakePropertiesAreMissing() throws IOException { JsonNode testNode = objectMapper.readTree("{\n" + "\"details\": {\n" + "\"awake\": 0\n" + "},\n" + "\"time_created\": 1439990403\n" + "}"); assertThat(mapper.isSensed(testNode), equalTo(false)); testNode = objectMapper.readTree("{\n" + "\"details\": {\n" + "\"light\": 0\n" + "},\n" + "\"time_created\": 1439990403\n" + "}"); assertThat(mapper.isSensed(testNode), equalTo(false)); } }