package ch.elexis.data;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertTrue;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAmount;
import java.time.temporal.TemporalUnit;
import java.util.List;
import org.junit.Test;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.events.ElexisEvent;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.model.issue.ProcessStatus;
import ch.elexis.core.model.issue.Visibility;
import ch.rgw.tools.JdbcLink;
import ch.rgw.tools.TimeTool;
public class Test_Reminder extends AbstractPersistentObjectTest {
private Anwender anwender;
private Patient patient;
public Test_Reminder(JdbcLink link){
super(link);
User user = User.load("Administrator");
if (user.getAssignedContact() == null) {
anwender = new Anwender("Name", "Vorname", (String) null, "w");
user.setAssignedContact(anwender);
} else {
anwender = user.getAssignedContact();
}
// set user and Mandant in system
ElexisEventDispatcher.getInstance()
.fire(new ElexisEvent(user, User.class, ElexisEvent.EVENT_SELECTED));
Mandant m = new Mandant("Mandant", "Erwin", "26.07.1979", "m");
patient = new Patient("Mia", "Krank", "22041982", "w");
CoreHub.setMandant(m);
}
@Test
public void testAddRemoveResponsible() throws InterruptedException{
Reminder reminder = new Reminder(null, new TimeTool().toString(TimeTool.DATE_GER),
Visibility.ALWAYS, "", "TestMessage");
long lastUpdate = reminder.getLastUpdate();
assertNotSame(0L, reminder.getLastUpdate());
Thread.sleep(2);
reminder.addResponsible(anwender);
reminder.addResponsible(anwender);
assertTrue(reminder.getLastUpdate() > lastUpdate);
assertEquals(1, reminder.getResponsibles().size());
lastUpdate = reminder.getLastUpdate();
Thread.sleep(2);
reminder.removeResponsible(anwender);
assertTrue(reminder.getLastUpdate() > lastUpdate);
assertEquals(0, reminder.getResponsibles().size());
reminder.delete();
}
@Test
public void testFindOpenRemindersResponsibleFor(){
Reminder reminderClosed = new Reminder(null, new TimeTool().toString(TimeTool.DATE_GER),
Visibility.ALWAYS, "", "TestMessage");
reminderClosed.addResponsible(CoreHub.actUser);
reminderClosed.set(Reminder.FLD_STATUS,
Integer.toString(ProcessStatus.CLOSED.numericValue()));
Reminder reminder = new Reminder(null, new TimeTool().toString(TimeTool.DATE_GER),
Visibility.ALWAYS, "", "TestMessage");
reminder.addResponsible(CoreHub.actUser);
assertEquals(1,
Reminder.findOpenRemindersResponsibleFor(CoreHub.actUser, false, null, false).size());
Reminder patientSpecificReminder = new Reminder(patient,
new TimeTool().toString(TimeTool.DATE_GER), Visibility.ALWAYS, "", "TestMessage");
patientSpecificReminder.addResponsible(CoreHub.actUser);
assertEquals(2,
Reminder.findOpenRemindersResponsibleFor(CoreHub.actUser, false, null, false).size());
assertEquals(1,
Reminder.findOpenRemindersResponsibleFor(null, false, patient, false).size());
Reminder popupReminder = new Reminder(patient, new TimeTool().toString(TimeTool.DATE_GER),
Visibility.POPUP_ON_PATIENT_SELECTION, "", "TestMessage");
popupReminder.addResponsible(CoreHub.actUser);
assertEquals(3,
Reminder.findOpenRemindersResponsibleFor(CoreHub.actUser, false, null, false).size());
assertEquals(1,
Reminder.findOpenRemindersResponsibleFor(CoreHub.actUser, false, null, true).size());
assertEquals(1,
Reminder.findOpenRemindersResponsibleFor(CoreHub.actUser, false, patient, true).size());
TimeTool timeTool = new TimeTool(LocalDate.now().minusDays(1));
Reminder dueReminder = new Reminder(null, timeTool.toString(TimeTool.DATE_GER),
Visibility.ALWAYS, "", "TestMessage");
dueReminder.addResponsible(anwender);
// is 120217
List<Reminder> dueReminders =
Reminder.findOpenRemindersResponsibleFor(anwender, true, null, false);
assertEquals(1, dueReminders.size());
assertEquals(dueReminder.getId(), dueReminders.get(0).getId());
dueReminder.delete();
reminderClosed.delete();
reminder.delete();
patientSpecificReminder.delete();
popupReminder.delete();
}
}