Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#12048] Migrate tests for SendErrorReportActionTest #13280

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions src/main/java/teammates/ui/webapi/SendErrorReportAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
/**
* Actions: sends an error report to the system admin.
*/
class SendErrorReportAction extends Action {
public class SendErrorReportAction extends Action {
private static final Logger log = Logger.getLogger();

@Override
Expand All @@ -34,13 +34,12 @@ public JsonResult execute() throws InvalidHttpRequestBodyException {
/**
* Gets the user error report that will be sent to the system admin.
*/
String getUserErrorReportLogMessage(ErrorReportRequest report) {
public String getUserErrorReportLogMessage(ErrorReportRequest report) {
String user = userInfo == null ? "Non-logged in user" : userInfo.id;
return "====== USER FEEDBACK ABOUT ERROR ======" + System.lineSeparator()
+ "USER: " + user + System.lineSeparator()
+ "REQUEST ID: " + report.getRequestId() + System.lineSeparator()
+ "SUBJECT: " + report.getSubject() + System.lineSeparator()
+ "CONTENT: " + report.getContent();
}

}
136 changes: 136 additions & 0 deletions src/test/java/teammates/sqlui/webapi/SendErrorReportActionTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
package teammates.sqlui.webapi;

import org.testng.annotations.Test;

import teammates.common.util.Const;
import teammates.ui.output.MessageOutput;
import teammates.ui.request.ErrorReportRequest;
import teammates.ui.request.InvalidHttpRequestBodyException;
import teammates.ui.webapi.JsonResult;
import teammates.ui.webapi.SendErrorReportAction;

/**
* SUT: {@link SendErrorReportAction}.
*/
public class SendErrorReportActionTest extends BaseActionTest<SendErrorReportAction> {
private static final String GOOGLE_ID = "user-googleId";
private static final String REQUEST_ID = "REQUESTID";
private static final String SUBJECT = "Email subject";
private static final String CONTENT = "Email content";
private static final String[] PARAMS = {};

@Override
protected String getActionUri() {
return Const.ResourceURIs.ERROR_REPORT;
}

@Override
protected String getRequestMethod() {
return POST;
}

@Test
void testExecute_notLoggedInTypicalCase_success() {
logoutUser();

ErrorReportRequest report = new ErrorReportRequest(REQUEST_ID, SUBJECT,
CONTENT);
SendErrorReportAction action = getAction(report, PARAMS);
JsonResult result = getJsonResult(action);
MessageOutput output = (MessageOutput) result.getOutput();

String expectedLogMessage = "====== USER FEEDBACK ABOUT ERROR ======" + System.lineSeparator()
+ "USER: Non-logged in user" + System.lineSeparator()
+ "REQUEST ID: " + REQUEST_ID + System.lineSeparator()
+ "SUBJECT: " + SUBJECT + System.lineSeparator()
+ "CONTENT: " + CONTENT;

assertEquals(expectedLogMessage,
action.getUserErrorReportLogMessage(report));
assertEquals("Error report successfully sent", output.getMessage());
}

@Test
void testExecute_loggedInTypicalCase_success() {
loginAsUnregistered(GOOGLE_ID);

ErrorReportRequest report = new ErrorReportRequest(REQUEST_ID, SUBJECT,
CONTENT);
SendErrorReportAction action = getAction(report, PARAMS);
JsonResult result = getJsonResult(action);
MessageOutput output = (MessageOutput) result.getOutput();

String expectedLogMessage = "====== USER FEEDBACK ABOUT ERROR ======" + System.lineSeparator()
+ "USER: " + GOOGLE_ID + System.lineSeparator()
+ "REQUEST ID: " + REQUEST_ID + System.lineSeparator()
+ "SUBJECT: " + SUBJECT + System.lineSeparator()
+ "CONTENT: " + CONTENT;

assertEquals(expectedLogMessage,
action.getUserErrorReportLogMessage(report));
assertEquals("Error report successfully sent", output.getMessage());
}

@Test
void testExecute_nullRequestBody_throwsInvalidHttpRequestBodyException() {
InvalidHttpRequestBodyException e = verifyHttpRequestBodyFailure(null, PARAMS);
assertEquals("The request body is null", e.getMessage());
}

@Test
void testExecute_nullRequestId_throwsInvalidHttpRequestBodyException() {
ErrorReportRequest reportWithNullRequestId = new ErrorReportRequest(null, SUBJECT, CONTENT);
InvalidHttpRequestBodyException e = verifyHttpRequestBodyFailure(reportWithNullRequestId, PARAMS);
assertEquals("requestId cannot be null", e.getMessage());
}

@Test
void testExecute_nullSubject_throwsInvalidHttpRequestBodyException() {
ErrorReportRequest reportWithNullSubject = new ErrorReportRequest(REQUEST_ID, null, CONTENT);
InvalidHttpRequestBodyException e = verifyHttpRequestBodyFailure(reportWithNullSubject, PARAMS);
assertEquals("subject cannot be null", e.getMessage());
}

@Test
void testExecute_nullContent_throwsInvalidHttpRequestBodyException() {
ErrorReportRequest reportWithNullContent = new ErrorReportRequest(REQUEST_ID, SUBJECT, null);
InvalidHttpRequestBodyException e = verifyHttpRequestBodyFailure(reportWithNullContent, PARAMS);
assertEquals("content cannot be null", e.getMessage());
}

@Test
void testAccessControl_admin_canAccess() {
loginAsAdmin();
verifyCanAccess();
}

@Test
void testAccessControl_maintainer_canAccess() {
loginAsMaintainer();
verifyCanAccess();
}

@Test
void testAccessControl_instructor_canAccess() {
loginAsInstructor(GOOGLE_ID);
verifyCanAccess();
}

@Test
void testAccessControl_student_canAccess() {
loginAsStudent(GOOGLE_ID);
verifyCanAccess();
}

@Test
void testAccessControl_unregistered_canAccess() {
loginAsUnregistered(GOOGLE_ID);
verifyCanAccess();
}

@Test
void testAccessControl_loggedOut_canAccess() {
logoutUser();
verifyCanAccess();
}
}
Loading