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