package ch.elexis.core.findings;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.junit.Before;
import org.junit.Test;
import ch.elexis.core.findings.ICondition.ConditionCategory;
import ch.elexis.core.findings.ICondition.ConditionStatus;
import ch.elexis.core.findings.test.AllTests;
public class ConditionTest {
@Before
public void beforeTest(){
AllTests.deleteAllFindings();
List<IFinding> findings = FindingsServiceComponent.getService()
.getPatientsFindings(AllTests.PATIENT_ID, IFinding.class);
assertTrue(findings.isEmpty());
}
@Test
public void manyConditions() {
IFindingsFactory factory = FindingsServiceComponent.getService().getFindingsFactory();
assertNotNull(factory);
// create many
for (int i = 0; i < 1000; i++) {
ICondition condition = factory.createCondition();
assertNotNull(condition);
// set the properties
condition.setPatientId(AllTests.PATIENT_ID);
LocalDate dateRecorded = LocalDate.of(2016, Month.DECEMBER, 29);
condition.setDateRecorded(dateRecorded);
condition.setCategory(ConditionCategory.DIAGNOSIS);
condition.setStatus(ConditionStatus.ACTIVE);
condition.setText("Condition " + i);
FindingsServiceComponent.getService().saveFinding(condition);
}
// test many
List<IFinding> findings = FindingsServiceComponent.getService().getPatientsFindings(AllTests.PATIENT_ID,
ICondition.class);
assertEquals(1000, findings.size());
for (IFinding iFinding : findings) {
assertTrue(iFinding instanceof ICondition);
Optional<LocalDate> dateRecorded = ((ICondition)iFinding).getDateRecorded();
assertTrue(dateRecorded.isPresent());
assertEquals(LocalDate.of(2016, Month.DECEMBER, 29), dateRecorded.get());
}
}
@Test
public void getProperties(){
IFindingsFactory factory = FindingsServiceComponent.getService().getFindingsFactory();
assertNotNull(factory);
ICondition condition = factory.createCondition();
assertNotNull(condition);
// set the properties
condition.setPatientId(AllTests.PATIENT_ID);
LocalDate dateRecorded = LocalDate.of(2016, Month.OCTOBER, 19);
condition.setDateRecorded(dateRecorded);
condition.setCategory(ConditionCategory.DIAGNOSIS);
condition.setStatus(ConditionStatus.ACTIVE);
condition.addNote("first note");
condition.addNote("second note\nthird note");
LocalDateTime startTime = LocalDateTime.of(2016, Month.OCTOBER, 1, 12, 0, 0);
condition.setStart(startTime.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")));
ICoding code = new ICoding() {
@Override
public String getSystem(){
return "testSystem";
}
@Override
public String getDisplay(){
return "test display";
}
@Override
public String getCode(){
return "test";
}
};
condition.setCoding(Collections.singletonList(code));
condition.addStringExtension("test", "testValue");
FindingsServiceComponent.getService().saveFinding(condition);
List<IFinding> conditions = FindingsServiceComponent.getService()
.getPatientsFindings(AllTests.PATIENT_ID, ICondition.class);
assertNotNull(conditions);
assertFalse(conditions.isEmpty());
assertEquals(1, conditions.size());
// read condition and test the properties
ICondition readcondition = (ICondition) conditions.get(0);
assertEquals(AllTests.PATIENT_ID,
readcondition.getPatientId());
assertTrue(readcondition.getDateRecorded().isPresent());
assertEquals(dateRecorded, readcondition.getDateRecorded().get());
List<String> notes = readcondition.getNotes();
assertNotNull(notes);
assertFalse(notes.isEmpty());
assertTrue(notes.get(0).equals("first note"));
assertTrue(notes.get(1).equals("second note\nthird note"));
assertTrue(readcondition.getStart().isPresent());
assertEquals(startTime.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")),
readcondition.getStart().get());
List<ICoding> coding = readcondition.getCoding();
assertNotNull(coding);
assertFalse(coding.isEmpty());
assertEquals(coding.get(0).getDisplay(), "test display");
Map<String, String> extensions = readcondition.getStringExtensions();
assertFalse(extensions.isEmpty());
assertTrue(extensions.containsKey("test"));
assertEquals("testValue", extensions.get("test"));
}
}