package com.epam.wilma.browsermob.transformer;
/*==========================================================================
Copyright 2013-2017 EPAM Systems
This file is part of Wilma.
Wilma is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Wilma is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Wilma. If not, see <http://www.gnu.org/licenses/>.
===========================================================================*/
import com.epam.wilma.browsermob.configuration.MessageConfigurationAccess;
import com.epam.wilma.browsermob.configuration.domain.MessagePropertyDTO;
import com.epam.wilma.browsermob.transformer.helper.WilmaResponseFactory;
import com.epam.wilma.domain.http.WilmaHttpResponse;
import net.lightbody.bmp.proxy.http.BrowserMobHttpResponse;
import org.apache.http.Header;
import org.apache.http.message.BasicHeader;
import org.mockito.Answers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
/**
* Provides unit tests for the <tt>HttpResponseTransformer</tt> class.
* @author Tunde_Kovacs
*
*/
public class HttpResponseTransformerTest {
private static final String RESPONSE_BODY = "response";
private static final String CONTENT_TYPE = "application/xml";
private static final String PREFIX = "prefix";
private Header[] responseHeaders;
private Header[] requestHeaders;
@Mock
private WilmaHttpResponse response;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private BrowserMobHttpResponse browserMobHttpResponse;
@Mock
private MessageConfigurationAccess configurationAccess;
@Mock
private WilmaResponseFactory responseFactory;
@InjectMocks
private HttpResponseTransformer underTest;
@BeforeMethod
public void setUp() {
MockitoAnnotations.initMocks(this);
given(responseFactory.createNewWilmaHttpResponse(false)).willReturn(response);
requestHeaders = new Header[1];
responseHeaders = new Header[1];
requestHeaders[0] = new BasicHeader("reqName", "reqValue");
responseHeaders[0] = new BasicHeader("respName", "respValue");
}
@Test
public void testTransformShouldSetRequestHeader() {
//GIVEN
setMocksForMessageContent();
setMocksForMessageConfiguration();
//WHEN
underTest.transformResponse(browserMobHttpResponse);
//THEN
verify(response).addRequestHeader("reqName", "reqValue");
}
@Test
public void testTransformShouldSetResponseHeader() {
setMocksForMessageContent();
setMocksForMessageConfiguration();
//WHEN
underTest.transformResponse(browserMobHttpResponse);
//THEN
verify(response).addHeader("respName", "respValue");
}
@Test
public void testTransformShouldSetResponseWilmaMessageId() {
setMocksForMessageContent();
setMocksForMessageConfiguration();
given(browserMobHttpResponse.getEntry().getWilmaEntryId()).willReturn(PREFIX);
//WHEN
underTest.transformResponse(browserMobHttpResponse);
//THEN
verify(response).setWilmaMessageId(PREFIX + "_" + PREFIX);
}
@Test
public void testTransformShouldNotSetResponseHeaderWhenRawResponseIsNull() {
setMocksForMessageContent();
given(browserMobHttpResponse.getRawResponse()).willReturn(null);
setMocksForMessageConfiguration();
//WHEN
underTest.transformResponse(browserMobHttpResponse);
//THEN
verify(response, never()).addHeader("respName", "respValue");
}
@Test
public void testTransformShouldSetBody() {
setMocksForMessageContent();
setMocksForMessageConfiguration();
//WHEN
underTest.transformResponse(browserMobHttpResponse);
//THEN
verify(response).setBody(RESPONSE_BODY);
}
@Test
public void testTransformShouldSetContentType() {
setMocksForMessageContent();
setMocksForMessageConfiguration();
given(browserMobHttpResponse.getContentType()).willReturn(CONTENT_TYPE);
//WHEN
underTest.transformResponse(browserMobHttpResponse);
//THEN
verify(response).setContentType(CONTENT_TYPE);
}
@Test
public void testTransformShouldSetStatusCode() {
setMocksForMessageContent();
setMocksForMessageConfiguration();
//WHEN
underTest.transformResponse(browserMobHttpResponse);
//THEN
verify(response).setStatusCode(200);
}
private void setMocksForMessageConfiguration() {
String instancePrefix = PREFIX;
MessagePropertyDTO propertiesDTO = new MessagePropertyDTO(instancePrefix);
given(configurationAccess.getProperties()).willReturn(propertiesDTO);
}
private void setMocksForMessageContent() {
given(browserMobHttpResponse.getRawResponse().getAllHeaders()).willReturn(responseHeaders);
given(browserMobHttpResponse.getRequestHeaders()).willReturn(requestHeaders);
given(browserMobHttpResponse.getBody()).willReturn(RESPONSE_BODY);
given(browserMobHttpResponse.getStatus()).willReturn(200);
}
}