Skip to content

Commit 247ae27

Browse files
Create tests for registering a user
1 parent 168d1f3 commit 247ae27

File tree

6 files changed

+104
-23
lines changed

6 files changed

+104
-23
lines changed

src/main/java/com/springboilerplate/springboilerplate/controller/PasswordResetTokenController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public ResponseEntity<?> resetPassword() throws Exception{
2929

3030
//If successfully validated, then the user can update his password.
3131
@PostMapping(value = "/validateToken")
32-
public ResponseEntity<Boolean> validateUserPassword(@RequestParam("id") long userId,
32+
public ResponseEntity<Boolean> validateUserPassword(@RequestParam("userId") long userId,
3333
@RequestParam("token") String token) {
3434
boolean valid = passwordResetTokenService.validateResetToken(userId, token);
3535
return new ResponseEntity<>(valid, HttpStatus.OK);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.springboilerplate.springboilerplate.controller;
2+
3+
import com.springboilerplate.springboilerplate.SpringBoilerplateApplication;
4+
import org.junit.runner.RunWith;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.boot.test.context.SpringBootTest;
7+
import org.springframework.http.MediaType;
8+
import org.springframework.http.converter.HttpMessageConverter;
9+
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
10+
import org.springframework.test.context.junit4.SpringRunner;
11+
import org.springframework.test.context.web.WebAppConfiguration;
12+
import org.springframework.transaction.annotation.Transactional;
13+
14+
import java.nio.charset.Charset;
15+
import java.util.Arrays;
16+
17+
import static org.junit.Assert.assertNotNull;
18+
19+
@RunWith(SpringRunner.class)
20+
@SpringBootTest(classes = SpringBoilerplateApplication.class)
21+
@WebAppConfiguration
22+
@Transactional
23+
public class BaseControllerTest {
24+
25+
protected MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(),
26+
MediaType.APPLICATION_JSON.getSubtype(),
27+
Charset.forName("utf8"));
28+
29+
protected HttpMessageConverter mappingJackson2HttpMessageConverter;
30+
31+
@Autowired
32+
protected void setConverters(HttpMessageConverter<?>[] converters) {
33+
this.mappingJackson2HttpMessageConverter = Arrays.asList(converters).stream()
34+
.filter(hmc -> hmc instanceof MappingJackson2HttpMessageConverter)
35+
.findAny()
36+
.orElse(null);
37+
38+
assertNotNull("the JSON message converter must not be null",
39+
this.mappingJackson2HttpMessageConverter);
40+
}
41+
}

src/test/java/com/springboilerplate/springboilerplate/controller/LoginTest.java

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,7 @@
2929
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
3030
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;
3131

32-
@RunWith(SpringRunner.class)
33-
@SpringBootTest
34-
@WebAppConfiguration
35-
@Transactional
36-
public class LoginTest {
32+
public class LoginTest extends BaseControllerTest{
3733
@Autowired
3834
private FilterChainProxy springSecurityFilter;
3935
@Autowired
@@ -42,24 +38,8 @@ public class LoginTest {
4238
private UserRepository userRepository;
4339
private User user;
4440

45-
private MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(),
46-
MediaType.APPLICATION_JSON.getSubtype(),
47-
Charset.forName("utf8"));
48-
4941
private MockMvc mockMvc;
5042

51-
private HttpMessageConverter mappingJackson2HttpMessageConverter;
52-
53-
@Autowired
54-
private void setConverters(HttpMessageConverter<?>[] converters) {
55-
this.mappingJackson2HttpMessageConverter = Arrays.asList(converters).stream()
56-
.filter(hmc -> hmc instanceof MappingJackson2HttpMessageConverter)
57-
.findAny()
58-
.orElse(null);
59-
60-
assertNotNull("the JSON message converter must not be null",
61-
this.mappingJackson2HttpMessageConverter);
62-
}
6343
@Before
6444
@Rollback
6545
public void setup() throws Exception {
@@ -79,5 +59,17 @@ public void loginUser() throws Exception {
7959
.andReturn().getResponse()
8060
.getHeader("authorization");
8161
assertNotNull(authHeader);
62+
63+
//Access a protected resource to ensure that the jwt authentication is working.
64+
mockMvc.perform(get("/v1/users/hello")
65+
.header("authorization", authHeader))
66+
.andExpect(status().isOk());
67+
}
68+
69+
@Test
70+
@Rollback
71+
public void accessingAProtectedResourceShouldReturn403UnAuthorized() throws Exception {
72+
mockMvc.perform(get("/v1/users/hello"))
73+
.andExpect(status().isForbidden());
8274
}
8375
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.springboilerplate.springboilerplate.controller;
2+
3+
import com.springboilerplate.springboilerplate.dto.UserDto;
4+
import com.springboilerplate.springboilerplate.stubs.UserStubs;
5+
import com.springboilerplate.springboilerplate.utils.JsonUtils;
6+
import org.junit.Before;
7+
import org.junit.Test;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.test.annotation.Rollback;
10+
import org.springframework.test.web.servlet.MockMvc;
11+
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
12+
import org.springframework.web.context.WebApplicationContext;
13+
14+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
15+
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
16+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
17+
18+
public class UserControllerTest extends BaseControllerTest{
19+
20+
private MockMvc mockMvc;
21+
@Autowired
22+
private WebApplicationContext webApplicationContext;
23+
24+
private UserDto userDto;
25+
26+
@Before
27+
public void setUp() throws Exception {
28+
this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
29+
userDto = UserStubs.generateUserDto();
30+
}
31+
32+
@Test
33+
@Rollback
34+
public void registerUser() throws Exception {
35+
this.mockMvc.perform(post("/v1/users/register")
36+
.content(JsonUtils.json(userDto, mappingJackson2HttpMessageConverter))
37+
.contentType(contentType))
38+
.andDo(print())
39+
.andExpect(status().isCreated());
40+
}
41+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
package com.springboilerplate.springboilerplate.mocks;
22

3+
import com.springboilerplate.springboilerplate.dto.UserDto;
4+
import com.springboilerplate.springboilerplate.enums.RoleType;
35
import com.springboilerplate.springboilerplate.model.User;
46
import com.springboilerplate.springboilerplate.repository.UserRepository;
7+
import com.springboilerplate.springboilerplate.service.UserService;
58
import com.springboilerplate.springboilerplate.stubs.PasswordResetTokenStubs;
69
import com.springboilerplate.springboilerplate.stubs.UserStubs;
710

811
import static org.mockito.Matchers.any;
912
import static org.mockito.Matchers.anyString;
13+
import static org.mockito.Mockito.doNothing;
1014
import static org.mockito.Mockito.when;
1115

1216
public class UserMocks {
1317
public void initMocks(UserRepository userRepository){
1418
when(userRepository.save(any(User.class))).thenReturn(UserStubs.generateUser());
1519
when(userRepository.getByEmailAndDeletedFalse(anyString())).thenReturn(UserStubs.generateOptionalUser());
1620
}
21+
public void initUserServiceMocks(UserService userService){
22+
when(doNothing().when(userService).saveUser(any(UserDto.class), any(RoleType.class)));
23+
}
1724
}

src/test/java/com/springboilerplate/springboilerplate/stubs/UserStubs.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public static Optional<User> generateOptionalUser(){
2727
}
2828
public static UserDto generateUserDto(){
2929
return new UserDto("Patrick", "Emmanuel",
30-
"Password", "email@email.com");
30+
"email@email.com", "Password");
3131
}
3232

3333
public static User generateUserWithNoRole(){

0 commit comments

Comments
 (0)