Nilesh has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/76013


Change subject: Added unit tests for AbstractEntitySuggesterServlet and 
WebClientRecommender
......................................................................

Added unit tests for AbstractEntitySuggesterServlet and WebClientRecommender

Change-Id: Ie100819e77e8ed0abf5bed844676e2b234252cef
---
M client/pom.xml
A 
client/src/test/java/org/wikimedia/wikibase/entitysuggester/client/recommender/WebClientRecommenderTest.java
A 
client/src/test/java/org/wikimedia/wikibase/entitysuggester/client/servlets/AbstractEntitySuggesterServletTest.java
3 files changed, 201 insertions(+), 0 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikidataEntitySuggester 
refs/changes/13/76013/1

diff --git a/client/pom.xml b/client/pom.xml
index a2252be..ce6dc08 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -58,6 +58,24 @@
             <artifactId>guava</artifactId>
             <version>14.0</version>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.10</version>
+<!--            <scope>test</scope>-->
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-mock</artifactId>
+            <version>2.0.8</version>
+<!--            <scope>test</scope>-->
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <version>2.5.6</version>
+<!--            <scope>test</scope>-->
+        </dependency>
     </dependencies>
     <repositories>
         <repository>
@@ -74,6 +92,12 @@
             <id>cloudera</id>
             
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
         </repository>
+        <repository>
+            <url>http://repo1.maven.org/maven2/</url>
+            <id>junit_4</id>
+            <layout>default</layout>
+            <name>Repository for library Library[junit_4]</name>
+        </repository>
     </repositories>
     <build>
         <plugins>
diff --git 
a/client/src/test/java/org/wikimedia/wikibase/entitysuggester/client/recommender/WebClientRecommenderTest.java
 
b/client/src/test/java/org/wikimedia/wikibase/entitysuggester/client/recommender/WebClientRecommenderTest.java
new file mode 100644
index 0000000..5541293
--- /dev/null
+++ 
b/client/src/test/java/org/wikimedia/wikibase/entitysuggester/client/recommender/WebClientRecommenderTest.java
@@ -0,0 +1,84 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.wikimedia.wikibase.entitysuggester.client.recommender;
+
+import java.util.ArrayList;
+import java.util.List;
+import net.myrrix.client.translating.TranslatedRecommendedItem;
+import 
org.wikimedia.wikibase.entitysuggester.client.recommender.WebClientRecommender;
+import net.myrrix.client.translating.TranslatingRecommender;
+import org.apache.mahout.cf.taste.common.TasteException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import static org.mockito.Mockito.*;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
+
+/**
+ *
+ * @author Nilesh Chakraborty
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class WebClientRecommenderTest {
+
+    @Mock
+    TranslatingRecommender translatingRecommender;
+    @Mock
+    TranslatedRecommendedItem translatedRecommendedItem;
+
+    @Before
+    public void setUp() throws TasteException {
+        doReturn("P67").when(translatedRecommendedItem).getItemID(); // 
Suggested wikibaseProperty
+        doReturn(0.256543f).when(translatedRecommendedItem).getValue(); // 
Relative score for this suggestion
+
+        List< TranslatedRecommendedItem> list = new 
ArrayList<TranslatedRecommendedItem>();
+        list.add(translatedRecommendedItem);
+
+        // return no suggedstions (empty list) or any wikibaseItem ID that's 
not in the dataset
+        doReturn(new 
ArrayList<TranslatedRecommendedItem>()).when(translatingRecommender).recommend(anyString(),
 anyInt());
+
+        // suggest only P67 for the wikibaseItem Q87, as an example
+        doReturn(list).when(translatingRecommender).recommend(eq("Q87"), 
anyInt());
+
+        // suggest only P67 for any anonymous suggestion
+        
doReturn(list).when(translatingRecommender).recommendToAnonymous(any(String[].class),
 anyInt());
+    }
+
+    @Test
+    public void testRecommend() throws TasteException {
+        ArrayList<String> propertyIDList = new ArrayList<String>();
+        propertyIDList.add("P67");
+        propertyIDList.add("P192");
+        AbstractClientRecommender webClientRecommender = new 
WebClientRecommender(propertyIDList, translatingRecommender);
+
+        // Test with a wikibaseItem that is in the Myrrix model
+        List<TranslatedRecommendedItem> suggestions = 
webClientRecommender.recommend("Q87", 10);
+        assertEquals("P67", suggestions.get(0).getItemID());
+        assertEquals(0.256543f, suggestions.get(0).getValue(), 0.001);
+
+        // Test with a wikibaseItem that doesn't exist in the Myrrix model
+        suggestions = webClientRecommender.recommend("Q6835", 10);
+        assertEquals(0, suggestions.size());
+    }
+
+    @Test
+    public void testRecommendAnonymous() throws TasteException {
+        ArrayList<String> propertyIDList = new ArrayList<String>();
+        propertyIDList.add("P67");
+        propertyIDList.add("P192");
+        AbstractClientRecommender webClientRecommender = new 
WebClientRecommender(propertyIDList, translatingRecommender);
+
+        List<TranslatedRecommendedItem> suggestions = 
webClientRecommender.recommendAnonymous(new String[]{"P67", "P78"}, 2);
+        assertEquals("P67", suggestions.get(0).getItemID());
+    }
+
+    @After
+    public void tearDown() {
+    }
+}
diff --git 
a/client/src/test/java/org/wikimedia/wikibase/entitysuggester/client/servlets/AbstractEntitySuggesterServletTest.java
 
b/client/src/test/java/org/wikimedia/wikibase/entitysuggester/client/servlets/AbstractEntitySuggesterServletTest.java
new file mode 100644
index 0000000..34916b6
--- /dev/null
+++ 
b/client/src/test/java/org/wikimedia/wikibase/entitysuggester/client/servlets/AbstractEntitySuggesterServletTest.java
@@ -0,0 +1,93 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.wikimedia.wikibase.entitysuggester.client.servlets;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.ServletException;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import net.myrrix.client.translating.TranslatedRecommendedItem;
+import net.myrrix.client.translating.TranslatingRecommender;
+import org.apache.mahout.cf.taste.common.TasteException;
+import org.junit.*;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.mock.web.MockServletConfig;
+import 
org.wikimedia.wikibase.entitysuggester.client.recommender.WebClientRecommender;
+
+/**
+ *
+ * @author Nilesh Chakraborty
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class AbstractEntitySuggesterServletTest {
+
+    @Mock
+    TranslatingRecommender translatingRecommender;
+    @Mock
+    AbstractEntitySuggesterServlet servlet;
+    @Mock
+    TranslatedRecommendedItem translatedRecommendedItem1;
+    @Mock
+    TranslatedRecommendedItem translatedRecommendedItem2;
+
+    @Before
+    public void setUp() {
+        doReturn("P67").when(translatedRecommendedItem1).getItemID(); // 
Suggested wikibaseProperty
+        doReturn(0.256543f).when(translatedRecommendedItem1).getValue(); // 
Relative score for this suggestion
+        doReturn("P127").when(translatedRecommendedItem2).getItemID();
+        doReturn(0.345637f).when(translatedRecommendedItem2).getValue();
+        doReturn(new MockServletConfig()).when(servlet).getServletConfig();
+    }
+
+    /**
+     * Test of initializeClientRecommender method, of class
+     * AbstractEntitySuggesterServlet.
+     */
+    @Test
+    public void testInitializeClientRecommender() throws TasteException, 
IOException, ServletException {
+        // Setting something as a stub to test later if initialized properly
+        List<TranslatedRecommendedItem> list = new 
ArrayList<TranslatedRecommendedItem>();
+        list.add(translatedRecommendedItem1);
+        // The WebClientRecommender inside the servlet should suggest 
translatedRecommendedItem1, ie. wikibaseProperty P67 always
+        doReturn(list).when(translatingRecommender).recommend(anyString(), 
anyInt());
+
+        ArrayList<String> propertyIDList = new ArrayList<String>();
+        propertyIDList.add("P67");
+        propertyIDList.add("P192");
+        WebClientRecommender webClientRecommender = new 
WebClientRecommender(propertyIDList, translatingRecommender);
+
+        
servlet.getServletConfig().getServletContext().setAttribute("recommender", 
webClientRecommender);;
+        MockHttpServletRequest mockHttpServletRequest = new 
MockHttpServletRequest();
+        servlet.initializeClientRecommender(mockHttpServletRequest);
+
+        WebClientRecommender fromServlet = servlet.getClientRecommender();
+        List<TranslatedRecommendedItem> suggestions = 
webClientRecommender.recommend("Q87", 10);
+        assertEquals("P67", suggestions.get(0).getItemID());
+    }
+
+    /**
+     * Test of output method of class AbstractEntitySuggesterServlet.
+     */
+    @Test
+    public void testOutput() throws IOException {
+        MockHttpServletRequest mockHttpServletRequest = new 
MockHttpServletRequest();
+        MockHttpServletResponse mockHttpServletResponse = new 
MockHttpServletResponse();
+        List<TranslatedRecommendedItem> list = new 
ArrayList<TranslatedRecommendedItem>();
+        list.add(translatedRecommendedItem1);
+        list.add(translatedRecommendedItem2);
+        servlet.output(mockHttpServletRequest, mockHttpServletResponse, list);
+        String responseOutput = mockHttpServletResponse.getContentAsString();
+        assertEquals("[[\"P67\",0.256543],[\"P127\",0.345637]]", 
responseOutput);
+    }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/76013
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie100819e77e8ed0abf5bed844676e2b234252cef
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikidataEntitySuggester
Gerrit-Branch: master
Gerrit-Owner: Nilesh <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to