You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2020/11/10 19:49:31 UTC

[jspwiki] 03/04: JSPWIKI-1131: Ensure latest version of page gets indexed, so changes using VersioningFileProvider get returned by searches

This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit b5dda3813c66820fdd29e43a593ea178ee837f03
Author: juanpablo <ju...@apache.org>
AuthorDate: Tue Nov 10 20:47:04 2020 +0100

    JSPWIKI-1131: Ensure latest version of page gets indexed, so changes using VersioningFileProvider get returned by searches
---
 .../apache/wiki/tasks/pages/SaveWikiPageTask.java  |  2 +
 .../wiki/tasks/pages/SaveWikiPageTaskTest.java     | 93 ++++++++++++++++++++++
 2 files changed, 95 insertions(+)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java b/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java
index ffa7947..ef3252c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tasks/pages/SaveWikiPageTask.java
@@ -21,6 +21,7 @@ package org.apache.wiki.tasks.pages;
 import org.apache.wiki.api.core.Context;
 import org.apache.wiki.api.core.Page;
 import org.apache.wiki.api.exceptions.WikiException;
+import org.apache.wiki.api.providers.PageProvider;
 import org.apache.wiki.filters.FilterManager;
 import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.render.RenderingManager;
@@ -64,6 +65,7 @@ public class SaveWikiPageTask extends Task {
         context.getEngine().getManager( FilterManager.class ).doPostSaveFiltering( context, proposedText );
 
         // Reindex saved page
+        page.setVersion( PageProvider.LATEST_VERSION );
         context.getEngine().getManager( SearchManager.class ).reindexPage( page );
 
         return Outcome.STEP_COMPLETE;
diff --git a/jspwiki-main/src/test/java/org/apache/wiki/tasks/pages/SaveWikiPageTaskTest.java b/jspwiki-main/src/test/java/org/apache/wiki/tasks/pages/SaveWikiPageTaskTest.java
new file mode 100644
index 0000000..15391a9
--- /dev/null
+++ b/jspwiki-main/src/test/java/org/apache/wiki/tasks/pages/SaveWikiPageTaskTest.java
@@ -0,0 +1,93 @@
+/*
+    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.wiki.tasks.pages;
+
+import org.apache.wiki.TestEngine;
+import org.apache.wiki.api.core.Context;
+import org.apache.wiki.api.core.Page;
+import org.apache.wiki.api.search.SearchResult;
+import org.apache.wiki.api.spi.Wiki;
+import org.apache.wiki.search.SearchManager;
+import org.apache.wiki.workflow.Outcome;
+import org.apache.wiki.workflow.WorkflowManager;
+import org.awaitility.Awaitility;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.concurrent.Callable;
+
+import static org.apache.wiki.TestEngine.with;
+
+public class SaveWikiPageTaskTest {
+
+    @Test
+    public void testSaveWikiPageTask() throws Exception {
+        final TestEngine engine = TestEngine.build( with( "jspwiki.lucene.initialdelay", "0" ),
+                                                    with( "jspwiki.lucene.indexdelay", "1" ) );
+        final String pageName = "TestSaveWikiPageTestPage";
+        final Page page = Wiki.contents().page( engine, pageName );
+        engine.saveText( pageName, "initial text on first revision" );
+        final Context context = Wiki.context().create( engine, engine.newHttpRequest(), page );
+        final SaveWikiPageTask task = new SaveWikiPageTask();
+        task.setWorkflow( 1, new HashMap<>() );
+        task.getWorkflowContext().put( WorkflowManager.WF_WP_SAVE_FACT_PROPOSED_TEXT, "correct horse battery staple" );
+        final Collection< SearchResult > res = new ArrayList<>();
+
+        Assertions.assertEquals( Outcome.STEP_COMPLETE, task.execute( context ) );
+        Awaitility.await( "ensure page gets indexed" ).until( findsResultsFor( context, res, "horse" ) );
+        Assertions.assertEquals( 1, res.size(), "no pages found" );
+        Assertions.assertEquals( pageName, res.iterator().next().getPage().getName(), "page" );
+    }
+
+    @Test
+    public void testSaveWikiPageTaskWithVersioningFileProvider() throws Exception {
+        final TestEngine engine = TestEngine.build( with( "jspwiki.pageProvider", "VersioningFileProvider" ),
+                                                    with( "jspwiki.lucene.initialdelay", "0" ),
+                                                    with( "jspwiki.lucene.indexdelay", "1" ) );
+        final String pageName = "TestSaveWikiPageTestPageWithVersioningFileProvider";
+        final Page page = Wiki.contents().page( engine, pageName );
+        engine.saveText( pageName, "initial text on first revision" );
+        final Context context = Wiki.context().create( engine, engine.newHttpRequest(), page );
+        final SaveWikiPageTask task = new SaveWikiPageTask();
+        task.setWorkflow( 1, new HashMap<>() );
+        task.getWorkflowContext().put( WorkflowManager.WF_WP_SAVE_FACT_PROPOSED_TEXT,
+                                       "It is based on ties of history, culture, language, ethnicity, kinship and geography" );
+        final Collection< SearchResult > res = new ArrayList<>();
+
+        Assertions.assertEquals( Outcome.STEP_COMPLETE, task.execute( context ) );
+        Awaitility.await( "ensure latest version of page gets indexed" ).until( findsResultsFor( context, res, "kinship" ) );
+        Assertions.assertEquals( 1, res.size(), "no pages found" );
+        Assertions.assertEquals( pageName, res.iterator().next().getPage().getName(), "page" );
+    }
+
+    Callable< Boolean > findsResultsFor( final Context context, final Collection< SearchResult > res, final String text ) {
+        return () -> {
+            final Collection< SearchResult > search = context.getEngine().getManager( SearchManager.class ).findPages( text, context );
+            if( search != null && search.size() > 0 ) {
+                res.addAll( search );
+                return true;
+            }
+            return false;
+        };
+    }
+
+}