package com.temenos.useragent.generic;
/*
* #%L
* useragent-generic-java
* %%
* Copyright (C) 2012 - 2017 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.*;
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.HttpRequest;
import com.temenos.useragent.generic.http.HttpResponse;
import com.temenos.useragent.generic.http.HttpResponseImpl;
import com.temenos.useragent.generic.http.HttpResult;
import com.temenos.useragent.generic.mediatype.HalJsonPayloadHandler;
public class DefaultInteractionSessionTest {
private InteractionSession session = DefaultInteractionSession.newSession();
private VerifiableMockHttpClient verifiableHttpClient = new VerifiableMockHttpClient();
@Before
public void setUp() {
session.useHttpClient(verifiableHttpClient);
}
@Test
public void testHttpInvocationProperties() {
session.use(new HalJsonPayloadHandler().entity());
verifiableHttpClient.responseToBeReturned = newHalJsonOKResponse();
session.url("POST-test-url").post();
assertEquals(HttpMethod.POST, verifiableHttpClient.invokedMethod);
assertEquals("POST-test-url", verifiableHttpClient.invokedUrl);
session.url("GET-test-url").get();
assertEquals(HttpMethod.GET, verifiableHttpClient.invokedMethod);
assertEquals("GET-test-url", verifiableHttpClient.invokedUrl);
session.url("PUT-test-url").put();
assertEquals(HttpMethod.PUT, verifiableHttpClient.invokedMethod);
assertEquals("PUT-test-url", verifiableHttpClient.invokedUrl);
session.url("DELETE-test-url").delete();
assertEquals(HttpMethod.DELETE, verifiableHttpClient.invokedMethod);
assertEquals("DELETE-test-url", verifiableHttpClient.invokedUrl);
}
@Test
public void testSetForNewlyBuiltHalJsonEntity() {
session.use(new HalJsonPayloadHandler().entity());
session.set("foo", "bar");
verifiableHttpClient.responseToBeReturned = newHalJsonOKResponse();
session.url("http://mybank/services/BankServices/customers").post();
assertTrue(verifiableHttpClient.invokedRequest.payload().contains(
"\"foo\" : \"bar\""));
}
// returns a general purpose hal+json OK response
private HttpResponseImpl newHalJsonOKResponse() {
HttpHeader header = new HttpHeader();
header.set("Content-Type", "application/hal+json");
return new HttpResponseImpl(header, "{}", new HttpResult(200, "OK"));
}
// A HttpClient implementation for unit testing. This implementation
// supports verification of the Http method calls by allowing the request
// for inspection by intercepting the call and accepting response to be
// returned.
private static class VerifiableMockHttpClient implements HttpClient {
// Http method that got invoked recently
private HttpMethod invokedMethod;
// Http url that got invoked recently
private String invokedUrl;
// Http request that was received during last invocation
private HttpRequest invokedRequest;
// Http response which is expected to be returned as a response for last
// invocation
private HttpResponse responseToBeReturned;
@Override
public HttpResponse get(String url, HttpRequest request) {
invokedRequest = request;
invokedUrl = url;
invokedMethod = HttpMethod.GET;
return responseToBeReturned;
}
@Override
public HttpResponse post(String url, HttpRequest request) {
invokedRequest = request;
invokedUrl = url;
invokedMethod = HttpMethod.POST;
return responseToBeReturned;
}
@Override
public HttpResponse put(String url, HttpRequest request) {
invokedRequest = request;
invokedUrl = url;
invokedMethod = HttpMethod.PUT;
return responseToBeReturned;
}
@Override
public HttpResponse delete(String url, HttpRequest request) {
invokedRequest = request;
invokedUrl = url;
invokedMethod = HttpMethod.DELETE;
return responseToBeReturned;
}
}
}