package info.ozkan.vipera.business.notification; import static java.util.Arrays.asList; import info.ozkan.vipera.business.notification.NotificationGenerator; import info.ozkan.vipera.entities.Doctor; import info.ozkan.vipera.entities.DoctorNotificationSetting; import info.ozkan.vipera.entities.HealthData; import info.ozkan.vipera.entities.HealthDataValue; import info.ozkan.vipera.entities.Notification; import info.ozkan.vipera.entities.Patient; import info.ozkan.vipera.patient.PatientTestData; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; /** * {@link NotificationGenerator} test sınıfı * * @author Ömer Özkan * */ public class NotificationGeneratorTest { /** * Android */ private static final String ANDROID = "android"; /** * SMS */ private static final String SMS = "sms"; /** * Test edilen sınıf nesnesi */ private final NotificationGenerator generator = new NotificationGenerator(); /** * Hasta */ private Patient patient; @Before public void setUp() throws Exception { patient = PatientTestData.getTestData(PatientTestData.MARVIN); } /** * Hekimler sistemde hiç bir bildirim almak için onay vermemiştir. Hiç bir * bildirim üretilmez. * * @throws Exception */ @Test public void allDoctorsDisabledForNotificationGetNothing() throws Exception { final Doctor doctor1 = createDoctor(false, false); final Doctor doctor2 = createDoctor(false, false); setDoctors(doctor1, doctor2); final HealthData healthData = createHealthData(); final List<HealthDataValue> filteredValues = createDummyFilteredValues(); final List<Notification> result = generator.generate(healthData, filteredValues); Assert.assertEquals(0, result.size()); } /** * Hekimler sistemde iki yöntemle bildirim almaktadır. İki sağlık alanı ile * ilgili bildirim gönderilmek istenir. Hastaya ait iki hekim bulunmaktadır. * Toplamda 2 bildirim türü * 2 hekim sayısı * 2 sağlık verisi = 8 adet * bildirim gönderilir. * * @throws Exception */ @Test public void allDoctorEnabledForAllNotificationGet8() throws Exception { final Doctor doctor1 = createDoctor(true, true); final Doctor doctor2 = createDoctor(true, true); setDoctors(doctor1, doctor2); final HealthData healthData = createHealthData(); final List<HealthDataValue> filteredValues = createDummyFilteredValues(); final List<Notification> result = generator.generate(healthData, filteredValues); Assert.assertEquals(2 * 2 * 2, result.size()); } /** * Hekimlerinden sadece biri iki yöntemle bildiri alır. Toplamda 4 bildirim * gönderilir. * * @throws Exception */ @Test public void oneDoctorEnabledForTwoTypeNotificationsGet4() throws Exception { final Doctor doctor1 = createDoctor(true, true); final Doctor doctor2 = createDoctor(false, false); setDoctors(doctor1, doctor2); final HealthData healthData = createHealthData(); final List<HealthDataValue> filteredValues = createDummyFilteredValues(); final List<Notification> result = generator.generate(healthData, filteredValues); Assert.assertEquals(2 * 2, result.size()); } /** * Test verileri için sağlık verisi üretir * * @return */ private List<HealthDataValue> createDummyFilteredValues() { final List<HealthDataValue> filteredValues = new ArrayList<HealthDataValue>(); final HealthDataValue value1 = new HealthDataValue(); value1.setValue(1.0); final HealthDataValue value2 = new HealthDataValue(); value2.setValue(1.0); filteredValues.add(value1); filteredValues.add(value2); return filteredValues; } /** * Sağlık verisi nesnesi üretir * * @return */ private HealthData createHealthData() { final HealthData healthData = new HealthData(); healthData.setPatient(patient); return healthData; } /** * Hastaya hekim atar * * @param doctor1 * 1. hekim * @param doctor2 * 2. hekim */ private void setDoctors(final Doctor doctor1, final Doctor doctor2) { patient.setDoctors(asList(doctor1, doctor2)); } /** * Hekim nesnesi üretir * * @param sms * @param android * @return */ private Doctor createDoctor(final boolean sms, final boolean android) { final DoctorNotificationSetting notification1 = createNotification(SMS, sms); final DoctorNotificationSetting notification2 = createNotification(ANDROID, android); final Doctor doctor = new Doctor(); doctor.setSettings(asList(notification1, notification2)); return doctor; } /** * Bildirim ayarı üretir * * @param provider * @param enabled * @return */ private DoctorNotificationSetting createNotification(final String provider, final boolean enabled) { final DoctorNotificationSetting setting = new DoctorNotificationSetting(); setting.setEnabled(enabled); setting.setProviderId(provider); return setting; } }