-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add FeedbackSessionPublishedRemindersActionTest
- Loading branch information
Showing
1 changed file
with
135 additions
and
0 deletions.
There are no files selected for viewing
135 changes: 135 additions & 0 deletions
135
src/test/java/teammates/sqlui/webapi/FeedbackSessionPublishedRemindersActionTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
package teammates.sqlui.webapi; | ||
|
||
import static org.mockito.Mockito.when; | ||
|
||
import java.time.Duration; | ||
import java.time.Instant; | ||
import java.util.List; | ||
|
||
import org.testng.annotations.BeforeMethod; | ||
import org.testng.annotations.Test; | ||
|
||
import teammates.common.exception.EntityDoesNotExistException; | ||
import teammates.common.exception.InvalidParametersException; | ||
import teammates.common.util.Const; | ||
import teammates.storage.sqlentity.Course; | ||
import teammates.storage.sqlentity.FeedbackSession; | ||
import teammates.ui.output.MessageOutput; | ||
import teammates.ui.webapi.FeedbackSessionPublishedRemindersAction; | ||
|
||
/** | ||
* SUT: {@link FeedbackSessionPublishedRemindersAction}. | ||
*/ | ||
public class FeedbackSessionPublishedRemindersActionTest extends BaseActionTest<FeedbackSessionPublishedRemindersAction> { | ||
|
||
private Course course; | ||
private FeedbackSession session; | ||
|
||
@Override | ||
protected String getActionUri() { | ||
return Const.CronJobURIs.AUTOMATED_FEEDBACK_PUBLISHED_REMINDERS; | ||
} | ||
|
||
@Override | ||
protected String getRequestMethod() { | ||
return GET; | ||
} | ||
|
||
@BeforeMethod | ||
public void setUp() { | ||
course = new Course("course-id", "Course Name", Const.DEFAULT_TIME_ZONE, "institute"); | ||
session = new FeedbackSession( | ||
"Session Name", | ||
course, | ||
"[email protected]", | ||
"Instructions", | ||
Instant.now().minusSeconds(7200), // Start time 2 hours ago | ||
Instant.now().minusSeconds(3600), // End time 1 hour ago | ||
Instant.now().minusSeconds(7200), // Visible time 2 hours ago | ||
Instant.now().plusSeconds(1800), // Results visible time in 30 minutes | ||
Duration.ofMinutes(30), | ||
false, false, true | ||
); | ||
} | ||
|
||
@Test | ||
void testExecute_noPublishedSessions_noEmailsSent() { | ||
when(mockLogic.getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent()).thenReturn(List.of()); | ||
|
||
FeedbackSessionPublishedRemindersAction action = getAction(); | ||
MessageOutput actionOutput = (MessageOutput) getJsonResult(action).getOutput(); | ||
|
||
verifyNoTasksAdded(); | ||
assertEquals("Successful", actionOutput.getMessage()); | ||
} | ||
|
||
@Test | ||
void testExecute_publishedSession_emailsSent() { | ||
when(mockLogic.getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent()).thenReturn(List.of(session)); | ||
|
||
FeedbackSessionPublishedRemindersAction action = getAction(); | ||
MessageOutput actionOutput = (MessageOutput) getJsonResult(action).getOutput(); | ||
|
||
verifySpecifiedTasksAdded(Const.TaskQueue.FEEDBACK_SESSION_PUBLISHED_EMAIL_QUEUE_NAME, 1); | ||
assertEquals("Successful", actionOutput.getMessage()); | ||
} | ||
|
||
@Test | ||
void testExecute_sessionPublishedWithEmailsAlreadySent_noEmailsSent() { | ||
session.setPublishedEmailSent(true); | ||
when(mockLogic.getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent()).thenReturn(List.of()); | ||
|
||
FeedbackSessionPublishedRemindersAction action = getAction(); | ||
MessageOutput output = (MessageOutput) getJsonResult(action).getOutput(); | ||
|
||
verifyNoTasksAdded(); | ||
assertEquals("Successful", output.getMessage()); | ||
} | ||
|
||
@Test | ||
void testExecute_publishedReminderDisabled_noEmailsSent() { | ||
session.setPublishedEmailEnabled(false); | ||
when(mockLogic.getFeedbackSessionsWhichNeedAutomatedPublishedEmailsToBeSent()).thenReturn(List.of()); | ||
|
||
FeedbackSessionPublishedRemindersAction action = getAction(); | ||
MessageOutput output = (MessageOutput) getJsonResult(action).getOutput(); | ||
|
||
verifyNoTasksAdded(); | ||
assertEquals("Successful", output.getMessage()); | ||
} | ||
|
||
@Test | ||
void testExecute_unpublishedSession_noEmailsSent() throws InvalidParametersException, EntityDoesNotExistException { | ||
when(mockLogic.unpublishFeedbackSession(session.getName(), course.getId())).thenReturn(session); | ||
|
||
FeedbackSessionPublishedRemindersAction action = getAction(); | ||
MessageOutput output = (MessageOutput) getJsonResult(action).getOutput(); | ||
|
||
verifyNoTasksAdded(); | ||
assertEquals("Successful", output.getMessage()); | ||
} | ||
|
||
@Test | ||
void testSpecificAccessControl_admin_canAccess() { | ||
loginAsAdmin(); | ||
verifyCanAccess(); | ||
} | ||
|
||
@Test | ||
void testSpecificAccessControl_instructor_cannotAccess() { | ||
loginAsInstructor("instructor-googleId"); | ||
verifyCannotAccess(); | ||
} | ||
|
||
@Test | ||
void testSpecificAccessControl_student_cannotAccess() { | ||
loginAsStudent("student-googleId"); | ||
verifyCannotAccess(); | ||
} | ||
|
||
@Test | ||
void testSpecificAccessControl_loggedOut_cannotAccess() { | ||
logoutUser(); | ||
verifyCannotAccess(); | ||
} | ||
} |