Search code examples
javaspring-bootunit-testingjunitresttemplate

Spring boot : RestTemplate POST call does not return created status code


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);
    }

Solution

  • 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){