I'm new to spring boot rest template. I'm trying write unit test case for rest template post call. I've created a user controller to send the dummy data. Is the Usercontroller written for POST call is correct for unit test? If not what is the correct way to write it? Is the response I'm returning from usercontroller correct? Should I return status code as 200 or 201? Can someone help me?
Below is the usercontroller
@PostMapping("/users")
public User createUser(@RequestBody User user){
List<String> messages = new ArrayList<>();
messages.add("Hi");
User createUser = new User();
createUser.setId(1);
createUser.setName("John");
createUser.setAge(22);
createUser.setMessages(messages);
return user;
}
Below id the unit test case for post call:
@Test
public void testSuccessPostUser() throws Exception{
String baseUrl = "http://localhost:8080/users";
List<String> messages = new ArrayList<>();
messages.add("Hi");
User user = new User();
user.setId(1);
user.setName("John");
user.setAge(22);
user.setMessages(messages);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
HttpEntity<User> httpEntity = new HttpEntity<>(user, httpHeaders);
HttpHandler httpHandler = new HttpHandler();
ResponseEntity<User> actual = httpHandler.sendPost(baseUrl, httpHeaders, user, User.class);
//verify request succeed
assertEquals(HttpStatus.CREATED, actual.getStatusCode());
assertEquals(201, actual.getStatusCodeValue());
assertTrue(responseBody.contains(id);
}
POST returns 200 by default.
If you want to make it return 201 add this:
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/users")
public User createUser(@RequestBody User user){