com.acc.test.ProductWebServiceTest.java Source code

Java tutorial

Introduction

Here is the source code for com.acc.test.ProductWebServiceTest.java

Source

/*
 * [y] hybris Platform
 *
 * Copyright (c) 2000-2013 hybris AG
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of hybris
 * ("Confidential Information"). You shall not disclose such Confidential
 * Information and shall use it only in accordance with the terms of the
 * license agreement you entered into with hybris.
 * 
 *  
 */
package com.acc.test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import de.hybris.bootstrap.annotations.UnitTest;
import de.hybris.platform.commercefacades.product.data.ProductData;
import de.hybris.platform.commercefacades.product.data.ReviewData;
import de.hybris.platform.commercefacades.user.data.PrincipalData;
import de.hybris.platform.commerceservices.search.facetdata.FacetData;
import de.hybris.platform.commerceservices.search.facetdata.FacetSearchPageData;
import de.hybris.platform.commerceservices.search.facetdata.FacetValueData;
import de.hybris.platform.commerceservices.search.solrfacetsearch.data.SolrSearchQueryData;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.CommonsClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;

/**
 * 
 */
@Ignore("ACC-2747 Ignored test because it tries to open a web connection to the hybris instance, which isn't possible during a unit text execution.")
@UnitTest
public class ProductWebServiceTest {

    private static final String PASSWD = "nimda";

    private static final String USER = "admin";

    private static final String URL = "http://localhost:9001/rest/v1/products";

    private static final Logger LOG = Logger.getLogger(ProductWebServiceTest.class.getName());

    private RestTemplate template;

    private List<HttpMessageConverter<?>> converters;

    @Before
    public void before() {
        LOG.setLevel(Level.DEBUG);
        final HttpClient client = new HttpClient();
        final UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(USER, PASSWD);
        client.getState().setCredentials(new AuthScope(AuthScope.ANY), credentials);

        final CommonsClientHttpRequestFactory commons = new CommonsClientHttpRequestFactory(client);

        final HttpMessageConverter<?> jsonConverter = new org.springframework.http.converter.xml.MarshallingHttpMessageConverter(
                new org.springframework.oxm.xstream.XStreamMarshaller());
        ((org.springframework.http.converter.xml.MarshallingHttpMessageConverter) jsonConverter)
                .setSupportedMediaTypes(Arrays.asList(org.springframework.http.MediaType.APPLICATION_JSON));

        final HttpMessageConverter<?> xmlConverter = new org.springframework.http.converter.xml.MarshallingHttpMessageConverter(
                new org.springframework.oxm.xstream.XStreamMarshaller());
        ((org.springframework.http.converter.xml.MarshallingHttpMessageConverter) jsonConverter)
                .setSupportedMediaTypes(Arrays.asList(org.springframework.http.MediaType.APPLICATION_XML));

        converters = new ArrayList<HttpMessageConverter<?>>();
        converters.add(jsonConverter);
        converters.add(xmlConverter);

        template = new RestTemplate(commons);
        template.setMessageConverters(converters);

    }

    @Test()
    public void testGetProductByCode_Success_XML_Deep() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<ProductData> response = template.exchange(URL + "/{code}", HttpMethod.GET,
                requestEntity, ProductData.class, TestConstants.PRODUCT_CODE);
        final ProductData productData = response.getBody();

        assertEquals(TestConstants.PRODUCT_CODE, productData.getCode());
        assertEquals("EASYSHARE V1253, Black", productData.getName());
        assertEquals(5, productData.getImages().size());
    }

    @Test()
    public void testGetProductByCode_Success_XML_Options_Description() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<ProductData> response = template.exchange(URL + "/{code}?options=DESCRIPTION",
                HttpMethod.GET, requestEntity, ProductData.class, TestConstants.PRODUCT_CODE);
        final ProductData productData = response.getBody();

        assertEquals(TestConstants.PRODUCT_CODE, productData.getCode());
        assertEquals("EASYSHARE V1253, Black", productData.getName());
        assertEquals(5, productData.getImages().size());

        assertTrue("Description may not be null!", productData.getDescription() != null);
    }

    @Test()
    public void testGetProductByCode_Success_XML_Options_Gallery() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<ProductData> response = template.exchange(URL + "/{code}?options=GALLERY",
                HttpMethod.GET, requestEntity, ProductData.class, TestConstants.PRODUCT_CODE);
        final ProductData productData = response.getBody();

        assertEquals(TestConstants.PRODUCT_CODE, productData.getCode());
        assertEquals("EASYSHARE V1253, Black", productData.getName());
        assertEquals(10, productData.getImages().size());

    }

    @Test()
    public void testGetProductByCode_Success_XML_Options_Categories() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<ProductData> response = template.exchange(URL + "/{code}?options=CATEGORIES",
                HttpMethod.GET, requestEntity, ProductData.class, TestConstants.PRODUCT_CODE);
        final ProductData productData = response.getBody();

        assertEquals(TestConstants.PRODUCT_CODE, productData.getCode());
        assertEquals("EASYSHARE V1253, Black", productData.getName());
        assertEquals(2, productData.getCategories().size());

    }

    @Test()
    public void testGetProductByCode_Success_XML_Options_Promotions() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<ProductData> response = template.exchange(URL + "/{code}?options=PROMOTIONS",
                HttpMethod.GET, requestEntity, ProductData.class, TestConstants.PRODUCT_CODE);
        final ProductData productData = response.getBody();

        assertEquals(TestConstants.PRODUCT_CODE, productData.getCode());
        assertEquals("EASYSHARE V1253, Black", productData.getName());
    }

    @Test()
    public void testGetProductByCode_Success_XML_Options_Stock() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<ProductData> response = template.exchange(URL + "/{code}?options=STOCK",
                HttpMethod.GET, requestEntity, ProductData.class, TestConstants.PRODUCT_CODE);
        final ProductData productData = response.getBody();

        assertEquals(TestConstants.PRODUCT_CODE, productData.getCode());
        assertEquals("EASYSHARE V1253, Black", productData.getName());

    }

    @Test()
    public void testGetProductByCode_Success_XML_Options_Review() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<ProductData> response = template.exchange(URL + "/{code}?options=REVIEW",
                HttpMethod.GET, requestEntity, ProductData.class, TestConstants.PRODUCT_CODE);
        final ProductData productData = response.getBody();

        assertEquals(TestConstants.PRODUCT_CODE, productData.getCode());
        assertEquals("EASYSHARE V1253, Black", productData.getName());
        assertEquals(0, productData.getReviews().size());

    }

    @Test()
    public void testPutProductByCode_Success_XML_Options_Review() {

        final PrincipalData principal = new PrincipalData();
        principal.setName(USER);
        principal.setUid(USER);

        final ReviewData review = new ReviewData();
        review.setAlias("alias message");
        review.setComment("comment here ");
        review.setHeadline("head line new");
        review.setPrincipal(principal);
        review.setDate(new Date());
        review.setRating(Double.valueOf(1));

        final HttpEntity<ReviewData> requestEntity = new HttpEntity<ReviewData>(review, getXMLHeaders());

        final ResponseEntity<ReviewData> response = template.exchange(URL + "/{code}/reviews", HttpMethod.PUT,
                requestEntity, ReviewData.class, TestConstants.PRODUCT_CODE);
        final ReviewData reviewData = response.getBody();

        Assert.assertNotNull(reviewData);

    }

    @Test()
    public void testGetProductByCode_Success_XML_Options_Classifications() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<ProductData> response = template.exchange(URL + "/{code}?options=CLASSIFICATION",
                HttpMethod.GET, requestEntity, ProductData.class, TestConstants.PRODUCT_CODE);
        final ProductData productData = response.getBody();

        assertEquals(TestConstants.PRODUCT_CODE, productData.getCode());
        assertEquals("EASYSHARE V1253, Black", productData.getName());
        assertEquals(23, productData.getClassifications().size());

    }

    @Test(expected = HttpClientErrorException.class)
    public void testGetProductByCode_Failure_XML() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<String> response = template.exchange(URL + "/DOESNOTEXIST{code}", HttpMethod.GET,
                requestEntity, String.class, TestConstants.PRODUCT_CODE);
        assertEquals("application/xml;charset=UTF-8", response.getHeaders().getContentType().toString());
    }

    @Test()
    public void testGetProductByCode_Success_JSON() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getJSONHeaders());
        final ResponseEntity<String> response = template.exchange(URL + "/{code}", HttpMethod.GET, requestEntity,
                String.class, TestConstants.PRODUCT_CODE);
        assertEquals("application/json;charset=UTF-8", response.getHeaders().getContentType().toString());
    }

    @Test()
    public void testGetProductByCode_Success_JSON_Deep() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getJSONHeaders());
        final ResponseEntity<ProductData> response = template.exchange(URL + "/{code}", HttpMethod.GET,
                requestEntity, ProductData.class, TestConstants.PRODUCT_CODE);
        assertEquals(TestConstants.PRODUCT_CODE, response.getBody().getCode());
    }

    @Test(expected = HttpClientErrorException.class)
    public void testGetProductByCode_Failure_JSON() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getJSONHeaders());
        final ResponseEntity<String> response = template.exchange(URL + "/DOESNOTEXIST{code}", HttpMethod.GET,
                requestEntity, String.class, TestConstants.PRODUCT_CODE);
        assertEquals("application/json;charset=UTF-8", response.getHeaders().getContentType().toString());
    }

    @Test()
    public void testETagExists() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getJSONHeaders());
        final ResponseEntity<String> response = template.exchange(URL + "/{code}", HttpMethod.GET, requestEntity,
                String.class, TestConstants.PRODUCT_CODE);
        assertTrue(response.getHeaders().containsKey("ETag"));

    }

    @Test
    public void testBasicSearch() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<String> response = template.exchange(URL + "?query={query}", HttpMethod.GET,
                requestEntity, String.class, "a");
        assertTrue(response.getBody().length() > 0);
        assertEquals("application/xml;charset=UTF-8", response.getHeaders().getContentType().toString());
    }

    @Test
    public void testBasicSearch2() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<FacetSearchPageData> response = template.exchange(URL + "?query={query}",
                HttpMethod.GET, requestEntity, FacetSearchPageData.class, "a");

        final FacetSearchPageData<SolrSearchQueryData, ProductData> facetSearchPageData = response.getBody();
        assertTrue(facetSearchPageData != null);

        assertEquals("a", facetSearchPageData.getCurrentQuery().getFreeTextSearch());
        assertEquals(0, facetSearchPageData.getBreadcrumbs().size());
        assertTrue(facetSearchPageData.getFacets() != null);
        assertEquals(20, facetSearchPageData.getResults().size());
        assertEquals(6, facetSearchPageData.getSorts().size());

        for (final ProductData p : facetSearchPageData.getResults()) {
            assertTrue("Each product should have a price", p.getPrice() != null);
            assertTrue("Each product should have a name", p.getName() != null);

        }

    }

    @Test
    public void testSearchRefine() {
        final HttpEntity<String> requestEntity = new HttpEntity<String>(getXMLHeaders());
        final ResponseEntity<FacetSearchPageData> response = template.exchange(URL + "?query={query}",
                HttpMethod.GET, requestEntity, FacetSearchPageData.class, "a");

        final FacetSearchPageData<SolrSearchQueryData, ProductData> facetSearchPageData = response.getBody();

        final FacetData<SolrSearchQueryData> facet = facetSearchPageData.getFacets().get(0);
        assertEquals("Category", facet.getName());
        assertEquals(21, facet.getValues().size());
        final FacetValueData<SolrSearchQueryData> value = facet.getValues().get(0);
        assertEquals("Battery Chargers", value.getName());
        assertEquals(4l, value.getCount());

        final ResponseEntity<FacetSearchPageData> response2 = template.exchange(URL + "?query={query}",
                HttpMethod.GET, requestEntity, FacetSearchPageData.class, "a:relevance:brand:brand_10");
        assertTrue(response2 != null);

    }

    protected HttpHeaders getXMLHeaders() {
        final HttpHeaders headers = new HttpHeaders();
        headers.set("Accept", "application/xml");
        return headers;
    }

    protected HttpHeaders getJSONHeaders() {
        final HttpHeaders headers = new HttpHeaders();
        headers.set("Accept", "application/json");
        return headers;
    }

}