From e27a61c79a509f8121b93f6cd7d2e0fba67e4cc6 Mon Sep 17 00:00:00 2001
From: Elengikal <elengik2@fa20-cs427-053.cs.illinois.edu>
Date: Tue, 24 Nov 2020 18:16:58 -0600
Subject: [PATCH] adding junit and selenium tests for Subflow 1

---
 .../itrust/selenium/SendRemindersTest.java    | 88 +++++++++++++++++++
 .../unit/action/SendRemindersActionTest.java  | 68 ++++++++++++++
 .../unit/dao/appointment/ApptDAOTest.java     | 20 ++++-
 3 files changed, 174 insertions(+), 2 deletions(-)
 create mode 100644 iTrust/test/edu/ncsu/csc/itrust/selenium/SendRemindersTest.java
 create mode 100644 iTrust/test/edu/ncsu/csc/itrust/unit/action/SendRemindersActionTest.java

diff --git a/iTrust/test/edu/ncsu/csc/itrust/selenium/SendRemindersTest.java b/iTrust/test/edu/ncsu/csc/itrust/selenium/SendRemindersTest.java
new file mode 100644
index 0000000..45207bb
--- /dev/null
+++ b/iTrust/test/edu/ncsu/csc/itrust/selenium/SendRemindersTest.java
@@ -0,0 +1,88 @@
+package edu.ncsu.csc.itrust.selenium;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import java.text.SimpleDateFormat;  
+import java.util.Date; 
+import java.util.List;
+
+public class SendRemindersTest extends iTrustSeleniumTest{
+
+    protected WebDriver driver;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        gen.clearAllTables();
+        gen.standardData();
+    }
+
+    // Test sending reminders
+	public void testSendReminder() throws Exception {
+		// Login as admin
+        driver = login("9000000001", "pw");
+        assertEquals("iTrust - Admin Home", driver.getTitle());
+        driver.findElement(By.linkText("Send Appointment Reminders")).click();
+
+        // Send reminders
+        driver.findElement(By.name("withinDays")).sendKeys("10");
+        driver.findElement(By.name("withinDays")).submit();
+        assertEquals("Reminders were successfully sent",
+        driver.findElement(By.className("iTrustMessage")).getText());
+
+        // Create timestamp
+		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+		Date date = new Date();
+		String stamp = dateFormat.format(date);
+		
+        // Logout admin and login as patient
+		List<WebElement> links = driver.findElements(By.tagName("a"));
+		int count = 0;
+		for(int i = 0; i < links.size(); i++) {
+			if(links.get(i).getAttribute("href").contains("logout"))
+			{
+				count = i;
+				break;
+			}
+		}
+		links.get(count).click();
+		driver = login("5", "pw");
+		
+		// Check patient inbox
+        driver.findElement(By.linkText("Message Inbox")).click();
+        int index = 1;
+        WebElement baseTable = driver.findElement(By.cssSelector(".display.fTable"));
+        List<WebElement> tableRows = baseTable.findElements(By.tagName("tr"));
+        assertTrue(tableRows.get(index).getText().contains("System Reminder"));
+        assertTrue(tableRows.get(index).getText().contains("Reminder: upcoming appointment"));
+        index++;
+        assertTrue(tableRows.get(index).getText().contains("Reminder: upcoming appointment"));
+        assertTrue(tableRows.get(index).getText().contains(stamp));
+    }
+
+    // Test invalid number of days input for sending reminders
+	public void testInvalidSendReminder() throws Exception {
+
+        // Login as admin
+        driver = login("9000000001", "pw");
+        assertEquals("iTrust - Admin Home", driver.getTitle());
+        driver.findElement(By.linkText("Send Appointment Reminders")).click();
+
+        // Send reminder with negative days
+        driver.findElement(By.name("withinDays")).sendKeys("-4");
+        driver.findElement(By.name("withinDays")).submit();
+        assertEquals("Provide a positive number",
+        driver.findElement(By.className("iTrustError")).getText());
+    
+        // Send reminder with non-numberic days
+        driver.findElement(By.name("withinDays")).sendKeys("Hello");
+        driver.findElement(By.name("withinDays")).submit();
+        assertEquals("Reminders failed to send. Please provide a positive number",
+        driver.findElement(By.className("iTrustError")).getText());
+    }
+
+
+
+    
+}
\ No newline at end of file
diff --git a/iTrust/test/edu/ncsu/csc/itrust/unit/action/SendRemindersActionTest.java b/iTrust/test/edu/ncsu/csc/itrust/unit/action/SendRemindersActionTest.java
new file mode 100644
index 0000000..7112371
--- /dev/null
+++ b/iTrust/test/edu/ncsu/csc/itrust/unit/action/SendRemindersActionTest.java
@@ -0,0 +1,68 @@
+package edu.ncsu.csc.itrust.unit.action;
+
+import edu.ncsu.csc.itrust.action.SendRemindersAction;
+import edu.ncsu.csc.itrust.beans.ApptBean;
+import edu.ncsu.csc.itrust.beans.MessageBean;
+import edu.ncsu.csc.itrust.dao.DAOFactory;
+import edu.ncsu.csc.itrust.dao.mysql.MessageDAO;
+import edu.ncsu.csc.itrust.exception.FormValidationException;
+import edu.ncsu.csc.itrust.exception.ITrustException;
+import edu.ncsu.csc.itrust.unit.datagenerators.TestDataGenerator;
+import edu.ncsu.csc.itrust.unit.testutils.TestDAOFactory;
+import junit.framework.TestCase;
+
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+public class SendRemindersActionTest extends TestCase {
+
+	private DAOFactory factory;
+	private MessageDAO messageDAO;
+	private SendRemindersAction srAction;
+	private TestDataGenerator gen;
+	private long patientId;
+	private long hcpId;
+	
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		gen = new TestDataGenerator();
+		gen.clearAllTables();
+		gen.standardData();
+		
+		this.patientId = 2L;
+		this.hcpId = 9000000000L;
+		this.factory = TestDAOFactory.getTestInstance();
+		this.messageDAO = new MessageDAO(this.factory);
+		this.srAction = new SendRemindersAction(this.factory, this.hcpId);
+	}
+
+	public void testSendRemindersAction() throws ITrustException
+	{
+		int numberOfAppts = srAction.sendReminderForAppointments(10);
+		assertTrue(numberOfAppts >= 5);
+	}
+
+	public void testSendReminders() throws ITrustException, SQLException, FormValidationException {
+		ApptBean aBean = new ApptBean();
+
+        aBean.setApptType("TEST");
+        aBean.setPatient(patientId);
+        aBean.setHcp(hcpId);
+        aBean.setDate(Timestamp.valueOf(LocalDateTime.now().plusDays(4)));
+
+        List<MessageBean> mbListBefore = messageDAO.getMessagesFor(patientId);
+
+		srAction.sendReminder(aBean);
+		
+		List<MessageBean> mbList = messageDAO.getMessagesFor(patientId);
+
+		assertEquals(mbList.size(), mbListBefore.size() + 1);
+		MessageBean mBeanDB = mbList.get(0);
+		assertEquals("Reminder: upcoming appointment in 4 day(s)", mBeanDB.getSubject());
+	}
+
+}
\ No newline at end of file
diff --git a/iTrust/test/edu/ncsu/csc/itrust/unit/dao/appointment/ApptDAOTest.java b/iTrust/test/edu/ncsu/csc/itrust/unit/dao/appointment/ApptDAOTest.java
index f20dd33..77a4579 100644
--- a/iTrust/test/edu/ncsu/csc/itrust/unit/dao/appointment/ApptDAOTest.java
+++ b/iTrust/test/edu/ncsu/csc/itrust/unit/dao/appointment/ApptDAOTest.java
@@ -17,6 +17,8 @@ public class ApptDAOTest extends TestCase {
 	private DAOFactory factory = TestDAOFactory.getTestInstance();
 	private ApptDAO apptDAO = factory.getApptDAO();
 
+	private ApptBean[] appts = null;
+
 	private ApptBean a1; 
 	private ApptBean a2;
 	private ApptBean a3;
@@ -30,8 +32,6 @@ public class ApptDAOTest extends TestCase {
 		gen.clearAllTables();
 		gen.appointmentType();
 		
-		
-		
 		a1 = new ApptBean();
 		a1.setDate(new Timestamp(new Date().getTime()));
 		a1.setApptType("Ultrasound");
@@ -49,6 +49,7 @@ public class ApptDAOTest extends TestCase {
 		a3.setApptType("Ultrasound");
 		a3.setHcp(doctorMID);
 		a3.setPatient(patientMID);
+
 	}
 
 	public void testAppointment() throws Exception {
@@ -148,5 +149,20 @@ public class ApptDAOTest extends TestCase {
 		assertEquals(30, type.getDuration());
 		assertEquals("Ultrasound", type.getName());
 	}
+
+	// Test adding and retreiving upcoming appointments within n days
+	public void testGetUpcomingAppts() throws Exception {
+		// Edge case: empty database
+		List<ApptBean> upcomingAppts = apptDAO.getUpcomingAppts(30);
+		assertEquals(0, upcomingAppts.size());
+
+		// Test returning upcoming appts B
+		apptDAO.scheduleAppt(a1); 
+		apptDAO.scheduleAppt(a2); 
+		apptDAO.scheduleAppt(a3); 
+
+		upcomingAppts = apptDAO.getUpcomingAppts(1);
+		assertEquals(3, upcomingAppts.size()); 
+	}
 	
 }
-- 
GitLab