package org.openmhealth.shim.runkeeper.mapper;
import com.fasterxml.jackson.databind.JsonNode;
import org.openmhealth.schema.domain.omh.*;
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.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.openmhealth.schema.domain.omh.CaloriesBurned.SCHEMA_ID;
import static org.openmhealth.schema.domain.omh.DataPointModality.SENSED;
import static org.openmhealth.schema.domain.omh.DurationUnit.SECOND;
import static org.openmhealth.schema.domain.omh.KcalUnit.KILOCALORIE;
import static org.openmhealth.schema.domain.omh.TimeInterval.ofStartDateTimeAndDuration;
import static org.openmhealth.shim.runkeeper.mapper.RunkeeperDataPointMapper.RESOURCE_API_SOURCE_NAME;
/**
* @author Chris Schaefbauer
*/
public class RunkeeperCaloriesBurnedDataPointMapperUnitTests extends DataPointMapperUnitTests {
private JsonNode responseNode;
private final RunkeeperCaloriesBurnedDataPointMapper mapper = new RunkeeperCaloriesBurnedDataPointMapper();
@BeforeTest
public void initializeResponseNode() throws IOException {
responseNode = asJsonNode("org/openmhealth/shim/runkeeper/mapper/runkeeper-fitness-activities.json");
}
@Test
public void asDataPointsShouldReturnCorrectNumberOfDataPoints() {
assertThat(mapper.asDataPoints(responseNode).size(), equalTo(1));
}
@Test
public void asDataPointsShouldReturnCorrectDataPointBodies() {
List<DataPoint<CaloriesBurned>> dataPoints = mapper.asDataPoints(responseNode);
CaloriesBurned expectedCaloriesBurned =
new CaloriesBurned.Builder(new KcalUnitValue(KILOCALORIE, 210.796359954334))
.setActivityName("Cycling")
.setEffectiveTimeFrame(ofStartDateTimeAndDuration(
OffsetDateTime.parse("2014-10-19T13:17:27+02:00"),
new DurationUnitValue(SECOND, 4364.74158141667)))
.build();
assertThat(dataPoints.get(0).getBody(), equalTo(expectedCaloriesBurned));
}
@Test
public void asDataPointsShouldReturnCorrectDataPointHeaders() {
DataPointHeader firstTestHeader = mapper.asDataPoints(responseNode).get(0).getHeader();
assertThat(firstTestHeader.getAcquisitionProvenance().getModality(), equalTo(SENSED));
assertThat(firstTestHeader.getBodySchemaId(), equalTo(SCHEMA_ID));
assertThat(firstTestHeader.getAcquisitionProvenance().getAdditionalProperty("external_id").get(),
equalTo("/fitnessActivities/465161536"));
assertThat(firstTestHeader.getAcquisitionProvenance().getSourceName(),
equalTo(RESOURCE_API_SOURCE_NAME));
}
}