dimanche 4 septembre 2016

Empty content body in checking exception scenarios with mockmvc

Overview:

I am going to test bad request (400) with a customized error message in Spring MVC Test. The test gets 400 as status; however the content body is empty.

The code snippets are as follows:

@Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        memberServiceController.setMemberDetailsApiController(mockMemberDetailsApiController);
        memberServiceController.setResourceMessage(mockResourceMessage);

        mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .addFilter(new ShallowEtagHeaderFilter())
                .apply(documentationConfiguration(restDocumentation))
                .build();
    }

@Test
    public void getMemberDetails_whenStoreIdIsNull_setStatusToBadRequest() throws Exception {
        Mockito.doReturn("storeId is empty").when(mockResourceMessage).getMessage(MEMBER_ERROR_INVALID_STOREID);

        mockMvc.perform(get(URL)
                .header(REQUEST_HEADER_COOKIE, DEFAULT_COOKIE_VALUE)
                .param(REQUEST_PARAM_MEMBERSHIP_IDENTIFIER, "MEMBER1"))
                .andDo(MockMvcResultHandlers.print())
                .andDo(document("memberServices/GetMemberDetailsNullStoreId",
                        requestHeaders(
                                headerWithName(REQUEST_HEADER_COOKIE).description(REQUEST_HEADER_COOKIE_DESCRIPTION)
                        ),
                        requestParameters(
                                parameterWithName(REQUEST_PARAM_MEMBERSHIP_IDENTIFIER).description(REQUEST_PARAM_MEMBERSHIP_IDENTIFIER_DESCRIPTION)
                        )))
                .andExpect(status().isBadRequest())
                .andExpect(content().string(containsString("storeId is empty".toLowerCase())))
                .andReturn().getResponse();
    }

The raised exception is as follows:

MockHttpServletRequest:
      HTTP Method = GET
      Request URI = /retailer1/memberDetails
       Parameters = {membershipIdentifier=[MEMBER1]}
          Headers = {Cookie=[SESSION=67421bc3-36da-4b64-9aca-94edf57211f6]}

Handler:
             Type = com.blss.retailServices.memberServices.restServices.MemberRestController
           Method = public org.springframework.http.HttpEntity<org.springframework.hateoas.Resource<com.blss.retailServices.memberServices.models.MemberDetailsResponseModel>> com.blss.retailServices.memberServices.restServices.MemberRestController.getMemberDetails(com.blss.retailServices.memberServices.models.MemberModel)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = com.blss.retailServices.InvalidRequestException

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 400
    Error message = null
          Headers = {}
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

java.lang.AssertionError: Response content
Expected: a string containing "storeid is empty"
     but: was ""

The generated response in API Doc with asciidoc is as follows:

HTTP/1.1 400 Bad Request

Question:

Now I would appreciate it if anyone can help me find way to get bad request with my customized exception message ("storeId is empty") in order to be added to generated API documentation and have something like bellow as generated response in API documentation:

HTTP/1.1 400 Bad Request, 
storeId is empty 

Aucun commentaire:

Enregistrer un commentaire