package com.tinkerpop.rexster.extension;
import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.impls.tg.TinkerGraphFactory;
import com.tinkerpop.rexster.Tokens;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;
import org.junit.Assert;
import org.junit.Test;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ExtensionResponseTest {
@Test(expected = IllegalArgumentException.class)
public void overrideNull() {
ExtensionResponse.override(null);
}
@Test
public void overrideValid() {
Response r = Response.noContent().build();
ExtensionResponse er = ExtensionResponse.override(r);
Assert.assertNotNull(er);
Assert.assertFalse(er.isErrorResponse());
Assert.assertEquals(r, er.getJerseyResponse());
}
@Test
public void errorJustMessage() {
ExtensionResponse er = ExtensionResponse.error("msg");
Assert.assertNotNull(er);
Assert.assertTrue(er.isErrorResponse());
Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
Assert.assertTrue(entity.has("message"));
Assert.assertEquals("msg", entity.optString("message"));
}
@Test
public void errorJustException() {
ExtensionResponse er = ExtensionResponse.error(new Exception("err"));
Assert.assertNotNull(er);
Assert.assertTrue(er.isErrorResponse());
Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), r.getStatus());
JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
Assert.assertTrue(entity.has("message"));
Assert.assertEquals("", entity.optString("message"));
Assert.assertTrue(entity.has("error"));
Assert.assertEquals("err", entity.optString("error"));
}
@Test
public void errorMessageAndException() {
ExtensionResponse er = ExtensionResponse.error("msg", new Exception("err"));
Assert.assertNotNull(er);
Assert.assertTrue(er.isErrorResponse());
Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), r.getStatus());
JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
Assert.assertTrue(entity.has("message"));
Assert.assertEquals("msg", entity.optString("message"));
Assert.assertTrue(entity.has("error"));
Assert.assertEquals("err", entity.optString("error"));
}
@Test
public void errorMessageExceptionAndCode() {
ExtensionResponse er = ExtensionResponse.error("msg", new Exception("err"),
Response.Status.BAD_REQUEST.getStatusCode());
Assert.assertNotNull(er);
Assert.assertTrue(er.isErrorResponse());
Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), r.getStatus());
JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
Assert.assertTrue(entity.has("message"));
Assert.assertEquals("msg", entity.optString("message"));
Assert.assertTrue(entity.has("error"));
Assert.assertEquals("err", entity.optString("error"));
}
@Test
public void errorMessageExceptionAndCodeWithAddedJsonNoKey() {
HashMap map = new HashMap() {{
put("this", "that");
}};
ExtensionResponse er = ExtensionResponse.error("msg", new Exception("err"),
Response.Status.BAD_REQUEST.getStatusCode(), null, new JSONObject(map));
Assert.assertNotNull(er);
Assert.assertTrue(er.isErrorResponse());
Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), r.getStatus());
JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
Assert.assertTrue(entity.has("message"));
Assert.assertEquals("msg", entity.optString("message"));
Assert.assertTrue(entity.has("error"));
Assert.assertEquals("err", entity.optString("error"));
Assert.assertTrue(entity.has("this"));
Assert.assertEquals("that", entity.optString("this"));
}
@Test
public void errorMessageExceptionAndCodeWithAddedJsonWithKey() {
final JSONObject deep = new JSONObject();
try {
deep.put("deepone", "foundme");
} catch (Exception ex) {
// never happen
}
HashMap map = new HashMap() {{
put("this", "that");
put("deep", deep);
}};
ExtensionResponse er = ExtensionResponse.error("msg", new Exception("err"),
Response.Status.BAD_REQUEST.getStatusCode(), "keyitup", new JSONObject(map));
Assert.assertNotNull(er);
Assert.assertTrue(er.isErrorResponse());
Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), r.getStatus());
JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
Assert.assertTrue(entity.has("message"));
Assert.assertEquals("msg", entity.optString("message"));
Assert.assertTrue(entity.has("error"));
Assert.assertEquals("err", entity.optString("error"));
Assert.assertTrue(entity.has("keyitup"));
JSONObject bonusJson = entity.optJSONObject("keyitup");
Assert.assertNotNull(bonusJson);
Assert.assertTrue(bonusJson.has("this"));
Assert.assertEquals("that", bonusJson.optString("this"));
Assert.assertTrue(bonusJson.has("deep"));
JSONObject deepJson = bonusJson.optJSONObject("deep");
Assert.assertNotNull(bonusJson);
Assert.assertTrue(deepJson.has("deepone"));
Assert.assertEquals("foundme", deepJson.optString("deepone"));
}
@Test(expected = IllegalArgumentException.class)
public void okWithNullHashMap() {
ExtensionResponse.ok((HashMap) null);
}
@Test
public void okWithValidHashMap() {
HashMap<String, String> map = new HashMap<String, String>() {{
put("this", "that");
}};
ExtensionResponse er = ExtensionResponse.ok(map);
Assert.assertNotNull(er);
Assert.assertFalse(er.isErrorResponse());
Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
Assert.assertTrue(entity.has("this"));
Assert.assertEquals("that", entity.optString("this"));
}
@Test
public void okWithValidJson() {
HashMap<String, String> map = new HashMap<String, String>() {{
put("this", "that");
}};
JSONObject jsonObject = new JSONObject(map);
ExtensionResponse er = ExtensionResponse.ok(jsonObject);
Assert.assertNotNull(er);
Assert.assertFalse(er.isErrorResponse());
Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
Assert.assertTrue(entity.has("this"));
Assert.assertEquals("that", entity.optString("this"));
}
@Test
public void okForGraphElement() {
final Graph g = TinkerGraphFactory.createTinkerGraph();
final ExtensionResponse er = ExtensionResponse.ok(g.getVertex(1));
Assert.assertNotNull(er);
Assert.assertFalse(er.isErrorResponse());
final Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
final JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
Assert.assertEquals("marko", entity.optString("name"));
Assert.assertEquals(29, entity.optInt("age"));
}
@Test
public void okForGraphElements() {
final Graph g = TinkerGraphFactory.createTinkerGraph();
List<Element> elements = new ArrayList<Element>();
elements.add(g.getVertex(1));
elements.add(g.getVertex(2));
final ExtensionResponse er = ExtensionResponse.ok(elements.iterator());
Assert.assertNotNull(er);
Assert.assertFalse(er.isErrorResponse());
final Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
final JSONObject entity = (JSONObject) r.getEntity();
Assert.assertNotNull(entity);
final JSONArray jsonArray = entity.optJSONArray(Tokens.RESULTS);
Assert.assertEquals(2, jsonArray.length());
Assert.assertEquals("marko", jsonArray.optJSONObject(0).optString("name"));
Assert.assertEquals("vadas", jsonArray.optJSONObject(1).optString("name"));
}
@Test
public void noContentValid() {
ExtensionResponse er = ExtensionResponse.noContent();
Assert.assertNotNull(er);
Assert.assertFalse(er.isErrorResponse());
Response r = er.getJerseyResponse();
Assert.assertNotNull(r);
Assert.assertEquals(Response.Status.NO_CONTENT.getStatusCode(), r.getStatus());
}
}