Here’s a suggestion for integration testing REST webscripts using the REST-assured Java DSL for easy testing of REST services ``` package com.bettercode.alfresco.webservices.integration; /** * Created by martian on 13/06/16. */ import static org.junit.Assert.*; import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.util.Map; import com.jayway.restassured.response.Response; import org.apache.http.client.HttpClient; import org.eclipse.jetty.util.ajax.JSON; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener; import org.junit.After; import org.junit.Before; import org.junit.Test; import static com.jayway.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; public class TestHofDownload { private static final String ADMIN_USER = "admin"; private static final String ADMIN_PASS = "admin"; private static final String LOCAL_URL = "http://localhost:8080/alfresco/s/sam"; private HttpClient client; private URI url; @Before public void setUp() throws Exception { System.out.println("==========================="); url = new URI(LOCAL_URL + "/demoProductService"); } @After public void tearDown() { System.out.println("**********"); } @Test public void obviouslyFailingTest() throws Exception { System.out.println("obviouslyFailingTest()"); given().auth().preemptive().basic(ADMIN_USER, ADMIN_PASS).when().get(url).then().body("ping", equalTo("ok")); } @Test public void emptyCallGivesEmptyProductsInBody() throws Exception { /* We get under the hood of rest assured a little bit here Normally would have been, for example: given().auth().preemptive().basic(ADMIN_USER, ADMIN_PASS).when().get(url).then().body("ping", equalTo("ok")); like in the obviouslyFailingTest above. except here instead we get a response and use its asString() value to create the json object, you can also do string assertions here for negative matching: http://stackoverflow.com/a/26514466/370191 The expected response for this call is this or equivalent: '{"products" : []}' */ Response r = given().auth().preemptive().basic(ADMIN_USER, ADMIN_PASS).when().get(url); System.out.println(r.asString()); JSONTokener tokr = new JSONTokener(r.asString()); JSONObject root = new JSONObject(tokr); assertEquals("products array is empty on empty request", 0, root.getJSONArray("products").length()); assertNotEquals("products array is empty on empty request, and not by accident", 1, root.getJSONArray("products").length()); assertNotEquals("products array is empty on empty request, and not by accident", 10, root.getJSONArray("products").length()); } @Test public void testThatDoesNotTestJustLogs() throws Exception { System.out.println("testThatDoesNotTestJustLogs()"); System.out.println(url); System.out.println("body:"); given().auth().preemptive().basic(ADMIN_USER, ADMIN_PASS).when().get(url).then().log().body(); System.out.println("status:"); given().auth().preemptive().basic(ADMIN_USER, ADMIN_PASS).when().get(url).then().log().status(); // Only log the status line System.out.println("response headers:"); given().auth().preemptive().basic(ADMIN_USER, ADMIN_PASS).when().get(url).then().log().headers(); // Only log the response headers System.out.println("response cookies:"); given().auth().preemptive().basic(ADMIN_USER, ADMIN_PASS).when().get(url).then().log().cookies(); // Only log the response cookies } } ```