user2228967
user2228967

Reputation: 1

How to write unit test for Hybris OCC controllers

We are writing unit test for commerce webservices (OCC) controllers, for example CartsControllers, UsersController etc. Almost all the methods within these controllers return web service DTO i.e the ones that ends with *WsDTO. This object conversion is done by dataMapper which is part of spring web application context. The challenge we are facing is unit test or integration tests cannot access web application context and fetch the bean from there. 90% of commerce webservices (OCC) controller methods are not testable without this since they all return DTOs. Mocking dataMapper itself will not achieve anything since that will defeat the purpose of writing test.

Please help!!

Upvotes: 0

Views: 1817

Answers (1)

Free-Minded
Free-Minded

Reputation: 5420

I can give some points on how you can start writing testcases for OCC controllers.

Lets say you want to test CartsControllers -> getCart method which you have written in your custom customlswebservices extension.

@RequestMapping(value = "/{cartId}", method = RequestMethod.GET)
@ResponseBody
public CartWsDTO getCart(@RequestParam(required = false, defaultValue = DEFAULT_FIELD_SET) final String fields)
{
    // CartMatchingFilter sets current cart based on cartId, so we can return cart from the session
    return getDataMapper().map(getSessionCart(), CartWsDTO.class, fields);
}

Integration Test :

import static org.fest.assertions.Assertions.assertThat;

@NeedsEmbeddedServer(webExtensions = { "customlswebservices", "oauth2" })
@IntegrationTest
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class CartWebServiceIntegrationTest extends AbstractCoreIntegrationTest
{

   private WsSecuredRequestBuilder wsSecuredRequestBuilder;

   @Before
   public void beforeTest() throws Exception
   {
       wsSecuredRequestBuilder = new WsSecuredRequestBuilder() //
            .extensionName("customlswebservices") //
            .path("v2") //
            .client("trusted_client", "secret") //
            .grantClientCredentials();
   }

   @Test
   public void testGetCart()
   {
        final Response wsResponse = wsSecuredRequestBuilder //
            .path("electronics") // Put your custom wcms site here
            .path("users") //
            .path("[email protected]") // Add current user id here
            .path("carts") //
            .path("100038383") // Cart ID
            .queryParam("fields", "DEFAULT") //
            .build() //
            .get(); //

       assertThat(wsResponse).isNotNull();
       assertThat(wsResponse.getStatus()).isEqualTo(HttpServletResponse.SC_OK);

       final CartWsDTO cartWsDTO = wsResponse.readEntity(CartWsDTO.class);
       assertThat(cartWsDTO).isNotNull();
    }

  }

Hope this may help you.

Upvotes: 1

Related Questions