package org.openmhealth.shim.fitbit.mapper; import com.fasterxml.jackson.databind.JsonNode; import org.openmhealth.schema.domain.omh.BodyMassIndex; import org.openmhealth.schema.domain.omh.BodyMassIndexUnit; import org.openmhealth.schema.domain.omh.DataPoint; import org.openmhealth.schema.domain.omh.TypedUnitValue; import org.openmhealth.shim.common.mapper.DataPointMapperUnitTests; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import java.io.IOException; import java.time.OffsetDateTime; import java.util.List; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.openmhealth.schema.domain.omh.BodyMassIndexUnit.KILOGRAMS_PER_SQUARE_METER; /** * @author Chris Schaefbauer * @author Emerson Farrugia */ public class FitbitBodyMassIndexDataPointMapperUnitTests extends DataPointMapperUnitTests { private final FitbitBodyMassIndexDataPointMapper mapper = new FitbitBodyMassIndexDataPointMapper(); private JsonNode responseNode; @BeforeTest public void initializeResponseNode() throws IOException { responseNode = asJsonNode("org/openmhealth/shim/fitbit/mapper/fitbit-body-log-weight.json"); } @Test public void asDataPointsShouldReturnCorrectNumberOfDataPoints() { assertThat(mapper.asDataPoints(responseNode).size(), equalTo(4)); } @Test public void asDataPointsShouldReturnCorrectDataPoints() { List<DataPoint<BodyMassIndex>> dataPoints = mapper.asDataPoints(responseNode); assertThatDataPointMatches(dataPoints.get(0), 21.48, "2015-05-13T18:28:59Z", 1431541739000L); assertThatDataPointMatches(dataPoints.get(1), 21.17, "2015-05-14T11:51:57Z", 1431604317000L); assertThatDataPointMatches(dataPoints.get(2), 21.99, "2015-05-22T18:12:06Z", 1432318326000L); assertThatDataPointMatches(dataPoints.get(3), 21.65, "2015-05-24T15:15:25Z", 1432480525000L); } public void assertThatDataPointMatches(DataPoint<BodyMassIndex> dataPoint, double expectedBmiValue, String expectedEffectiveDateTime, long expectedExternalId) { TypedUnitValue<BodyMassIndexUnit> bmiUnitValue = new TypedUnitValue<>(KILOGRAMS_PER_SQUARE_METER, expectedBmiValue); BodyMassIndex expectedBodyMassIndex = new BodyMassIndex.Builder(bmiUnitValue) .setEffectiveTimeFrame(OffsetDateTime.parse(expectedEffectiveDateTime)) .build(); assertThat(dataPoint.getBody(), equalTo(expectedBodyMassIndex)); assertThat(dataPoint.getHeader().getBodySchemaId(), equalTo(BodyMassIndex.SCHEMA_ID)); assertThat(dataPoint.getHeader().getAcquisitionProvenance().getAdditionalProperties().get("external_id"), equalTo(expectedExternalId)); assertThat(dataPoint.getHeader().getAcquisitionProvenance().getSourceName(), equalTo(FitbitDataPointMapper.RESOURCE_API_SOURCE_NAME)); } }