r1384 - in trunk: wikitty-api/src/test/java/org/nuiton/wikitty wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr
Author: echatellier Date: 2012-01-27 16:02:09 +0100 (Fri, 27 Jan 2012) New Revision: 1384 Url: http://nuiton.org/repositories/revision/wikitty/1384 Log: Move some query test and tree node tests to api module. Removed: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-27 11:38:41 UTC (rev 1383) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/WikittyClientTest.java 2012-01-27 15:02:09 UTC (rev 1384) @@ -31,6 +31,7 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashSet; @@ -51,6 +52,8 @@ import org.nuiton.wikitty.entities.ExtensionFactory; import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.entities.WikittyExtension; +import org.nuiton.wikitty.entities.WikittyGroup; +import org.nuiton.wikitty.entities.WikittyGroupImpl; import org.nuiton.wikitty.entities.WikittyI18n; import org.nuiton.wikitty.entities.WikittyImpl; import org.nuiton.wikitty.entities.WikittyLabel; @@ -59,12 +62,18 @@ import org.nuiton.wikitty.entities.WikittyTreeNodeHelper; import org.nuiton.wikitty.entities.WikittyTreeNodeImpl; import org.nuiton.wikitty.entities.WikittyTypes; +import org.nuiton.wikitty.entities.WikittyUserImpl; import org.nuiton.wikitty.query.FacetSortType; import org.nuiton.wikitty.query.WikittyQuery; import org.nuiton.wikitty.query.WikittyQueryMaker; import org.nuiton.wikitty.query.WikittyQueryParser; import org.nuiton.wikitty.query.WikittyQueryResult; import org.nuiton.wikitty.query.WikittyQueryResultTreeNode; +import org.nuiton.wikitty.query.conditions.Aggregate; +import org.nuiton.wikitty.search.Criteria; +import org.nuiton.wikitty.search.PagedResult; +import org.nuiton.wikitty.search.Search; +import org.nuiton.wikitty.search.TreeNodeResult; import org.nuiton.wikitty.services.WikittyEvent; import org.nuiton.wikitty.test.Category; import org.nuiton.wikitty.test.Product; @@ -1621,4 +1630,656 @@ Assert.assertEquals(17, results1.getTotalResult()); Assert.assertEquals(0, results1.getAll().size()); } + + + + + @Test + public void testQueryMarkerSelectSortAndAggregate() throws Exception { + WikittyExtension ext = new WikittyExtension("Test", + "1.0", // version + WikittyUtil.tagValuesToMap(" version=\"1.0\""), // tag/values + (List)null, + WikittyUtil.buildFieldMapExtension( // building field map + "Numeric number", + "String string", + "Date date")); + Wikitty w1 = new WikittyImpl(); + w1.addExtension(ext); + w1.setField("Test", "number", 5); + w1.setField("Test", "date", WikittyUtil.parseDate("02/05/1975")); + + Wikitty w2 = new WikittyImpl(); + w2.addExtension(ext); + w2.setField("Test", "number", -4); + w2.setField("Test", "date", WikittyUtil.parseDate("19830606")); + + Wikitty w3 = new WikittyImpl(); + w3.addExtension(ext); + w3.setField("Test", "number", 10); + w3.setField("Test", "date", WikittyUtil.parseDate("21/05/2002")); + + Wikitty w4 = new WikittyImpl(); + w4.addExtension(ext); + w4.setField("Test", "number", 1); + w4.setField("Test", "date", WikittyUtil.parseDate("05/01/2012")); + + wikittyClient.store(w1, w2, w3, w4); + + { + WikittyQuery q = new WikittyQueryMaker().select("Test.number").end(); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + } + { + WikittyQuery q = new WikittyQueryMaker().select("Test.number").end() + .addSortDescending(new ElementField("Test", "number")); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + } + { + WikittyQuery q = new WikittyQueryMaker().select("Test.date").end(); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + } + { + WikittyQuery q = new WikittyQueryMaker().select("Test.date").end() + .addSortDescending(new ElementField("Test", "date")); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + } + + // test aggregate + { + WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.AVG).end(); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + Assert.assertEquals("3.0", result.peek()); + } + { + WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.COUNT).end(); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + Assert.assertEquals("4", result.peek()); + } + { + WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MAX).end(); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + Assert.assertEquals("10.0", result.peek()); + } + { + WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MAX).end() + .addSortDescending(new ElementField("Test", "number")); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + Assert.assertEquals("10.0", result.peek()); + } + { + WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MIN).end(); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + Assert.assertEquals("-4.0", result.peek()); + } + { + WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MIN).end() + .addSortDescending(new ElementField("Test", "number")); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + Assert.assertEquals("-4.0", result.peek()); + } + { + WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.SUM).end(); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(q); + System.out.println("q: " + result); + Assert.assertEquals("12.0", result.peek()); + } + + } + + @Test + public void testQueryMakerFacetOnGroup() throws Exception { + // for id for easy debugging + WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1")); + g1.setName("Group1"); + WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2")); + g2.setName("GROUP"); + WikittyGroupImpl g3 = new WikittyGroupImpl(new WikittyImpl("g3")); + g3.setName("Group3"); + WikittyGroupImpl g4 = new WikittyGroupImpl(new WikittyImpl("g4")); + g4.setName("GROUP"); + + wikittyClient.store(g1, g2, g3, g4); + + { + WikittyQuery query = new WikittyQueryMaker() + .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group*") + .end().addFacetField(WikittyGroup.ELEMENT_FIELD_WIKITTYGROUP_NAME); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println("testFacet" + result); + Assert.assertEquals(2, result.size()); + Assert.assertEquals(2, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).size()); + } + { + WikittyQuery query = new WikittyQueryMaker() + .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "GROUP") + .end().addFacetField(WikittyGroup.ELEMENT_FIELD_WIKITTYGROUP_NAME); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println("testFacet" + result); + Assert.assertEquals(2, result.size()); + Assert.assertEquals(1, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).size()); + Assert.assertEquals(2, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).get(0).getCount()); + } + { + WikittyQuery query = new WikittyQueryMaker() + .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "GROUP") + .end().addFacetField(WikittyGroup.ELEMENT_FIELD_WIKITTYGROUP_NAME) + .setLimit(0); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println("testFacet" + result); + Assert.assertEquals(0, result.size()); + Assert.assertEquals(1, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).size()); + Assert.assertEquals(2, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).get(0).getCount()); + } + } + + @Test + public void testQueryMakerEqOnGroup() throws Exception { + // for id for easy debugging + WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1")); + g1.setName("Group1"); + WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2")); + g2.setName("GROUP2"); + + wikittyClient.store(g1, g2); + + { + WikittyQuery query = new WikittyQueryMaker() + .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group1") + .end(); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println("testEq" + result.getAll()); + Assert.assertEquals(1, result.size()); + Assert.assertEquals(g1.getWikittyId(), result.peek()); + } + + { + WikittyQuery query = new WikittyQueryMaker() + .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group*") + .end(); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println("testEq" + result.getAll()); + Assert.assertEquals(1, result.size()); + Assert.assertEquals(g1.getWikittyId(), result.peek()); + } + + { + WikittyQuery query = new WikittyQueryMaker() + .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "G*") + .end(); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println("testEq" + result.getAll()); + Assert.assertEquals(2, result.size()); + } + + { + WikittyQuery query = new WikittyQueryMaker() + .like(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "*oup*") + .end(); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println("testLike" + result); + Assert.assertEquals(2, result.size()); + } + { + WikittyQuery query = new WikittyQueryMaker() + .like("*", "Grou*") + .end(); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println("testLike" + result); + Assert.assertEquals(2, result.size()); + } + { + WikittyQuery query = new WikittyQueryMaker() + .keyword("Gro") + .end(); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println("testKeyword:" + result); + Assert.assertEquals(2, result.size()); + } + + } + + @Test + public void testQueryMarkerSelect() throws Exception { + // for id for easy debugging + WikittyImpl w = new WikittyImpl("g1"); + WikittyGroupImpl g1 = new WikittyGroupImpl(w); + g1.setName("Group1"); + w = new WikittyImpl("g2"); + WikittyGroupImpl g2 = new WikittyGroupImpl(w); + g2.setName("GROUP2"); + + w = new WikittyImpl("l1"); + WikittyLabelImpl l1 = new WikittyLabelImpl(w); + l1.addLabels(g1.getName()); + + wikittyClient.store(g1, g2, l1); + + { + WikittyQuery query = new WikittyQueryMaker() + .select(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME) + .end(); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println(result.getAll()); + Assert.assertEquals(2, result.getTotalResult()); + } + + { + WikittyQuery query = new WikittyQueryMaker() + .and() + .exteq(WikittyGroup.EXT_WIKITTYGROUP) + .containsOne(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME) + .select(WikittyLabel.FQ_FIELD_WIKITTYLABEL_LABELS) + .end(); + + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + + System.out.println(result.getAll()); + Assert.assertEquals(1, result.getTotalResult()); + } + } + + @Test + public void testQueryParserOnTree() throws Exception { + WikittyQueryParser parser = new WikittyQueryParser(); + parser.addAlias("MyAlias\\((.*), (.*)\\)", + "id={SELECT WikittyTreeNode.attachment" + + " WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=$1)}" + + " AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=$2)})}"); + + WikittyQuery q1 = parser.parseQuery( + "WikittyGroup.name=Group* AND MyAlias(OtherTree, OtherBranch)"); + + WikittyQuery q2 = parser.parseQuery( + "WikittyGroup.name=Group* AND id={SELECT WikittyTreeNode.attachment" + + " WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=OtherTree)}" + + " AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=OtherBranch)})}"); + + System.out.println("Q1:" + q1); + System.out.println("Q2:" + q2); + Assert.assertEquals(q2, q1); + + WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1")); + g1.setName("Group1"); + WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2")); + g2.setName("GROUP2"); + WikittyGroupImpl g3 = new WikittyGroupImpl(new WikittyImpl("g3")); + g3.setName("Group3"); + WikittyGroupImpl g4 = new WikittyGroupImpl(new WikittyImpl("g4")); + g4.setName("group4"); + + WikittyTreeNode root = new WikittyTreeNodeImpl(new WikittyImpl("root")); + root.setName("OtherTree"); + + WikittyTreeNode node = new WikittyTreeNodeImpl(new WikittyImpl("node1")); + node.setName("node1"); + node.setParent(root.getWikittyId()); + node.addAttachment(g1.getWikittyId(), g2.getWikittyId()); + + WikittyTreeNode branch = new WikittyTreeNodeImpl(new WikittyImpl("branch")); + branch.setName("OtherBranch"); + branch.setParent(node.getWikittyId()); + + WikittyTreeNode leaf = new WikittyTreeNodeImpl(new WikittyImpl("leaf")); + leaf.setName("leaf"); + leaf.setParent(branch.getWikittyId()); + leaf.addAttachment(g3.getWikittyId(), g4.getWikittyId()); + + wikittyClient.store(g1, g2, g3, g4, root, node, branch, leaf); + + { + WikittyQuery q0 = parser.parseQuery( + "rootNode={SELECT ID WHERE (WikittyTreeNode.name=OtherTree)} AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=OtherBranch)}"); + System.out.println("qO: " + q0); + WikittyQueryResult<String> q0Result = wikittyClient.findAllByQuery(q0); + System.out.println("q0Result:" + q0Result); + } + { + WikittyQuery q0 = parser.parseQuery( + "SELECT WikittyTreeNode.attachment WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=OtherTree)} AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=OtherBranch)})") + .addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT); + System.out.println("qO: " + q0); + WikittyQueryResult<String> q0Result = wikittyClient.findAllByQuery(q0); + System.out.println("q0Result:" + q0Result); + } + { + WikittyQuery q0 = parser.parseQuery( + "SELECT WikittyTreeNode.attachment WHERE (ID={branch, leaf})") + .addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT); + System.out.println("qO: " + q0); + WikittyQueryResult<String> q0Result = wikittyClient.findAllByQuery(q0); + System.out.println("q0Result:" + q0Result); + } + { + WikittyQuery q0 = parser.parseQuery( + "ID={branch, leaf}").addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT); + System.out.println("qO: " + q0); + WikittyQueryResult<String> q0Result = wikittyClient.findAllByQuery(q0); + System.out.println("q0Result:" + q0Result); + } + { + WikittyQuery q0 = parser.parseQuery( + "WikittyGroup.name=Group*"); + System.out.println("q0: " + q0); + WikittyQueryResult<String> q0Result = wikittyClient.findAllByQuery(q0); + System.out.println("q0Result:" + q0Result); + } + + WikittyQueryResult<String> q1Result = wikittyClient.findAllByQuery(q1); + WikittyQueryResult<String> q2Result = wikittyClient.findAllByQuery(q2); + + System.out.println("q2Result: " + q2Result); + + Assert.assertEquals(q2Result.getAll(), q1Result.getAll()); + Assert.assertEquals(1, q2Result.size()); + Assert.assertEquals(Collections.singletonList(g3.getWikittyId()), q2Result.getAll()); + } + + /** + * Test la recherche full text. + */ + @Test + public void testSearchEngineFullTextSearch() { + // for id for easy debugging + WikittyImpl w = new WikittyImpl("label"); + WikittyLabelImpl l = new WikittyLabelImpl(w); + l.addLabels("label"); + w = new WikittyImpl("LABEL"); + WikittyLabelImpl l2 = new WikittyLabelImpl(w); + l2.addLabels("OTHER LABEL"); + w = new WikittyImpl("TATA"); + WikittyUserImpl u = new WikittyUserImpl(w); + u.setLogin("tata"); + + List<Wikitty> toStore = new ArrayList<Wikitty>(); + toStore.add(l.getWikitty()); + toStore.add(l2.getWikitty()); + toStore.add(u.getWikitty()); + + wikittyClient.storeWikitty(toStore); + + { + WikittyQuery query = new WikittyQueryMaker().keyword("lab*").end(); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + System.out.println(result.getAll()); + Assert.assertEquals(2, result.getTotalResult()); + } + { + WikittyQuery query = new WikittyQueryMaker().and() + .exteq(WikittyLabel.EXT_WIKITTYLABEL) + .keyword("*a*").end(); + WikittyQueryResult<String> result = wikittyClient.findAllByQuery(query); + System.out.println(result.getAll()); + Assert.assertEquals(3, result.getTotalResult()); + } + } + + /** + * Test le nombre d'attachment (fichiers attachés) au noeud des arbres. + */ + @Test + public void testCountAttachment() { + List<Wikitty> toStore = new ArrayList<Wikitty>(); + + WikittyImpl w1 = new WikittyImpl("at1"); + WikittyImpl w2 = new WikittyImpl("at2"); + WikittyImpl w3 = new WikittyImpl("at3"); + + WikittyImpl root = new WikittyImpl("the-root"); + WikittyTreeNodeImpl n = new WikittyTreeNodeImpl(root); + n.addAttachment(w1.getId()); + n.addAttachment(w2.getId()); + n.addAttachment(w3.getId()); + + toStore.add(w1); + toStore.add(w2); + toStore.add(w3); + toStore.add(root); + + wikittyClient.storeWikitty(toStore); + toStore.clear(); + + WikittyImpl w11 = new WikittyImpl("at11"); + WikittyImpl w12 = new WikittyImpl("at12"); + WikittyImpl w13 = new WikittyImpl("at13"); + + WikittyImpl node1 = new WikittyImpl("node1"); + n = new WikittyTreeNodeImpl(node1); + n.setParent(root.getId()); + n.addAttachment(w11.getId()); + n.addAttachment(w12.getId()); + n.addAttachment(w13.getId()); + + toStore.add(w11); + toStore.add(w12); + toStore.add(w13); + toStore.add(node1); + + wikittyClient.storeWikitty(toStore); + toStore.clear(); + + WikittyImpl w21 = new WikittyImpl("at21"); + WikittyImpl w22 = new WikittyImpl("at22"); + WikittyImpl w23 = new WikittyImpl("at23"); + WikittyImpl w24 = new WikittyImpl("at24"); + + WikittyImpl node2 = new WikittyImpl("node2"); + n = new WikittyTreeNodeImpl(node2); + n.setParent(root.getId()); + n.addAttachment(w21.getId()); + n.addAttachment(w22.getId()); + n.addAttachment(w23.getId()); + n.addAttachment(w24.getId()); + + toStore.add(w21); + toStore.add(w22); + toStore.add(w23); + toStore.add(w24); + toStore.add(node2); + + wikittyClient.storeWikitty(toStore); + toStore.clear(); + + WikittyImpl w111 = new WikittyImpl("at111"); + WikittyImpl w112 = new WikittyImpl("at112"); + + WikittyImpl node11 = new WikittyImpl("node11"); + n = new WikittyTreeNodeImpl(node11); + n.setParent(node1.getId()); + n.addAttachment(w111.getId()); + n.addAttachment(w112.getId()); + + toStore.add(w111); + toStore.add(w112); + toStore.add(node11); + + wikittyClient.storeWikitty(toStore); + toStore.clear(); + + WikittyQueryResultTreeNode<String> treeNodeResult = wikittyClient.findAllIdTreeNode(root.getId(), 0, true, null); + int val = treeNodeResult.getAttCount(); + Assert.assertEquals(12, val); + + WikittyQueryResultTreeNode<String> children = wikittyClient.findAllIdTreeNode(root.getId(), 1, true, null); + if (log.isDebugEnabled()) { + log.debug("Children : " + children); + } + + Assert.assertEquals(2, children.getChildCount()); + Assert.assertEquals(5, children.getChild(node1.getId()).getAttCount()); + Assert.assertEquals(4, children.getChild(node2.getId()).getAttCount()); + } + + /** + * Test que lors de la reindexation les noeuds indexés le sont + * correctement si leur attachement ne sont pas encore + * présent dans l'index. + * + * Stocke les attachements avant le noeud. + */ + @Test + public void testReindexWithAttachement() { + + // store attachement + Wikitty attach1 = new WikittyImpl("att1"); + Wikitty attach2 = new WikittyImpl("att2"); + List<Wikitty> toStore = new ArrayList<Wikitty>(); + toStore.add(attach1); + toStore.add(attach2); + wikittyClient.storeWikitty(toStore); + + // store first node + Wikitty treeNode = new WikittyImpl(); + WikittyTreeNode treeNodeImpl = new WikittyTreeNodeImpl(treeNode); + treeNodeImpl.setName("root"); + treeNodeImpl.addAttachment(attach1.getId()); + treeNodeImpl.addAttachment(attach2.getId()); + wikittyClient.store(treeNode); + + // set resync + wikittyClient.syncSearchEngine(); + + // search wikitty with attachement + WikittyQuery query = new WikittyQueryMaker().and() + .exteq(WikittyTreeNodeImpl.EXT_WIKITTYTREENODE) + .eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME, "root").end(); + WikittyQueryResult<Wikitty> result = wikittyClient.findAllByQuery(Wikitty.class, query); + Assert.assertEquals(1, result.getTotalResult()); + WikittyTreeNode resultTreeNode = new WikittyTreeNodeImpl(result.get(0)); + Assert.assertEquals(2, resultTreeNode.getAttachment().size()); + } + + /** + * Test que lors de la reindexation les noeuds indexés le sont + * correctement si leur attachement ne sont pas encore + * présent dans l'index. + * + * Stocke le noeud avant les attachements. + */ + @Test + public void testReindexWithAttachementOrdering() { + + // store first node + Wikitty treeNode = new WikittyImpl(); + WikittyTreeNode treeNodeImpl = new WikittyTreeNodeImpl(treeNode); + treeNodeImpl.setName("root"); + treeNode = wikittyClient.store(treeNode); + treeNodeImpl = new WikittyTreeNodeImpl(treeNode); + + // store attachement + Wikitty attach1 = new WikittyImpl("att1"); + Wikitty attach2 = new WikittyImpl("att2"); + treeNodeImpl.addAttachment(attach1.getId()); + treeNodeImpl.addAttachment(attach2.getId()); + List<Wikitty> toStore = new ArrayList<Wikitty>(); + toStore.add(attach1); + toStore.add(attach2); + toStore.add(treeNode); + wikittyClient.storeWikitty(toStore); + + // set resync + wikittyClient.syncSearchEngine(); + + // search wikitty with attachement + WikittyQuery query = new WikittyQueryMaker().and() + .exteq(WikittyTreeNodeImpl.EXT_WIKITTYTREENODE) + .eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME, "root").end(); + WikittyQueryResult<Wikitty> result = wikittyClient.findAllByQuery(Wikitty.class, query); + Assert.assertEquals(1, result.getTotalResult()); + WikittyTreeNode resultTreeNode = new WikittyTreeNodeImpl(result.get(0)); + Assert.assertEquals(2, resultTreeNode.getAttachment().size()); + } + + /** + * Test que lorsqu'un document solr est supprimé, il l'est réelement + * car le proxy gere les retours null pour des documents qui n'existe + * plus dans le base, mais les recherches continue de les trouver. + */ + @Test + public void testSolrDeleteDocument() { + // store new wikitty + Wikitty toDeleteWikitty = new WikittyImpl("wikkitytodelete"); + wikittyClient.store(toDeleteWikitty); + + // look for it + WikittyQuery query = new WikittyQueryMaker().ideq("wikkitytodelete").end(); + Assert.assertEquals(1, wikittyClient.findAllByQuery(Collections.singletonList(query)).get(0).getTotalResult()); + Assert.assertEquals(1, wikittyClient.findAllByQuery(query).getTotalResult()); + + // delete it + wikittyClient.delete(Collections.singleton(toDeleteWikitty.getId())); + + // try to look for it after deletion + Assert.assertEquals(0, wikittyClient.findAllByQuery(query).getTotalResult()); + Assert.assertEquals(0, wikittyClient.findAllByQuery( + Collections.singletonList(query)).get(0).getTotalResult()); + } + + /** + * Test que lorsque plus de 10 documents solr sont supprimés, il le sont + * réelement car par défault, solr limte les resultats à 10. + */ + @Test + public void testSolrDeleteMoreThan10Documents() { + final int NB_DOCS_TO_DELETE = 37; + List<WikittyLabel> toDelete = new ArrayList<WikittyLabel>(); + + for (int i = 0;i < NB_DOCS_TO_DELETE;i++) { + WikittyLabel toDeleteEntity = new WikittyLabelImpl(); + + // store new wikitty + toDeleteEntity.addLabels("toDeleteEntity" + i); + toDelete.add(toDeleteEntity); + } + + // Store all + wikittyClient.store(toDelete); + + // look for it + WikittyQuery query = new WikittyQueryMaker() + .exteq(WikittyLabel.EXT_WIKITTYLABEL).end(); + Assert.assertEquals(NB_DOCS_TO_DELETE, wikittyClient.findAllByQuery( + Collections.singletonList(query)).get(0).getTotalResult()); + Assert.assertEquals(NB_DOCS_TO_DELETE, wikittyClient.findAllByQuery(query).getTotalResult()); + Assert.assertEquals(NB_DOCS_TO_DELETE, wikittyClient.findAllByQuery(WikittyLabel.class, query).getTotalResult()); + + // delete it + wikittyClient.delete(toDelete); + + // try to look for it after deletion + Assert.assertEquals(0, wikittyClient.findAllByQuery( + Collections.singletonList(query)).get(0).getTotalResult()); + Assert.assertEquals(0, wikittyClient.findAllByQuery(query).getTotalResult()); + Assert.assertEquals(0, wikittyClient.findAllByQuery(WikittyLabel.class, query).getTotalResult()); + } } Deleted: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java =================================================================== --- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java 2012-01-27 11:38:41 UTC (rev 1383) +++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrForQueryTest.java 2012-01-27 15:02:09 UTC (rev 1384) @@ -1,463 +0,0 @@ -/* - * #%L - * Wikitty :: wikitty-solr - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 CodeLutin, Benjamin Poussin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ -package org.nuiton.wikitty.storage.solr; - -import java.util.Collections; -import java.util.List; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.Assert; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.nuiton.util.ApplicationConfig; -import org.nuiton.wikitty.WikittyClient; -import org.nuiton.wikitty.WikittyConfig; -import org.nuiton.wikitty.WikittyUtil; -import org.nuiton.wikitty.entities.Wikitty; -import org.nuiton.wikitty.entities.WikittyExtension; -import org.nuiton.wikitty.entities.WikittyGroup; -import org.nuiton.wikitty.entities.WikittyGroupImpl; -import org.nuiton.wikitty.entities.WikittyImpl; -import org.nuiton.wikitty.entities.WikittyLabel; -import org.nuiton.wikitty.entities.WikittyLabelImpl; -import org.nuiton.wikitty.entities.WikittyTreeNode; -import org.nuiton.wikitty.entities.WikittyTreeNodeImpl; -import org.nuiton.wikitty.query.WikittyQuery; -import org.nuiton.wikitty.query.WikittyQueryMaker; -import org.nuiton.wikitty.query.WikittyQueryParser; -import org.nuiton.wikitty.query.WikittyQueryResult; -import org.nuiton.wikitty.query.conditions.Aggregate; -import org.nuiton.wikitty.entities.ElementField; - -/** - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public class WikittySearchEngineSolrForQueryTest { - - /** to use log facility, just put in your code: log.info(\"...\"); */ - static private Log log = LogFactory.getLog(WikittySearchEngineSolrForQueryTest.class); - - protected static WikittyServiceSolr ws; - - protected static ApplicationConfig instance = - WikittyConfig.getConfig("wikitty-config-sample-inmemory.properties"); - - protected WikittyClient client = new WikittyClient(instance, ws); - - @Before - public void deleteAll() throws Exception { - ws.clear(null); - } - - @BeforeClass - public static void initTests() throws Exception { - - SolrTestHelper.initTests(instance); - - ws = new WikittyServiceSolr(instance); - } - - @Test - public void testSelectSortAndAggregate() throws Exception { - WikittyExtension ext = new WikittyExtension("Test", - "1.0", // version - WikittyUtil.tagValuesToMap(" version=\"1.0\""), // tag/values - (List)null, - WikittyUtil.buildFieldMapExtension( // building field map - "Numeric number", - "String string", - "Date date")); - Wikitty w1 = new WikittyImpl(); - w1.addExtension(ext); - w1.setField("Test", "number", 5); - w1.setField("Test", "date", WikittyUtil.parseDate("02/05/1975")); - - Wikitty w2 = new WikittyImpl(); - w2.addExtension(ext); - w2.setField("Test", "number", -4); - w2.setField("Test", "date", WikittyUtil.parseDate("19830606")); - - Wikitty w3 = new WikittyImpl(); - w3.addExtension(ext); - w3.setField("Test", "number", 10); - w3.setField("Test", "date", WikittyUtil.parseDate("21/05/2002")); - - Wikitty w4 = new WikittyImpl(); - w4.addExtension(ext); - w4.setField("Test", "number", 1); - w4.setField("Test", "date", WikittyUtil.parseDate("05/01/2012")); - - client.store(w1, w2, w3, w4); - - { - WikittyQuery q = new WikittyQueryMaker().select("Test.number").end(); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - } - { - WikittyQuery q = new WikittyQueryMaker().select("Test.number").end() - .addSortDescending(new ElementField("Test", "number")); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - } - { - WikittyQuery q = new WikittyQueryMaker().select("Test.date").end(); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - } - { - WikittyQuery q = new WikittyQueryMaker().select("Test.date").end() - .addSortDescending(new ElementField("Test", "date")); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - } - - // test aggregate - { - WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.AVG).end(); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - Assert.assertEquals("3.0", result.peek()); - } - { - WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.COUNT).end(); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - Assert.assertEquals("4", result.peek()); - } - { - WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MAX).end(); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - Assert.assertEquals("10.0", result.peek()); - } - { - WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MAX).end() - .addSortDescending(new ElementField("Test", "number")); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - Assert.assertEquals("10.0", result.peek()); - } - { - WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MIN).end(); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - Assert.assertEquals("-4.0", result.peek()); - } - { - WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.MIN).end() - .addSortDescending(new ElementField("Test", "number")); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - Assert.assertEquals("-4.0", result.peek()); - } - { - WikittyQuery q = new WikittyQueryMaker().select("Test.number", Aggregate.SUM).end(); - WikittyQueryResult<String> result = client.findAllByQuery(q); - System.out.println("q: " + result); - Assert.assertEquals("12.0", result.peek()); - } - - } - - @Test - public void testSelectAggregate() throws Exception { - - } - - @Test - public void testFacet() throws Exception { - // for id for easy debugging - WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1")); - g1.setName("Group1"); - WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2")); - g2.setName("GROUP"); - WikittyGroupImpl g3 = new WikittyGroupImpl(new WikittyImpl("g3")); - g3.setName("Group3"); - WikittyGroupImpl g4 = new WikittyGroupImpl(new WikittyImpl("g4")); - g4.setName("GROUP"); - - client.store(g1, g2, g3, g4); - - { - WikittyQuery query = new WikittyQueryMaker() - .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group*") - .end().addFacetField(WikittyGroup.ELEMENT_FIELD_WIKITTYGROUP_NAME); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println("testFacet" + result); - Assert.assertEquals(2, result.size()); - Assert.assertEquals(2, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).size()); - } - { - WikittyQuery query = new WikittyQueryMaker() - .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "GROUP") - .end().addFacetField(WikittyGroup.ELEMENT_FIELD_WIKITTYGROUP_NAME); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println("testFacet" + result); - Assert.assertEquals(2, result.size()); - Assert.assertEquals(1, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).size()); - Assert.assertEquals(2, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).get(0).getCount()); - } - { - WikittyQuery query = new WikittyQueryMaker() - .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "GROUP") - .end().addFacetField(WikittyGroup.ELEMENT_FIELD_WIKITTYGROUP_NAME) - .setLimit(0); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println("testFacet" + result); - Assert.assertEquals(0, result.size()); - Assert.assertEquals(1, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).size()); - Assert.assertEquals(2, result.getFacets().get(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME).get(0).getCount()); - } - } - - @Test - public void testEq() throws Exception { - // for id for easy debugging - WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1")); - g1.setName("Group1"); - WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2")); - g2.setName("GROUP2"); - - client.store(g1, g2); - - { - WikittyQuery query = new WikittyQueryMaker() - .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group1") - .end(); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println("testEq" + result.getAll()); - Assert.assertEquals(1, result.size()); - Assert.assertEquals(g1.getWikittyId(), result.peek()); - } - - { - WikittyQuery query = new WikittyQueryMaker() - .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "Group*") - .end(); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println("testEq" + result.getAll()); - Assert.assertEquals(1, result.size()); - Assert.assertEquals(g1.getWikittyId(), result.peek()); - } - - { - WikittyQuery query = new WikittyQueryMaker() - .eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "G*") - .end(); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println("testEq" + result.getAll()); - Assert.assertEquals(2, result.size()); - } - - { - WikittyQuery query = new WikittyQueryMaker() - .like(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, "*oup*") - .end(); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println("testLike" + result); - Assert.assertEquals(2, result.size()); - } - { - WikittyQuery query = new WikittyQueryMaker() - .like("*", "Grou*") - .end(); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println("testLike" + result); - Assert.assertEquals(2, result.size()); - } - { - WikittyQuery query = new WikittyQueryMaker() - .keyword("Gro") - .end(); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println("testKeyword:" + result); - Assert.assertEquals(2, result.size()); - } - - } - - @Test - public void testSelect() throws Exception { - // for id for easy debugging - WikittyImpl w = new WikittyImpl("g1"); - WikittyGroupImpl g1 = new WikittyGroupImpl(w); - g1.setName("Group1"); - w = new WikittyImpl("g2"); - WikittyGroupImpl g2 = new WikittyGroupImpl(w); - g2.setName("GROUP2"); - - w = new WikittyImpl("l1"); - WikittyLabelImpl l1 = new WikittyLabelImpl(w); - l1.addLabels(g1.getName()); - - client.store(g1, g2, l1); - - { - WikittyQuery query = new WikittyQueryMaker() - .select(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME) - .end(); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println(result.getAll()); - Assert.assertEquals(2, result.getTotalResult()); - } - - { - WikittyQuery query = new WikittyQueryMaker() - .and() - .exteq(WikittyGroup.EXT_WIKITTYGROUP) - .containsOne(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME) - .select(WikittyLabel.FQ_FIELD_WIKITTYLABEL_LABELS) - .end(); - - WikittyQueryResult<String> result = client.findAllByQuery(query); - - System.out.println(result.getAll()); - Assert.assertEquals(1, result.getTotalResult()); - } - } - - @Test - public void testQueryOnTree() throws Exception { - WikittyQueryParser parser = new WikittyQueryParser(); - parser.addAlias("MyAlias\\((.*), (.*)\\)", - "id={SELECT WikittyTreeNode.attachment" - + " WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=$1)}" - + " AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=$2)})}"); - - WikittyQuery q1 = parser.parseQuery( - "WikittyGroup.name=Group* AND MyAlias(OtherTree, OtherBranch)"); - - WikittyQuery q2 = parser.parseQuery( - "WikittyGroup.name=Group* AND id={SELECT WikittyTreeNode.attachment" - + " WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=OtherTree)}" - + " AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=OtherBranch)})}"); - - System.out.println("Q1:" + q1); - System.out.println("Q2:" + q2); - Assert.assertEquals(q2, q1); - - WikittyGroupImpl g1 = new WikittyGroupImpl(new WikittyImpl("g1")); - g1.setName("Group1"); - WikittyGroupImpl g2 = new WikittyGroupImpl(new WikittyImpl("g2")); - g2.setName("GROUP2"); - WikittyGroupImpl g3 = new WikittyGroupImpl(new WikittyImpl("g3")); - g3.setName("Group3"); - WikittyGroupImpl g4 = new WikittyGroupImpl(new WikittyImpl("g4")); - g4.setName("group4"); - - WikittyTreeNode root = new WikittyTreeNodeImpl(new WikittyImpl("root")); - root.setName("OtherTree"); - - WikittyTreeNode node = new WikittyTreeNodeImpl(new WikittyImpl("node1")); - node.setName("node1"); - node.setParent(root.getWikittyId()); - node.addAttachment(g1.getWikittyId(), g2.getWikittyId()); - - WikittyTreeNode branch = new WikittyTreeNodeImpl(new WikittyImpl("branch")); - branch.setName("OtherBranch"); - branch.setParent(node.getWikittyId()); - - WikittyTreeNode leaf = new WikittyTreeNodeImpl(new WikittyImpl("leaf")); - leaf.setName("leaf"); - leaf.setParent(branch.getWikittyId()); - leaf.addAttachment(g3.getWikittyId(), g4.getWikittyId()); - - client.store(g1, g2, g3, g4, root, node, branch, leaf); - - { - WikittyQuery q0 = parser.parseQuery( - "rootNode={SELECT ID WHERE (WikittyTreeNode.name=OtherTree)} AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=OtherBranch)}"); - System.out.println("qO: " + q0); - WikittyQueryResult<String> q0Result = client.findAllByQuery(q0); - System.out.println("q0Result:" + q0Result); - } - { - WikittyQuery q0 = parser.parseQuery( - "SELECT WikittyTreeNode.attachment WHERE (rootNode={SELECT ID WHERE (WikittyTreeNode.name=OtherTree)} AND pathNode={SELECT ID WHERE (WikittyTreeNode.name=OtherBranch)})") - .addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT); - System.out.println("qO: " + q0); - WikittyQueryResult<String> q0Result = client.findAllByQuery(q0); - System.out.println("q0Result:" + q0Result); - } - { - WikittyQuery q0 = parser.parseQuery( - "SELECT WikittyTreeNode.attachment WHERE (ID={branch, leaf})") - .addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT); - System.out.println("qO: " + q0); - WikittyQueryResult<String> q0Result = client.findAllByQuery(q0); - System.out.println("q0Result:" + q0Result); - } - { - WikittyQuery q0 = parser.parseQuery( - "ID={branch, leaf}").addFacetField(WikittyTreeNode.ELEMENT_FIELD_WIKITTYTREENODE_ATTACHMENT); - System.out.println("qO: " + q0); - WikittyQueryResult<String> q0Result = client.findAllByQuery(q0); - System.out.println("q0Result:" + q0Result); - } - { - WikittyQuery q0 = parser.parseQuery( - "WikittyGroup.name=Group*"); - System.out.println("q0: " + q0); - WikittyQueryResult<String> q0Result = client.findAllByQuery(q0); - System.out.println("q0Result:" + q0Result); - } - - WikittyQueryResult<String> q1Result = client.findAllByQuery(q1); - WikittyQueryResult<String> q2Result = client.findAllByQuery(q2); - - System.out.println("q2Result: " + q2Result); - - Assert.assertEquals(q2Result.getAll(), q1Result.getAll()); - Assert.assertEquals(1, q2Result.size()); - Assert.assertEquals(Collections.singletonList(g3.getWikittyId()), q2Result.getAll()); - } -} Deleted: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java =================================================================== --- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java 2012-01-27 11:38:41 UTC (rev 1383) +++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java 2012-01-27 15:02:09 UTC (rev 1384) @@ -1,369 +0,0 @@ -/* - * #%L - * Wikitty :: wikitty-solr-impl - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -package org.nuiton.wikitty.storage.solr; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.Assert; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.nuiton.util.ApplicationConfig; -import org.nuiton.wikitty.WikittyConfig; -import org.nuiton.wikitty.WikittyProxy; -import org.nuiton.wikitty.entities.*; -import org.nuiton.wikitty.search.Criteria; -import org.nuiton.wikitty.search.PagedResult; -import org.nuiton.wikitty.search.Search; -import org.nuiton.wikitty.search.TreeNodeResult; -import org.nuiton.wikitty.search.operators.Element; -import org.nuiton.wikitty.services.WikittyEvent; - -/** - * Test for class {@link WikittySearchEngineSolr}. - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public class WikittySearchEngineSolrTest { - - /** to use log facility, just put in your code: log.info(\"...\"); */ - private static final Log log = LogFactory.getLog(WikittySearchEngineSolrTest.class); - - protected static WikittyServiceSolr ws; - - protected static ApplicationConfig instance = WikittyConfig.getConfig("wikitty-config-sample-inmemory.properties"); - - protected WikittyProxy proxy = new WikittyProxy(ws); - - @Before - public void deleteAll() throws Exception { - ws.clear(null); - } - - @BeforeClass - public static void initTests() throws Exception { - - SolrTestHelper.initTests(instance); - - ws = new WikittyServiceSolr(instance); - } - - @Test - public void testFullTextSearch() throws Exception { - // for id for easy debugging - WikittyImpl w = new WikittyImpl("label"); - WikittyLabelImpl l = new WikittyLabelImpl(w); - l.addLabels("label"); - w = new WikittyImpl("LABEL"); - WikittyLabelImpl l2 = new WikittyLabelImpl(w); - l2.addLabels("OTHER LABEL"); - w = new WikittyImpl("TATA"); - WikittyUserImpl u = new WikittyUserImpl(w); - u.setLogin("tata"); - - List<Wikitty> toStore = new ArrayList<Wikitty>(); - toStore.add(l.getWikitty()); - toStore.add(l2.getWikitty()); - toStore.add(u.getWikitty()); - - ws.store(null, toStore, false); - - { - Criteria c = Search.query().keyword("lab*").criteria(); - PagedResult<String> result = ws.findAllByCriteria( - null, Collections.singletonList(c)).get(0); - System.out.println(result.getAll()); - Assert.assertEquals(2, result.getNumFound()); - } - { - Criteria c = Search.query().keyword("*a*").criteria(); - PagedResult<String> result = ws.findAllByCriteria( - null, Collections.singletonList(c)).get(0); - System.out.println(result.getAll()); - Assert.assertEquals(3, result.getNumFound()); - } - - } - - @Test - public void testCountAttachment() throws Exception { - List<Wikitty> toStore = new ArrayList<Wikitty>(); - - WikittyImpl w1 = new WikittyImpl("at1"); - WikittyImpl w2 = new WikittyImpl("at2"); - WikittyImpl w3 = new WikittyImpl("at3"); - - WikittyImpl root = new WikittyImpl("the-root"); - WikittyTreeNodeImpl n = new WikittyTreeNodeImpl(root); - n.addAttachment(w1.getId()); - n.addAttachment(w2.getId()); - n.addAttachment(w3.getId()); - - toStore.add(w1); - toStore.add(w2); - toStore.add(w3); - toStore.add(root); - - ws.store(null, toStore, false); - toStore.clear(); - - WikittyImpl w11 = new WikittyImpl("at11"); - WikittyImpl w12 = new WikittyImpl("at12"); - WikittyImpl w13 = new WikittyImpl("at13"); - - WikittyImpl node1 = new WikittyImpl("node1"); - n = new WikittyTreeNodeImpl(node1); - n.setParent(root.getId()); - n.addAttachment(w11.getId()); - n.addAttachment(w12.getId()); - n.addAttachment(w13.getId()); - - toStore.add(w11); - toStore.add(w12); - toStore.add(w13); - toStore.add(node1); - - ws.store(null, toStore, false); - toStore.clear(); - - WikittyImpl w21 = new WikittyImpl("at21"); - WikittyImpl w22 = new WikittyImpl("at22"); - WikittyImpl w23 = new WikittyImpl("at23"); - WikittyImpl w24 = new WikittyImpl("at24"); - - WikittyImpl node2 = new WikittyImpl("node2"); - n = new WikittyTreeNodeImpl(node2); - n.setParent(root.getId()); - n.addAttachment(w21.getId()); - n.addAttachment(w22.getId()); - n.addAttachment(w23.getId()); - n.addAttachment(w24.getId()); - - toStore.add(w21); - toStore.add(w22); - toStore.add(w23); - toStore.add(w24); - toStore.add(node2); - - ws.store(null, toStore, false); - toStore.clear(); - - WikittyImpl w111 = new WikittyImpl("at111"); - WikittyImpl w112 = new WikittyImpl("at112"); - - WikittyImpl node11 = new WikittyImpl("node11"); - n = new WikittyTreeNodeImpl(node11); - n.setParent(node1.getId()); - n.addAttachment(w111.getId()); - n.addAttachment(w112.getId()); - - toStore.add(w111); - toStore.add(w112); - toStore.add(node11); - - ws.store(null, toStore, false); - toStore.clear(); - - TreeNodeResult<String> treeNodeResult = - ws.getSearchEngine().findAllChildrenCount( - null, root.getId(), 0, true, (Criteria)null); - int val = treeNodeResult.getAttCount(); -// Integer val = ws.getSearchEngine().findNodeCount(null, root, null); - Assert.assertEquals(12, val); - -// Map<WikittyTreeNode, Integer> children = ws.findTreeNode(null, root.getId(), null); -// Map<String, Integer> children = ws.getSearchEngine().findAllChildrenCount(null, root, null); - TreeNodeResult<String> children = - ws.getSearchEngine().findAllChildrenCount( - null, root.getId(), 1, true, (Criteria)null); - if (log.isDebugEnabled()) { - log.debug("Children : " + children); - } - - Assert.assertEquals(2, children.getChildCount()); - Assert.assertEquals(5, children.getChild(node1.getId()).getAttCount()); - Assert.assertEquals(4, children.getChild(node2.getId()).getAttCount()); - } - - /** - * Test que lors de la reindexation les noeuds indexés le sont - * correctement si leur attachement ne sont pas encore - * présent dans l'index. - * - * Stocke les attachements avant le noeud. - */ - @Test - public void testReindexWithAttachement() { - - // store attachement - Wikitty attach1 = new WikittyImpl("att1"); - Wikitty attach2 = new WikittyImpl("att2"); - Collection<Wikitty> toStore = new ArrayList<Wikitty>(); - toStore.add(attach1); - toStore.add(attach2); - ws.store(null, toStore, false); - - // store first node - Wikitty treeNode = new WikittyImpl(); - WikittyTreeNode treeNodeImpl = new WikittyTreeNodeImpl(treeNode); - treeNodeImpl.setName("root"); - treeNodeImpl.addAttachment(attach1.getId()); - treeNodeImpl.addAttachment(attach2.getId()); - ws.store(null, Collections.singleton(treeNode), false); - - // set resync - ws.syncSearchEngine(null); - - // search wikitty with attachement - Search query = Search.query(); - query.eq(Element.ELT_EXTENSION, WikittyTreeNodeImpl.EXT_WIKITTYTREENODE); - query.eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME, "root"); - PagedResult<Wikitty> results = proxy.findAllByCriteria(query.criteria()); - Assert.assertEquals(1, results.size()); - WikittyTreeNode resultTreeNode = new WikittyTreeNodeImpl(results.get(0)); - Assert.assertEquals(2, resultTreeNode.getAttachment().size()); - } - - /** - * Test que lors de la reindexation les noeuds indexés le sont - * correctement si leur attachement ne sont pas encore - * présent dans l'index. - * - * Stocke le noeud avant les attachements. - */ - @Test - public void testReindexWithAttachementOrdering() { - - // store first node - Wikitty treeNode = new WikittyImpl(); - WikittyTreeNode treeNodeImpl = new WikittyTreeNodeImpl(treeNode); - treeNodeImpl.setName("root"); - WikittyEvent event = ws.store(null, Collections.singleton(treeNode), false); - treeNode = event.getWikitties().get(treeNode.getId()); - treeNodeImpl = new WikittyTreeNodeImpl(treeNode); - - // store attachement - Wikitty attach1 = new WikittyImpl("att1"); - Wikitty attach2 = new WikittyImpl("att2"); - treeNodeImpl.addAttachment(attach1.getId()); - treeNodeImpl.addAttachment(attach2.getId()); - Collection<Wikitty> toStore = new ArrayList<Wikitty>(); - toStore.add(attach1); - toStore.add(attach2); - toStore.add(treeNode); - ws.store(null, toStore, false); - - // set resync - ws.syncSearchEngine(null); - - // search wikitty with attachement - Search query = Search.query(); - query.eq(Element.ELT_EXTENSION, WikittyTreeNodeImpl.EXT_WIKITTYTREENODE); - query.eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME, "root"); - PagedResult<Wikitty> results = proxy.findAllByCriteria(query.criteria()); - Assert.assertEquals(1, results.size()); - WikittyTreeNode resultTreeNode = new WikittyTreeNodeImpl(results.get(0)); - Assert.assertEquals(2, resultTreeNode.getAttachment().size()); - } - - /** - * Test que lorsqu'un document solr est supprimé, il l'est réelement - * car le proxy gere les retours null pour des documents qui n'existe - * plus dans le base, mais les recherches continue de les trouver. - */ - @Test - public void testSolrDeleteDocument() { - // store new wikitty - Wikitty toDeleteWikitty = new WikittyImpl("wikkitytodelete"); - ws.store(null, Collections.singleton(toDeleteWikitty), false); - // look for it - Search query = Search.query(); - query.eq(Element.ELT_ID, "wikkitytodelete"); - Assert.assertEquals(1, ws.findAllByCriteria(null, - Collections.singletonList(query.criteria())).get(0).getNumFound()); - Assert.assertEquals(1, proxy.findAllByCriteria(query.criteria()).getNumFound()); - - // delete it - ws.delete(null, Collections.singleton(toDeleteWikitty.getId())); - - // try to look for it after deletion - Assert.assertEquals(0, proxy.findAllByCriteria(query.criteria()).getNumFound()); - Assert.assertEquals(0, ws.findAllByCriteria(null, - Collections.singletonList(query.criteria())).get(0).getNumFound()); - } - - // Nombre of iteration for test delete - public static final int NB_DOCS_TO_DELETE = 17; - - /** - * Test que lorsque plus de 10 documents solr sont supprimés, il le sont réelement - * car par défault, solr limte les resultats à 10 - * - * @see - */ - @Test - public void testSolrDeleteMoreThan10Documents() { - - List<WikittyLabel> toDelete = new ArrayList<WikittyLabel>(); - - for (int i = 0;i < NB_DOCS_TO_DELETE;i++) { - WikittyLabel toDeleteEntity = new WikittyLabelImpl(); - - // store new wikitty - toDeleteEntity.addLabels("toDeleteEntity" + i); - toDelete.add(toDeleteEntity); - } - - // Store all - proxy.store(toDelete); - - // look for it - Search query = Search.query(); - query.eq(Element.ELT_EXTENSION, WikittyLabel.EXT_WIKITTYLABEL); - Assert.assertEquals(NB_DOCS_TO_DELETE, ws.findAllByCriteria(null, - Collections.singletonList(query.criteria())).get(0).getNumFound()); - Assert.assertEquals(NB_DOCS_TO_DELETE, proxy.findAllByCriteria(query.criteria()).getNumFound()); - Assert.assertEquals(NB_DOCS_TO_DELETE, proxy.findAllByCriteria(WikittyLabel.class, query.criteria()).getNumFound()); - - // delete it - proxy.delete(toDelete); - - // try to look for it after deletion - Assert.assertEquals(0, proxy.findAllByCriteria(query.criteria()).getNumFound()); - Assert.assertEquals(0, ws.findAllByCriteria(null, - Collections.singletonList(query.criteria())).get(0).getNumFound()); - Assert.assertEquals(0, proxy.findAllByCriteria(WikittyLabel.class, query.criteria()).size()); - } -}
participants (1)
-
echatellier@users.nuiton.org