package com.goebl.david;
import org.json.JSONObject;
import java.net.HttpURLConnection;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
public class TestWebb extends AbstractTestWebb {
public void testMisc() throws Exception {
Request request = webb
.get("/ping")
.useCaches(true);
assertEquals(Request.Method.GET, request.method);
assertEquals(true, request.useCaches);
Response<String> response = request.asString();
assertTrue(response.isSuccess());
assertEquals("pong", response.getBody());
assertNull(response.getErrorBody());
HttpURLConnection connection = response.getConnection();
assertNotNull(connection);
assertEquals(connection.getResponseMessage(), response.getResponseMessage());
assertEquals(connection.getResponseCode(), response.getStatusCode());
assertSame(request, response.getRequest());
}
public void testIgnoreBaseUri() throws Exception {
webb.get("http://www.goebl.com/robots.txt").ensureSuccess().asVoid();
}
public void testSimpleGetText() throws Exception {
Response<String> response = webb
.get("/simple.txt")
.param("p1", SIMPLE_ASCII)
.param("p2", COMPLEX_UTF8)
.asString();
assertEquals(200, response.getStatusCode());
assertTrue(response.isSuccess());
assertEquals(HTTP_MESSAGE_OK, response.getResponseMessage());
assertEquals("HTTP/1.1 200 OK", response.getStatusLine());
assertEquals(SIMPLE_ASCII + ", " + COMPLEX_UTF8, response.getBody());
assertEquals(Webb.TEXT_PLAIN, response.getContentType());
}
public void testSimplePostText() throws Exception {
Response<String> response = webb
.post("/simple.txt")
.param("p1", SIMPLE_ASCII)
.param("p2", COMPLEX_UTF8)
.asString();
assertEquals(200, response.getStatusCode());
assertEquals(HTTP_MESSAGE_OK, response.getResponseMessage());
assertEquals(SIMPLE_ASCII + ", " + COMPLEX_UTF8, response.getBody());
assertTrue(response.getContentType().startsWith(Webb.TEXT_PLAIN));
}
public void testEchoPostText() throws Exception {
String expected = SIMPLE_ASCII + ", " + COMPLEX_UTF8;
Response<String> response = webb
.post("/echoText")
.body(expected)
.asString();
assertEquals(200, response.getStatusCode());
assertEquals(HTTP_MESSAGE_OK, response.getResponseMessage());
assertEquals(expected, response.getBody());
assertTrue(response.getContentType().startsWith(Webb.TEXT_PLAIN));
}
public void testSimpleGetJson() throws Exception {
Response<JSONObject> response = webb
.get("/simple.json")
.param("p1", SIMPLE_ASCII)
.param("p2", COMPLEX_UTF8)
.useCaches(false)
.asJsonObject();
assertEquals(200, response.getStatusCode());
assertEquals(HTTP_MESSAGE_OK, response.getResponseMessage());
assertTrue(response.getContentType().startsWith(Webb.APP_JSON));
JSONObject result = response.getBody();
assertNotNull(result);
assertEquals(SIMPLE_ASCII, result.getString("p1"));
assertEquals(COMPLEX_UTF8, result.getString("p2"));
}
public void testSimplePutJson() throws Exception {
JSONObject payload = new JSONObject();
payload.put("p1", SIMPLE_ASCII);
payload.put("p2", COMPLEX_UTF8);
Response<JSONObject> response = webb
.put("/simple.json")
.body(payload)
.asJsonObject();
assertEquals(200, response.getStatusCode());
assertTrue(response.getContentType().startsWith(Webb.APP_JSON));
JSONObject result = response.getBody();
assertNotNull(result);
assertEquals(SIMPLE_ASCII, result.getString("p1"));
assertEquals(COMPLEX_UTF8, result.getString("p2"));
}
public void testSimplePostJson() throws Exception {
JSONObject payload = new JSONObject();
payload.put("p1", SIMPLE_ASCII);
payload.put("p2", COMPLEX_UTF8);
Response<Void> response = webb
.post("/simple.json")
.body(payload)
.asVoid();
assertEquals(201, response.getStatusCode());
assertTrue(response.isSuccess());
assertEquals("Created", response.getResponseMessage());
assertEquals("http://example.com/4711", response.getHeaderField("Location"));
}
public void testSimpleDelete() throws Exception {
Response<Void> response = webb
.delete("/simple")
.asVoid();
assertEquals(204, response.getStatusCode());
assertTrue(response.isSuccess());
assertEquals("No Content", response.getResponseMessage());
}
public void testNoContent() throws Exception {
Response<Void> responseAsVoid = webb
.get("/no-content")
.asVoid();
assertEquals(204, responseAsVoid.getStatusCode());
assertTrue(responseAsVoid.isSuccess());
assertEquals("No Content", responseAsVoid.getResponseMessage());
Response<String> responseAsString = webb
.get("/no-content")
.asString();
assertEquals(204, responseAsString.getStatusCode());
assertTrue(responseAsString.isSuccess());
assertEquals("No Content", responseAsString.getResponseMessage());
assertEquals("", responseAsString.getBody());
}
public void testParameterTypes() throws Exception {
Response<String> response = webb
.get("/parameter-types")
.param("string", SIMPLE_ASCII)
.param("number", 815)
.param("number", 4711) // test overwrite feature of multiple calls with same name
.param("null", null)
.param("empty", "")
.asString();
assertEquals(204, response.getStatusCode());
}
public void testParameterTypesWithMap() throws Exception {
Map<String, Object> params = new HashMap<String, Object>();
params.put("string", SIMPLE_ASCII);
params.put("number", 4711);
params.put("null", null);
params.put("empty", "");
Response<String> response = webb
.get("/parameter-types")
.params(params)
.asString();
assertEquals(204, response.getStatusCode());
}
public void testMultiValuesParameterArray() throws Exception {
Object values = new Object[]{"abc", 1, true, "abc@abc.com"};
Response<String> response = webb
.get("/multiple-valued-parameter")
.param("m", values)
.asString();
assertEquals(204, response.getStatusCode());
}
public void testMultiValuesParameterIterable() throws Exception {
Object values = Arrays.asList("abc", 1, true, "abc@abc.com");
Response<String> response = webb
.get("/multiple-valued-parameter")
.param("m", values)
.asString();
assertEquals(204, response.getStatusCode());
}
public void testMultiValuesParameterSimple() throws Exception {
Response<String> response = webb
.get("/multiple-valued-parameter")
.multipleValues()
.param("m", "abc")
.param("m", 1)
.param("m", true)
.param("m", "abc@abc.com")
.asString();
assertEquals(204, response.getStatusCode());
}
public void testHeadersIn() throws Exception {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
cal.set(2013, Calendar.NOVEMBER, 24, 23, 59, 33);
Response<Void> response = webb
.get("/headers/in")
.header("x-test-string", SIMPLE_ASCII)
.header("x-test-int", 4711)
.header("x-test-calendar", cal)
.header("x-test-date", cal.getTime())
.param(Webb.HDR_USER_AGENT, Webb.DEFAULT_USER_AGENT)
.asVoid();
assertEquals(200, response.getStatusCode());
}
public void testHeadersOut() throws Exception {
Response<Void> response = webb
.get("/headers/out")
.asVoid();
long nowMoreOrLess = System.currentTimeMillis();
assertEquals(200, response.getStatusCode());
assertEquals(4711, response.getHeaderFieldInt("x-test-int", 0));
long serverTime = response.getHeaderFieldDate("x-test-datum", 0L);
assertTrue(Math.abs(serverTime - nowMoreOrLess) < 5000);
serverTime = response.getDate();
assertTrue(Math.abs(serverTime - nowMoreOrLess) < 5000);
assertEquals(SIMPLE_ASCII, response.getHeaderField("x-test-string"));
}
public void testHeaderExpires() throws Exception {
long offset = 3600 * 1000;
Response<Void> response = webb
.get("/headers/expires")
.param("offset", offset)
.asVoid();
assertEquals(200, response.getStatusCode());
long expiresRaw = response.getHeaderFieldDate("Expires", 0L);
long expires = response.getExpiration();
// <10 seconds time drift is ok
long delta = expires - offset - System.currentTimeMillis();
if (Math.abs(delta) > 10000) {
fail("expires / offset mismatch: " + expires + " / " + offset + " delta=" + delta);
}
assertEquals(expiresRaw, expires);
}
public void testIfModifiedSince() throws Exception {
long lastModified = System.currentTimeMillis() - 10000; // resource was modified 10 seconds ago
// we ask if it was modified earlier than 100 seconds ago => yes!
Response<Void> response = webb
.get("/headers/if-modified-since")
.ifModifiedSince(lastModified - 100000)
.param("lastModified", lastModified)
.asVoid();
assertEquals(200, response.getStatusCode());
// we ask if it was modified earlier than 5 seconds ago => no!
response = webb
.get("/headers/if-modified-since")
.ifModifiedSince(lastModified + 5000)
.param("lastModified", lastModified)
.asVoid();
assertEquals(304, response.getStatusCode());
}
public void testLastModified() throws Exception {
long lastModified = (System.currentTimeMillis() / 1000) * 1000L;
Response<Void> response = webb
.get("/headers/last-modified")
.param("lastModified", lastModified)
.asVoid();
assertEquals(200, response.getStatusCode());
assertEquals(lastModified, response.getLastModified());
}
public void testEnsureSuccess() throws Exception {
String result = webb.get("/ping").ensureSuccess().asString().getBody();
assertEquals("pong", result);
}
// should be moved to TestRequest
public void testGetUri() throws Exception {
webb.setBaseUri("http://example.com");
Request request = webb.get("/simple.txt");
assertEquals("http://example.com/simple.txt", request.getUri());
}
}