package com.temenos.useragent.generic.internal; /* * #%L * useragent-generic-java * %% * Copyright (C) 2012 - 2016 Temenos Holdings N.V. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.Before; import org.junit.Test; import com.temenos.useragent.generic.http.HttpClient; import com.temenos.useragent.generic.http.HttpHeader; import com.temenos.useragent.generic.http.HttpMethod; import com.temenos.useragent.generic.http.HttpMethodExecutor; import com.temenos.useragent.generic.http.HttpRequest; import com.temenos.useragent.generic.http.HttpResponse; public class UrlWrapperTest { private HttpClient mockHttpClient; private SessionContext mockSessionContext; private HttpResponse mockResponse; private HttpHeader mockHeader; private HttpMethodExecutor mockExecutor; @Before public void setUp() { mockHttpClient = mock(HttpClient.class); mockSessionContext = mock(SessionContext.class); mockResponse = mock(HttpResponse.class); mockHeader = mock(HttpHeader.class); mockExecutor = mock(HttpMethodExecutor.class); when(mockSessionContext.getHttpClient()).thenReturn(mockHttpClient); } @Test public void testBaseuriWithGet() { when(mockHttpClient.get(anyString(), any(HttpRequest.class))) .thenReturn(mockResponse); when(mockResponse.headers()).thenReturn(mockHeader); when(mockHeader.get("Content-Type")).thenReturn("text/plain"); when(mockResponse.payload()).thenReturn("plain text payload"); UrlWrapper wrapper = new UrlWrapper(mockSessionContext); wrapper.baseuri("foo"); wrapper.get(); verify(mockHttpClient, times(1)) .get(eq("foo/"), any(HttpRequest.class)); } @Test public void testPathWithPost() { when(mockHttpClient.post(anyString(), any(HttpRequest.class))) .thenReturn(mockResponse); when(mockResponse.headers()).thenReturn(mockHeader); when(mockHeader.get("Content-Type")).thenReturn("text/plain"); when(mockResponse.payload()).thenReturn("plain text payload"); UrlWrapper wrapper = new UrlWrapper(mockSessionContext); wrapper.baseuri("foo"); wrapper.path("bar()"); wrapper.post(); verify(mockHttpClient, times(1)).post(eq("foo/bar()"), any(HttpRequest.class)); } @Test public void testQueryParamWithGet() { when(mockHttpClient.get(anyString(), any(HttpRequest.class))) .thenReturn(mockResponse); when(mockResponse.headers()).thenReturn(mockHeader); when(mockHeader.get("Content-Type")).thenReturn("text/plain"); when(mockResponse.payload()).thenReturn("plain text payload"); UrlWrapper wrapper = new UrlWrapper(mockSessionContext); wrapper.baseuri("foo"); wrapper.path("bar()"); wrapper.queryParam("$top=10"); wrapper.get(); verify(mockHttpClient, times(1)).get(eq("foo/bar()?$top=10"), any(HttpRequest.class)); } @Test public void testNoPayloadWithPost() { when(mockHttpClient.post(anyString(), any(HttpRequest.class))) .thenReturn(mockResponse); when(mockResponse.headers()).thenReturn(mockHeader); when(mockHeader.get("Content-Type")).thenReturn("text/plain"); when(mockResponse.payload()).thenReturn("plain text payload"); UrlWrapper wrapper = new UrlWrapper("foo/bar('x')", mockSessionContext); wrapper.noPayload(); wrapper.post(); verify(mockHttpClient, times(1)).post(eq("foo/bar('x')"), any(HttpRequest.class)); } @Test public void testGet() { when(mockHttpClient.get(anyString(), any(HttpRequest.class))) .thenReturn(mockResponse); when(mockResponse.headers()).thenReturn(mockHeader); when(mockHeader.get("Content-Type")).thenReturn("text/plain"); when(mockResponse.payload()).thenReturn("plain text payload"); UrlWrapper wrapper = new UrlWrapper("foo/bar()", mockSessionContext); wrapper.get(); verify(mockHttpClient, times(1)).get(eq("foo/bar()"), any(HttpRequest.class)); } @Test public void testPost() { when(mockHttpClient.post(anyString(), any(HttpRequest.class))) .thenReturn(mockResponse); when(mockResponse.headers()).thenReturn(mockHeader); when(mockHeader.get("Content-Type")).thenReturn("text/plain"); when(mockResponse.payload()).thenReturn("plain text payload"); UrlWrapper wrapper = new UrlWrapper("foo/bar('x')", mockSessionContext); wrapper.noPayload(); wrapper.post(); verify(mockHttpClient, times(1)).post(eq("foo/bar('x')"), any(HttpRequest.class)); } @Test public void testPut() { when(mockHttpClient.put(anyString(), any(HttpRequest.class))) .thenReturn(mockResponse); when(mockResponse.headers()).thenReturn(mockHeader); when(mockHeader.get("Content-Type")).thenReturn("text/plain"); when(mockResponse.payload()).thenReturn("plain text payload"); UrlWrapper wrapper = new UrlWrapper("foo/bar('y')", mockSessionContext); wrapper.noPayload(); wrapper.put(); verify(mockHttpClient, times(1)).put(eq("foo/bar('y')"), any(HttpRequest.class)); } @Test public void testDelete(){ //given UrlWrapper wrapper = spy(new UrlWrapper("foo/bar('y')", mockSessionContext)); doReturn(mockExecutor).when(wrapper).getExecutor(any(EntityWrapper.class)); //when wrapper.delete(); //then verify(mockExecutor).execute(eq(HttpMethod.DELETE)); verify(mockSessionContext, times(0)).getRequestEntity(); } @Test public void testUrl() { UrlWrapper wrapper = new UrlWrapper(mockSessionContext); wrapper.baseuri("foo"); wrapper.path("bar('123')"); assertEquals("foo/bar('123')", wrapper.url()); wrapper = new UrlWrapper("foo/bar('x')", mockSessionContext); wrapper.baseuri("foo"); // ignores baseuri wrapper.path("bar('123')");// ignores path assertEquals("foo/bar('x')", wrapper.url()); } }