Skip to content

Commit 56da952

Browse files
DhiraPTjasonqiu212
andauthored
[#12048] Migrate Tests for FeedbackSessionOpenedRemindersActionTest (#13215)
* Add FeedbackSessionOpeningRemindersActionTest * Refine tests * Refine test class --------- Co-authored-by: Jason Qiu <[email protected]>
1 parent 0ccf9d5 commit 56da952

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
package teammates.sqlui.webapi;
2+
3+
import static org.mockito.Mockito.mock;
4+
import static org.mockito.Mockito.mockStatic;
5+
import static org.mockito.Mockito.never;
6+
import static org.mockito.Mockito.times;
7+
import static org.mockito.Mockito.verify;
8+
import static org.mockito.Mockito.verifyNoMoreInteractions;
9+
import static org.mockito.Mockito.when;
10+
11+
import java.util.List;
12+
13+
import org.mockito.MockedStatic;
14+
import org.mockito.Mockito;
15+
import org.testng.annotations.BeforeMethod;
16+
import org.testng.annotations.Test;
17+
18+
import teammates.common.util.Const;
19+
import teammates.common.util.EmailWrapper;
20+
import teammates.common.util.RequestTracer;
21+
import teammates.storage.sqlentity.FeedbackSession;
22+
import teammates.ui.output.MessageOutput;
23+
import teammates.ui.webapi.FeedbackSessionOpenedRemindersAction;
24+
25+
/**
26+
* SUT: {@link FeedbackSessionOpenedRemindersAction}.
27+
*/
28+
public class FeedbackSessionOpenedRemindersActionTest extends BaseActionTest<FeedbackSessionOpenedRemindersAction> {
29+
30+
private FeedbackSession session;
31+
private FeedbackSession session2;
32+
33+
@Override
34+
protected String getActionUri() {
35+
return Const.CronJobURIs.AUTOMATED_FEEDBACK_OPENED_REMINDERS;
36+
}
37+
38+
@Override
39+
protected String getRequestMethod() {
40+
return GET;
41+
}
42+
43+
@BeforeMethod
44+
public void setUp() {
45+
Mockito.reset(mockLogic, mockSqlEmailGenerator);
46+
47+
session = mock(FeedbackSession.class);
48+
session2 = mock(FeedbackSession.class);
49+
EmailWrapper mockEmail = mock(EmailWrapper.class);
50+
EmailWrapper mockEmail2 = mock(EmailWrapper.class);
51+
52+
when(mockSqlEmailGenerator.generateFeedbackSessionOpenedEmails(session)).thenReturn(List.of(mockEmail));
53+
when(mockSqlEmailGenerator.generateFeedbackSessionOpenedEmails(session2)).thenReturn(List.of(mockEmail2));
54+
}
55+
56+
@Test
57+
void testExecute_allSessionsOpened_emailsSent() {
58+
when(mockLogic.getFeedbackSessionsWhichNeedOpenedEmailsToBeSent()).thenReturn(List.of(session, session2));
59+
60+
try (MockedStatic<RequestTracer> mockRequestTracer = mockStatic(RequestTracer.class)) {
61+
FeedbackSessionOpenedRemindersAction action = getAction();
62+
MessageOutput actionOutput = (MessageOutput) getJsonResult(action).getOutput();
63+
64+
verify(mockLogic, times(1)).getFeedbackSessionsWhichNeedOpenedEmailsToBeSent();
65+
mockRequestTracer.verify(RequestTracer::checkRemainingTime, times(2));
66+
verify(mockSqlEmailGenerator, times(1)).generateFeedbackSessionOpenedEmails(session);
67+
verify(mockSqlEmailGenerator, times(1)).generateFeedbackSessionOpenedEmails(session2);
68+
verify(session, times(1)).setOpenedEmailSent(true);
69+
verify(session2, times(1)).setOpenedEmailSent(true);
70+
71+
verifySpecifiedTasksAdded(Const.TaskQueue.SEND_EMAIL_QUEUE_NAME, 2);
72+
verifyNoMoreInteractions(mockLogic, mockSqlEmailGenerator, session, session2);
73+
assertEquals("Successful", actionOutput.getMessage());
74+
}
75+
}
76+
77+
@Test
78+
void testExecute_oneSessionOpened_emailsSent() {
79+
when(mockLogic.getFeedbackSessionsWhichNeedOpenedEmailsToBeSent()).thenReturn(List.of(session));
80+
81+
try (MockedStatic<RequestTracer> mockRequestTracer = mockStatic(RequestTracer.class)) {
82+
FeedbackSessionOpenedRemindersAction action = getAction();
83+
MessageOutput actionOutput = (MessageOutput) getJsonResult(action).getOutput();
84+
85+
verify(mockLogic, times(1)).getFeedbackSessionsWhichNeedOpenedEmailsToBeSent();
86+
mockRequestTracer.verify(RequestTracer::checkRemainingTime, times(1));
87+
verify(mockSqlEmailGenerator, times(1)).generateFeedbackSessionOpenedEmails(session);
88+
verify(session, times(1)).setOpenedEmailSent(true);
89+
90+
verifySpecifiedTasksAdded(Const.TaskQueue.SEND_EMAIL_QUEUE_NAME, 1);
91+
verifyNoMoreInteractions(mockLogic, mockSqlEmailGenerator, session, session2);
92+
assertEquals("Successful", actionOutput.getMessage());
93+
}
94+
}
95+
96+
@Test
97+
void testExecute_noSessionsOpened_noEmailsSent() {
98+
when(mockLogic.getFeedbackSessionsWhichNeedOpenedEmailsToBeSent()).thenReturn(List.of());
99+
100+
try (MockedStatic<RequestTracer> mockRequestTracer = mockStatic(RequestTracer.class)) {
101+
FeedbackSessionOpenedRemindersAction action = getAction();
102+
MessageOutput actionOutput = (MessageOutput) getJsonResult(action).getOutput();
103+
104+
verify(mockLogic, times(1)).getFeedbackSessionsWhichNeedOpenedEmailsToBeSent();
105+
mockRequestTracer.verify(RequestTracer::checkRemainingTime, never());
106+
107+
verifyNoTasksAdded();
108+
verifyNoMoreInteractions(mockLogic, mockSqlEmailGenerator, session, session2);
109+
assertEquals("Successful", actionOutput.getMessage());
110+
}
111+
}
112+
113+
@Test
114+
void testSpecificAccessControl_admin_canAccess() {
115+
loginAsAdmin();
116+
verifyCanAccess();
117+
}
118+
119+
@Test
120+
void testSpecificAccessControl_instructor_cannotAccess() {
121+
loginAsInstructor("instructor-googleId");
122+
verifyCannotAccess();
123+
}
124+
125+
@Test
126+
void testSpecificAccessControl_student_cannotAccess() {
127+
loginAsStudent("student-googleId");
128+
verifyCannotAccess();
129+
}
130+
131+
@Test
132+
void testSpecificAccessControl_loggedOut_cannotAccess() {
133+
logoutUser();
134+
verifyCannotAccess();
135+
}
136+
}

0 commit comments

Comments
 (0)