Skip to content
Snippets Groups Projects
Commit 3770c736 authored by Paul-Christian Volkmer's avatar Paul-Christian Volkmer
Browse files

Throw NotImplementedException on inactive connector client

This will send HTTP 501 NOT IMPLEMENTED error in case connector client is
used and not available.
parent 90f53b9d
No related merge requests found
......@@ -12,6 +12,7 @@ import de.thm.arsnova.exceptions.BadRequestException;
import de.thm.arsnova.exceptions.ForbiddenException;
import de.thm.arsnova.exceptions.NoContentException;
import de.thm.arsnova.exceptions.NotFoundException;
import de.thm.arsnova.exceptions.NotImplementedException;
import de.thm.arsnova.exceptions.PreconditionFailedException;
import de.thm.arsnova.exceptions.UnauthorizedException;
......@@ -58,4 +59,9 @@ public class AbstractController {
@ExceptionHandler(PreconditionFailedException.class)
public void handlePreconditionFailedException(final Exception e, final HttpServletRequest request) {
}
@ResponseStatus(HttpStatus.NOT_IMPLEMENTED)
@ExceptionHandler(NotImplementedException.class)
public void handleNotImplementedException(final Exception e, final HttpServletRequest request) {
}
}
......@@ -35,7 +35,8 @@ import org.springframework.web.bind.annotation.RestController;
import de.thm.arsnova.connector.client.ConnectorClient;
import de.thm.arsnova.connector.model.Course;
import de.thm.arsnova.connector.model.UserRole;
import de.thm.arsnova.exceptions.NotFoundException;
import de.thm.arsnova.entities.User;
import de.thm.arsnova.exceptions.NotImplementedException;
import de.thm.arsnova.exceptions.UnauthorizedException;
import de.thm.arsnova.services.IUserService;
......@@ -55,19 +56,20 @@ public class CourseController extends AbstractController {
public final List<Course> myCourses(
@RequestParam(value = "sortby", defaultValue = "name") final String sortby
) {
String username = userService.getCurrentUser().getUsername();
if (username == null) {
final User currentUser = userService.getCurrentUser();
if (currentUser == null || currentUser.getUsername() == null) {
throw new UnauthorizedException();
}
if (connectorClient == null) {
throw new NotFoundException();
throw new NotImplementedException();
}
List<Course> result = new ArrayList<Course>();
final List<Course> result = new ArrayList<Course>();
for (Course course : connectorClient.getCourses(username).getCourse()) {
for (final Course course : connectorClient.getCourses(currentUser.getUsername()).getCourse()) {
if (
course.getMembership().isMember()
&& course.getMembership().getUserrole().equals(UserRole.TEACHER)
......@@ -76,7 +78,7 @@ public class CourseController extends AbstractController {
}
}
if (sortby != null && sortby.equals("shortname")) {
if ("shortname".equals(sortby)) {
Collections.sort(result, new CourseShortNameComperator());
} else {
Collections.sort(result, new CourseNameComperator());
......@@ -89,7 +91,7 @@ public class CourseController extends AbstractController {
private static final long serialVersionUID = 1L;
@Override
public int compare(Course course1, Course course2) {
public int compare(final Course course1, final Course course2) {
return course1.getFullname().compareToIgnoreCase(course2.getFullname());
}
}
......@@ -98,7 +100,7 @@ public class CourseController extends AbstractController {
private static final long serialVersionUID = 1L;
@Override
public int compare(Course course1, Course course2) {
public int compare(final Course course1, final Course course2) {
return course1.getShortname().compareToIgnoreCase(course2.getShortname());
}
}
......
package de.thm.arsnova.controller;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import de.thm.arsnova.connector.client.ConnectorClient;
import de.thm.arsnova.services.StubUserService;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {
"file:src/main/webapp/WEB-INF/spring/arsnova-servlet.xml",
"file:src/main/webapp/WEB-INF/spring/spring-main.xml",
"file:src/main/webapp/WEB-INF/spring/spring-security.xml",
"file:src/test/resources/test-config.xml",
"file:src/test/resources/test-socketioconfig.xml"
})
public class CourseControllerTest {
private MockMvc mockMvc;
@InjectMocks
private final CourseController courseController = new CourseController();
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
private StubUserService userService;
@Mock
private ConnectorClient connectorClient;
private void setAuthenticated(final boolean isAuthenticated, final String username) {
if (isAuthenticated) {
final List<GrantedAuthority> ga = new ArrayList<GrantedAuthority>();
final UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, "secret", ga);
SecurityContextHolder.getContext().setAuthentication(token);
userService.setUserAuthenticated(isAuthenticated, username);
} else {
userService.setUserAuthenticated(isAuthenticated);
}
}
@Before
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public final void testShouldIndicateNotImplementedIfInactiveClient() throws Exception {
setAuthenticated(true, "ptsr00");
mockMvc.perform(get("/mycourses").accept(MediaType.TEXT_PLAIN))
.andExpect(status().isNotImplemented());
}
@Test
public final void testShouldNotReturnCurrentUsersCoursesIfUnauthorized() throws Exception {
setAuthenticated(false, "nobody");
mockMvc.perform(get("/mycourses").accept(MediaType.TEXT_PLAIN))
.andExpect(status().isUnauthorized());
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment