package edu.ualberta.med.biobank.test.reports;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import edu.ualberta.med.biobank.common.util.Mapper;
import edu.ualberta.med.biobank.common.util.MapperUtil;
import edu.ualberta.med.biobank.common.util.PredicateUtil;
import edu.ualberta.med.biobank.common.wrappers.ProcessingEventWrapper;
public class FvLPatientVisitsTest extends AbstractReportTest {
private static final Mapper<ProcessingEventWrapper, List<String>, List<Date>> GROUP_PVS_BY_STUDY_CLINIC =
new Mapper<ProcessingEventWrapper, List<String>, List<Date>>() {
@Override
public List<String> getKey(ProcessingEventWrapper pevent) {
return Arrays.asList(pevent.getCenter().getNameShort(), pevent
.getCenter().getNameShort());
}
@Override
public List<Date> getValue(ProcessingEventWrapper pevent,
List<Date> stats) {
Date newDateReceived = pevent.getCreatedAt();
if (stats == null) {
return Arrays.asList(newDateReceived, newDateReceived);
}
Date minDateReceived = stats.get(0);
Date maxDateReceived = stats.get(1);
if (newDateReceived.before(minDateReceived)) {
minDateReceived = newDateReceived;
}
if (newDateReceived.after(maxDateReceived)) {
maxDateReceived = newDateReceived;
}
return Arrays.asList(minDateReceived, maxDateReceived);
}
};
@Test
public void testResults() throws Exception {
checkResults(EnumSet.of(CompareResult.SIZE));
}
@Override
protected Collection<Object> getExpectedResults() throws Exception {
Collection<ProcessingEventWrapper> allPatientVisits =
getPatientVisits();
Collection<ProcessingEventWrapper> filteredPatientVisits =
PredicateUtil
.filter(allPatientVisits,
patientVisitSite(isInSite(), getSiteId()));
Map<List<String>, List<Date>> groupedPatientVisits = MapperUtil.map(
filteredPatientVisits, GROUP_PVS_BY_STUDY_CLINIC);
List<Object> expectedResults = new ArrayList<Object>();
List<Object> objects = new ArrayList<Object>();
for (Map.Entry<List<String>, List<Date>> entry : groupedPatientVisits
.entrySet()) {
objects.clear();
objects.addAll(entry.getKey());
objects.addAll(entry.getValue());
expectedResults.add(objects.toArray());
}
return expectedResults;
}
}