@Test public void testNoReturnValue() throws Exception { final String fun = "function(doc) { }"; final DocumentConverter converter = new DocumentConverter(context, view(fun)); final Collection<Document> result = converter.convert(doc("{_id:\"hi\"}"), settings(), null); assertThat(result.size(), is(0)); }
@Test public void testRuntimeException() throws Exception { final DocumentConverter converter = new DocumentConverter(context, view("function(doc) {throw {bad : \"stuff\"}}")); final Collection<Document> result = converter.convert(doc("{_id:\"hello\"}"), settings(), null); assertThat(result.size(), is(0)); }
@Test public void testUndefinedReturn() throws Exception { final DocumentConverter converter = new DocumentConverter(context, view("function(doc) {return doc.nope;}")); final Collection<Document> result = converter.convert(doc("{_id:\"hello\"}"), settings(), null); assertThat(result.size(), is(0)); }
@Test public void testSingleDocumentReturn() throws Exception { final DocumentConverter converter = new DocumentConverter(context, view("function(doc) {return new Document();}")); final Collection<Document> result = converter.convert(doc("{_id:\"hello\"}"), settings(), null); assertThat(result.size(), is(1)); assertThat(result.iterator().next().get("_id"), is("hello")); }
@Test public void testConditionalOnNulls() throws Exception { final String fun = "function(doc) { if (doc.foo && doc.bar) { return new Document(); }; return null; }"; final DocumentConverter converter = new DocumentConverter(context, view(fun)); final Collection<Document> result = converter.convert(doc("{_id:\"hi\", foo: null, bar: null}"), settings(), null); assertThat(result.size(), is(0)); }
@Test public void testParseInt() throws Exception { final String fun = "function(doc) { var ret=new Document(); ret.add(parseInt(\"12.5\"), {type:\"int\", field:\"num\"}); return ret; }"; final DocumentConverter converter = new DocumentConverter(context, view(fun)); final Collection<Document> result = converter.convert(doc("{_id:\"hi\"}"), settings(), null); assertThat(result.size(), is(1)); assertThat(result.iterator().next().getFieldable("num"), is(NumericField.class)); }
@Test public void testNullValue() throws Exception { final String fun = "function(doc) { var ret=new Document(); ret.add(doc.foo); return ret; }"; final DocumentConverter converter = new DocumentConverter(context, view(fun)); final Collection<Document> result = converter.convert(doc("{_id:\"hi\", foo:null}"), settings(), null); assertThat(result.size(), is(1)); assertThat(result.iterator().next().get("foo"), is(nullValue())); }
@Test public void testNullAddsAreIgnored() throws Exception { final DocumentConverter converter = new DocumentConverter( context, view("function(doc) {var ret=new Document(); ret.add(doc.nope); return ret;}")); final Collection<Document> result = converter.convert(doc("{_id:\"hello\"}"), settings(), null); assertThat(result.size(), is(1)); }
@Test public void testAdd() throws Exception { final DocumentConverter converter = new DocumentConverter( context, view("function(doc) {var ret=new Document(); ret.add(doc.key); return ret;}")); final Collection<Document> result = converter.convert(doc("{_id:\"hello\", key:\"value\"}"), settings(), null); assertThat(result.size(), is(1)); assertThat(result.iterator().next().get(Constants.DEFAULT_FIELD), is("value")); }
@Test public void testDefaultValue() throws Exception { final String fun = "function(doc) { var ret=new Document(); ret.add(doc['arr'].join(' ')); return ret; }"; final DocumentConverter converter = new DocumentConverter(context, view(fun)); final Collection<Document> result = converter.convert(doc("{_id:\"hi\", arr:[\"1\",\"2\"]}"), settings(), null); assertThat(result.size(), is(1)); assertThat(result.iterator().next().get("default"), is("1 2")); }
@Test public void testDateObject2() throws Exception { final String fun = "function(doc) { var ret=new Document(); ret.add(new Date(\"January 6, 1972 16:05:00\"), {type:\"date\", field:\"num\"}); return ret; }"; final DocumentConverter converter = new DocumentConverter(context, view(fun)); final Collection<Document> result = converter.convert(doc("{_id:\"hi\"}"), settings(), null); assertThat(result.size(), is(1)); assertThat(result.iterator().next().getFieldable("num"), is(NumericField.class)); assertThat( (Long) ((NumericField) result.iterator().next().getFieldable("num")).getNumericValue(), is(63561900000L)); }
@Test public void testForLoopOverObject() throws Exception { final DocumentConverter converter = new DocumentConverter( context, view( "function(doc) {var ret=new Document(); for (var key in doc) { ret.add(doc[key]); } return ret; }")); final Collection<Document> result = converter.convert(doc("{_id:\"hello\", key:\"value\"}"), settings(), null); assertThat(result.size(), is(1)); assertThat(result.iterator().next().get("_id"), is("hello")); assertThat(result.iterator().next().getValues(Constants.DEFAULT_FIELD)[0], is("hello")); assertThat(result.iterator().next().getValues(Constants.DEFAULT_FIELD)[1], is("value")); }
@Test public void testForEverything() throws Exception { final DocumentConverter converter = new DocumentConverter( context, view( "function(doc) {var ret=new Document(); " + "function idx(obj) {for (var key in obj) " + "{switch (typeof obj[key]) {case 'object':idx(obj[key]); break; " + "case 'function': break; default: ret.add(obj[key]); break;} } }; idx(doc); return ret; }")); final Collection<Document> result = converter.convert( doc("{_id:\"hello\", l1: { l2: {l3:[\"v3\", \"v4\"]}}}"), settings(), null); assertThat(result.iterator().next().getValues(Constants.DEFAULT_FIELD)[0], is("hello")); assertThat(result.iterator().next().getValues(Constants.DEFAULT_FIELD)[1], is("v3")); assertThat(result.iterator().next().getValues(Constants.DEFAULT_FIELD)[2], is("v4")); }
@Test(expected = EvaluatorException.class) public void testBadCode() throws Exception { final DocumentConverter converter = new DocumentConverter(context, view("function(doc) { if (doc.) return null; }")); converter.convert(doc("{_id:\"hello\"}"), settings(), null); }