diff --git a/src/main/java/com/commafeed/backend/service/UserService.java b/src/main/java/com/commafeed/backend/service/UserService.java index 892320b6..4acaae20 100644 --- a/src/main/java/com/commafeed/backend/service/UserService.java +++ b/src/main/java/com/commafeed/backend/service/UserService.java @@ -60,17 +60,6 @@ public class UserService { return Optional.absent(); } - /** - * try to log in with given credentials and create a session for the user - */ - public Optional login(String nameOrEmail, String password, HttpSession sessionToFill) { - Optional user = login(nameOrEmail, password); - if (user.isPresent()) { - sessionToFill.setAttribute(UserREST.SESSION_KEY_USER, user.get()); - } - return user; - } - /** * try to log in by checking if the user has an active session */ diff --git a/src/main/java/com/commafeed/frontend/resource/UserREST.java b/src/main/java/com/commafeed/frontend/resource/UserREST.java index 19f9ad59..f572626f 100644 --- a/src/main/java/com/commafeed/frontend/resource/UserREST.java +++ b/src/main/java/com/commafeed/frontend/resource/UserREST.java @@ -226,8 +226,9 @@ public class UserREST { @ApiOperation(value = "Register a new account") public Response register(@Valid @ApiParam(required = true) RegistrationRequest req, @Session HttpSession session) { try { - userService.register(req.getName(), req.getPassword(), req.getEmail(), Arrays.asList(Role.USER)); - userService.login(req.getName(), req.getPassword(), session); + User registeredUser = userService.register(req.getName(), req.getPassword(), req.getEmail(), Arrays.asList(Role.USER)); + userService.login(req.getName(), req.getPassword()); + session.setAttribute(SESSION_KEY_USER, registeredUser); return Response.ok().build(); } catch (final IllegalArgumentException e) { return Response.status(422).entity(new ValidationErrorMessage(Collections.> emptySet()) { diff --git a/src/test/java/com/commafeed/frontend/resource/UserRestTest.java b/src/test/java/com/commafeed/frontend/resource/UserRestTest.java index 1289b92a..f43c6a43 100644 --- a/src/test/java/com/commafeed/frontend/resource/UserRestTest.java +++ b/src/test/java/com/commafeed/frontend/resource/UserRestTest.java @@ -1,17 +1,25 @@ package com.commafeed.frontend.resource; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; +import java.util.Arrays; + import javax.servlet.http.HttpSession; import org.junit.Test; +import org.mockito.InOrder; +import org.mockito.Matchers; import com.commafeed.backend.model.User; +import com.commafeed.backend.model.UserRole.Role; import com.commafeed.backend.service.UserService; import com.commafeed.frontend.model.request.LoginRequest; +import com.commafeed.frontend.model.request.RegistrationRequest; import com.google.common.base.Optional; public class UserRestTest { @@ -42,7 +50,7 @@ public class UserRestTest { // Create a user User user = new User(); - // Create UserService partial mock + // Create UserService mock UserService service = mock(UserService.class); when(service.login("user", "password")).thenReturn(Optional.of(user)); @@ -55,7 +63,51 @@ public class UserRestTest { userREST.login(req, session); - verify(session).setAttribute("user", user); + verify(session).setAttribute(UserREST.SESSION_KEY_USER, user); + } + + @Test public void + register_should_register_and_then_login() { + // Create UserService mock + UserService service = mock(UserService.class); + + RegistrationRequest req = new RegistrationRequest(); + req.setName("user"); + req.setPassword("password"); + req.setEmail("test@test.com"); + + HttpSession session = mock(HttpSession.class); + + InOrder inOrder = inOrder(service); + + UserREST userREST = new UserREST(null, null, null, service, null, null, null); + userREST.register(req, session); + + inOrder.verify(service).register("user", "password", "test@test.com", Arrays.asList(Role.USER)); + inOrder.verify(service).login("user", "password"); + } + + @Test public void + register_should_populate_http_session() { + // Create a user + User user = new User(); + + // Create UserService partial mock + UserService service = mock(UserService.class); + when(service.register(any(String.class), any(String.class), any(String.class), Matchers.anyListOf(Role.class))).thenReturn(user); + when(service.login(any(String.class), any(String.class))).thenReturn(Optional.of(user)); + + RegistrationRequest req = new RegistrationRequest(); + req.setName("user"); + req.setPassword("password"); + req.setEmail("test@test.com"); + + HttpSession session = mock(HttpSession.class); + + UserREST userREST = new UserREST(null, null, null, service, null, null, null); + userREST.register(req, session); + + verify(session).setAttribute(UserREST.SESSION_KEY_USER, user); } }