package com.tinkerpop.rexster.util;
import com.tinkerpop.rexster.Tokens;
import junit.framework.Assert;
import org.codehaus.jettison.json.JSONObject;
import org.codehaus.jettison.json.JSONTokener;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class RequestObjectHelperTest {
@Test
public void getShowTypesNoKey() {
JSONObject jsonWithNoShowTypesKey = new JSONObject();
Assert.assertFalse(RequestObjectHelper.getShowTypes(jsonWithNoShowTypesKey));
}
@Test
public void getShowTypesBadValue() {
JSONObject jsonWithNonBooleanValueForKey = buildJSONObjectFromString("{\"rexster\": { \"showTypes\": \"not-true-or-false\"}}");
Assert.assertFalse(RequestObjectHelper.getShowTypes(jsonWithNonBooleanValueForKey));
}
@Test
public void getShowTypesValid() {
JSONObject jsonWithBooleanValueForKey = buildJSONObjectFromString("{\"rexster\": { \"showTypes\": true}}");
Assert.assertTrue(RequestObjectHelper.getShowTypes(jsonWithBooleanValueForKey));
}
@Test
public void getReturnKeysNullRequestObject() {
Assert.assertNull(RequestObjectHelper.getReturnKeys(null));
}
@Test
public void getReturnKeysWildcarded() {
JSONObject jsonWithWildcard = buildJSONObjectFromString("{\"rexster\": { \"returnKeys\": [\"" + Tokens.WILDCARD + "\"]}}");
Assert.assertNull(RequestObjectHelper.getReturnKeys(jsonWithWildcard));
}
@Test
public void getReturnKeysNoneSpecified() {
JSONObject jsonWithNoReturnKeysKey = new JSONObject();
Assert.assertNull(RequestObjectHelper.getReturnKeys(jsonWithNoReturnKeysKey));
}
@Test
public void getReturnKeysNonArrayBased() {
JSONObject jsonWithNonArrayReturnKeyValue = buildJSONObjectFromString("{\"rexster\": { \"" + Tokens.RETURN_KEYS + "\": \"" + Tokens.WILDCARD + "\"}}");
Assert.assertNull(RequestObjectHelper.getReturnKeys(jsonWithNonArrayReturnKeyValue));
}
@Test
public void getReturnKeysValid() {
JSONObject jsonWithTwoKeys = buildJSONObjectFromString("{\"rexster\": { \"" + Tokens.RETURN_KEYS + "\": [\"k1\",\"k2\"]}}");
Set<String> keys = RequestObjectHelper.getReturnKeys(jsonWithTwoKeys);
Assert.assertNotNull(keys);
Assert.assertEquals(2, keys.size());
List<String> listKeys = new ArrayList<String>(keys);
Assert.assertEquals("k1", listKeys.get(0));
Assert.assertEquals("k2", listKeys.get(1));
}
@Test
public void getReturnKeysNoKeys() throws Exception {
JSONObject json = buildJSONObjectFromString("{\"rexster\": { \"someproperty\": [ \"key\" ]}}");
Assert.assertNull(RequestObjectHelper.getReturnKeys(json));
}
@Test
public void getStartOffsetEmptyRequest() {
Assert.assertEquals(new Long(0), RequestObjectHelper.getStartOffset(null));
}
private JSONObject buildJSONObjectFromString(String json) {
try {
JSONTokener tokener = new JSONTokener(json);
return new JSONObject(tokener);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
@Test
public void getEndOffsetNullRequest() {
Assert.assertEquals(new Long(0), RequestObjectHelper.getStartOffset(null));
}
@Test
public void getStartOffsetNoOffset() {
JSONObject requestObject = buildJSONObjectFromString("{\"rexster\": { \"anyotherproperty\": { \"start\":\"ten\", \"end\":100 }}}");
Assert.assertEquals(new Long(0), RequestObjectHelper.getStartOffset(requestObject));
}
@Test
public void getStartOffsetInvalidOffset() {
JSONObject requestObject = buildJSONObjectFromString("{\"rexster\": { \"offset\": { \"start\":\"ten\", \"end\":100 }}}");
Assert.assertEquals(0l, (long) RequestObjectHelper.getStartOffset(requestObject));
}
@Test
public void getStartOffsetWithNoStart() {
JSONObject requestObject = buildJSONObjectFromString("{\"rexster\": { \"offset\": { \"end\":100 }}}");
Assert.assertEquals(0l, (long) RequestObjectHelper.getStartOffset(requestObject));
}
@Test
public void getStartOffsetValid() {
JSONObject requestObject = buildJSONObjectFromString("{\"rexster\": { \"offset\": { \"start\":10, \"end\":100 }}}");
Assert.assertEquals(10l, (long) RequestObjectHelper.getStartOffset(requestObject));
requestObject = buildJSONObjectFromString("{\"rexster\": { \"offset\": { \"start\":-10, \"end\":10001 }}}");
Assert.assertEquals(-10l, (long) RequestObjectHelper.getStartOffset(requestObject));
}
@Test
public void getEndOffsetEmptyRequest() {
JSONObject requestObject = buildJSONObjectFromString("{\"rexster\": \"nothing\"}");
Assert.assertEquals(new Long(Long.MAX_VALUE), RequestObjectHelper.getEndOffset(requestObject));
}
@Test
public void getEndOffsetEndNull() {
Assert.assertEquals(new Long(Long.MAX_VALUE), RequestObjectHelper.getEndOffset(null));
}
@Test
public void getEndOffsetStartWithNoEnd() {
JSONObject requestObject = buildJSONObjectFromString("{\"rexster\": { \"offset\": { \"start\":10 }}}");
Assert.assertEquals(new Long(Long.MAX_VALUE), RequestObjectHelper.getEndOffset(requestObject));
}
@Test
public void getEndOffsetNoOffset() {
JSONObject requestObject = buildJSONObjectFromString("{\"rexster\": { \"anyotherproperty\": { \"start\":10, \"end\":100 }}}");
Assert.assertEquals(new Long(Long.MAX_VALUE), RequestObjectHelper.getEndOffset(requestObject));
}
@Test
public void getEndOffsetInvalidOffset() {
JSONObject requestObject = buildJSONObjectFromString("{\"rexster\": { \"offset\": { \"start\":10, \"end\":\"onehundred\" }}}");
Assert.assertEquals(0l, (long) RequestObjectHelper.getEndOffset(requestObject));
}
@Test
public void getEndOffsetValid() {
JSONObject requestObject = buildJSONObjectFromString("{\"rexster\": { \"offset\": { \"start\":10, \"end\":100 }}}");
Assert.assertEquals(100l, (long) RequestObjectHelper.getEndOffset(requestObject));
requestObject = buildJSONObjectFromString("{\"rexster\": { \"offset\": { \"start\":-10, \"end\":10001 }}}");
Assert.assertEquals(10001l, (long) RequestObjectHelper.getEndOffset(requestObject));
}
@Test
public void hasElementPropertiesTrue() {
JSONObject requestObject = buildJSONObjectFromString("{\"_id\": 1, \"name\":\"wally\" }");
Assert.assertTrue(RequestObjectHelper.hasElementProperties(requestObject));
}
@Test
public void hasElementPropertiesFalse() {
JSONObject requestObject = buildJSONObjectFromString("{\"_id\": 1 }");
Assert.assertFalse(RequestObjectHelper.hasElementProperties(requestObject));
}
@Test
public void hasElementPropertiesNullRequestFalse() {
Assert.assertFalse(RequestObjectHelper.hasElementProperties(null));
}
}