Github user dsmiley commented on a diff in the pull request:
https://github.com/apache/lucene-solr/pull/410#discussion_r200871822
--- Diff:
solr/core/src/test/org/apache/solr/update/TestNestedUpdateProcessor.java ---
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.update;
+
+import java.util.List;
+
+import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.update.processor.NestedUpdateProcessorFactory;
+import org.apache.solr.update.processor.UpdateRequestProcessor;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class TestNestedUpdateProcessor extends SolrTestCaseJ4 {
+
+ private static final char PATH_SEP_CHAR = '/';
+ private static final String[] childrenIds = { "2", "3" };
+ private static final String grandChildId = "4";
+ private static final String jDoc = "{\n" +
+ " \"add\": {\n" +
+ " \"doc\": {\n" +
+ " \"id\": \"1\",\n" +
+ " \"children\": [\n" +
+ " {\n" +
+ " \"id\": \"2\",\n" +
+ " \"foo_s\": \"Yaz\"\n" +
+ " \"grandChild\": \n" +
+ " {\n" +
+ " \"id\": \""+ grandChildId + "\",\n" +
+ " \"foo_s\": \"Jazz\"\n" +
+ " },\n" +
+ " },\n" +
+ " {\n" +
+ " \"id\": \"3\",\n" +
+ " \"foo_s\": \"Bar\"\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " }\n" +
+ "}";
+
+ private static final String noIdChildren = "{\n" +
+ " \"add\": {\n" +
+ " \"doc\": {\n" +
+ " \"id\": \"1\",\n" +
+ " \"children\": [\n" +
+ " {\n" +
+ " \"foo_s\": \"Yaz\"\n" +
+ " \"grandChild\": \n" +
+ " {\n" +
+ " \"foo_s\": \"Jazz\"\n" +
+ " },\n" +
+ " },\n" +
+ " {\n" +
+ " \"foo_s\": \"Bar\"\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " }\n" +
+ "}";
+
+ private static final String errDoc = "{\n" +
+ " \"add\": {\n" +
+ " \"doc\": {\n" +
+ " \"id\": \"1\",\n" +
+ " \"children" + PATH_SEP_CHAR + "a\": [\n" +
+ " {\n" +
+ " \"id\": \"2\",\n" +
+ " \"foo_s\": \"Yaz\"\n" +
+ " \"grandChild\": \n" +
+ " {\n" +
+ " \"id\": \""+ grandChildId + "\",\n" +
+ " \"foo_s\": \"Jazz\"\n" +
+ " },\n" +
+ " },\n" +
+ " {\n" +
+ " \"id\": \"3\",\n" +
+ " \"foo_s\": \"Bar\"\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " }\n" +
+ "}";
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ @BeforeClass
+ public static void beforeClass() throws Exception {
+ initCore("solrconfig-update-processor-chains.xml", "schema15.xml");
+ }
+
+ @Before
+ public void before() throws Exception {
+ assertU(delQ("*:*"));
+ assertU(commit());
+ }
+
+ @Test
+ public void testDeeplyNestedURPGrandChild() throws Exception {
+ indexSampleData(jDoc);
+
+ assertJQ(req("q", IndexSchema.PATH_FIELD_NAME + ":*" + PATH_SEP_CHAR +
"grandChild",
+ "fl","*",
+ "sort","id desc",
+ "wt","json"),
+ "/response/docs/[0]/id=='" + grandChildId + "'");
+ }
+
+ @Test
+ public void testDeeplyNestedURPChildren() throws Exception {
+ final String[] childrenTests = {"/response/docs/[0]/id=='" +
childrenIds[0] + "'", "/response/docs/[1]/id=='" + childrenIds[1] + "'"};
+ indexSampleData(jDoc);
+
+ assertJQ(req("q", IndexSchema.PATH_FIELD_NAME + ":children",
+ "fl","*",
+ "sort","id asc",
+ "wt","json"),
+ childrenTests);
+ }
+
+ @Test
+ public void testDeeplyNestedURPChildrenWoId() throws Exception {
+ final String parentId = "3";
+ final String childKey = "grandChild";
+ final String expectedId = parentId + PATH_SEP_CHAR + childKey +
PATH_SEP_CHAR + "0";
+ SolrInputDocument noIdChildren = sdoc("id", "1", "children",
sdocs(sdoc("id", "2", "name_s", "Yaz"), sdoc("id", parentId, "name_s", "Jazz",
childKey, sdoc("names_s", "Gaz"))));
+ UpdateRequestProcessor nestedUpdate = new
NestedUpdateProcessorFactory().getInstance(req(), null, null);
+ AddUpdateCommand cmd = new AddUpdateCommand(req());
+ cmd.solrDoc = noIdChildren;
+ nestedUpdate.processAdd(cmd);
+ cmd.clear();
+ List children = (List) noIdChildren.get("children").getValues();
+ SolrInputDocument idLessChild =
(SolrInputDocument)((SolrInputDocument)
children.get(1)).get(childKey).getValue();
+ assertTrue("Id less child did not get an Id",
idLessChild.containsKey("id"));
--- End diff --
come to think of it, in this whole test file I don't see a test for what
the `_NEST_PATH_` field is supposed to look like? That's kinda important! If
you modify this to test via doc.toString it'd cover it. Granted
`testDeeplyNestedURPChildren()` or some new method that ought to test this as
well.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]