Skip to content

Commit 57d2ab2

Browse files
authored
Merge pull request #26 from WaltonG/issue-25-write-tests-for-available-functionalities
Write unit tests for available functionalities
2 parents fb56fb1 + 74e0b11 commit 57d2ab2

File tree

8 files changed

+479
-15
lines changed

8 files changed

+479
-15
lines changed

pom.xml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -162,18 +162,4 @@
162162
</dependency>
163163
</dependencies>
164164

165-
<!-- enabled to access our snapshots of Wikidata-Toolkit -->
166-
<repositories>
167-
<repository>
168-
<id>snapshots</id>
169-
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
170-
<releases>
171-
<enabled>false</enabled>
172-
</releases>
173-
<snapshots>
174-
<enabled>true</enabled>
175-
</snapshots>
176-
</repository>
177-
</repositories>
178-
179165
</project>

src/main/java/org/openrefine/extensions/sparql/utils/SPARQLQueryResultPreviewReader.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,4 +182,8 @@ static private void setProgress(ImportingJob job, String querySource, int percen
182182
job.setProgress(percent, "Reading " + querySource);
183183
}
184184

185+
public List<String> getColumns() {
186+
return columns;
187+
}
188+
185189
}

src/main/java/org/openrefine/extensions/sparql/utils/SPARQLQueryResultViewReader.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,4 +182,8 @@ static private void setProgress(ImportingJob job, String querySource, int percen
182182
job.setProgress(percent, "Reading " + querySource);
183183
}
184184

185+
public List<String> getColumns() {
186+
return columns;
187+
}
188+
185189
}

src/test/conf/tests.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</run>
99
</groups>
1010
<packages>
11-
<package name="org.openrefine.extensions.sparql.*" />
11+
<package name="org.openrefine.sparql.*" />
1212
</packages>
1313
</test>
1414
</suite>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.openrefine.sparql.utils;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.nio.file.Files;
6+
import java.nio.file.Path;
7+
8+
import javax.servlet.ServletException;
9+
import javax.servlet.http.HttpServletRequest;
10+
import javax.servlet.http.HttpServletResponse;
11+
12+
import com.google.refine.RefineServlet;
13+
import com.google.refine.commands.Command;
14+
15+
public class RefineServletStub extends RefineServlet {
16+
17+
private static File tempDir = null;
18+
19+
// requirement of extending HttpServlet, not required for testing
20+
private static final long serialVersionUID = 1L;
21+
22+
public void wrapService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
23+
super.service(request, response);
24+
}
25+
26+
public String wrapGetCommandName(HttpServletRequest request) {
27+
return super.getCommandKey(request);
28+
}
29+
30+
@Override
31+
public File getTempDir() {
32+
if (tempDir == null) {
33+
try {
34+
Path tempDirPath = Files.createTempDirectory("refine-test-dir");
35+
tempDir = tempDirPath.toFile();
36+
tempDir.deleteOnExit();
37+
} catch (IOException e) {
38+
throw new RuntimeException("Failed to create temp directory", e);
39+
}
40+
}
41+
return tempDir;
42+
}
43+
44+
// -------------------helper methods--------------
45+
/**
46+
* Helper method for inserting a mock object
47+
*
48+
* @param commandName
49+
* @param command
50+
*/
51+
public void insertCommand(String commandName, Command command) {
52+
registerOneCommand("core/" + commandName, command);
53+
}
54+
55+
/**
56+
* Helper method for clearing up after testing
57+
*
58+
* @param commandName
59+
*/
60+
public void removeCommand(String commandName) {
61+
unregisterCommand("core/" + commandName);
62+
}
63+
}
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
2+
package org.openrefine.sparql.utils;
3+
4+
import static org.mockito.Mockito.when;
5+
6+
import java.io.File;
7+
import java.io.IOException;
8+
import java.io.PrintWriter;
9+
import java.io.StringWriter;
10+
11+
import javax.servlet.ServletException;
12+
import javax.servlet.http.HttpServletRequest;
13+
import javax.servlet.http.HttpServletResponse;
14+
15+
import org.mockito.Mock;
16+
import org.mockito.MockitoAnnotations;
17+
import org.openrefine.extensions.sparql.utils.SPARQLImportingController;
18+
import org.testng.Assert;
19+
import org.testng.annotations.AfterMethod;
20+
import org.testng.annotations.BeforeMethod;
21+
import org.testng.annotations.Test;
22+
23+
import com.fasterxml.jackson.databind.node.ObjectNode;
24+
import com.google.refine.ProjectManager;
25+
import com.google.refine.ProjectMetadata;
26+
import com.google.refine.RefineServlet;
27+
import com.google.refine.importing.ImportingJob;
28+
import com.google.refine.importing.ImportingManager;
29+
import com.google.refine.io.FileProjectManager;
30+
import com.google.refine.model.ModelException;
31+
import com.google.refine.model.Project;
32+
import com.google.refine.util.ParsingUtilities;
33+
34+
public class SPARQLImportingControllerTest {
35+
36+
private static final String JSON_OPTION = "{\"mode\":\"row-based\"}}";
37+
38+
@Mock
39+
private HttpServletRequest request;
40+
41+
@Mock
42+
private HttpServletResponse response;
43+
44+
// dependencies
45+
private Project project;
46+
private ProjectMetadata metadata;
47+
private ImportingJob job;
48+
private RefineServlet servlet;
49+
50+
// System under test
51+
private SPARQLImportingController SUT = null;
52+
53+
public static File createTempDirectory(String name)
54+
throws IOException {
55+
File dir = File.createTempFile(name, "");
56+
dir.delete();
57+
dir.mkdir();
58+
return dir;
59+
}
60+
61+
@BeforeMethod
62+
public void setUp() throws IOException, ModelException {
63+
64+
MockitoAnnotations.initMocks(this);
65+
66+
File dir = createTempDirectory("OR_SPARQLExtension_Test_WorkspaceDir");
67+
FileProjectManager.initialize(dir);
68+
69+
servlet = new RefineServlet();
70+
ImportingManager.initialize(servlet);
71+
project = new Project();
72+
metadata = new ProjectMetadata();
73+
74+
metadata.setName("SPARQL Import Test Project");
75+
ProjectManager.singleton.registerProject(project, metadata);
76+
SUT = new SPARQLImportingController();
77+
78+
}
79+
80+
@AfterMethod
81+
public void tearDown() {
82+
SUT = null;
83+
request = null;
84+
response = null;
85+
project = null;
86+
metadata = null;
87+
job = null;
88+
}
89+
90+
@Test
91+
public void testDoGet() {
92+
StringWriter sw = new StringWriter();
93+
PrintWriter pw = new PrintWriter(sw);
94+
95+
try {
96+
when(response.getWriter()).thenReturn(pw);
97+
98+
SUT.doGet(request, response);
99+
100+
String result = sw.getBuffer().toString().trim();
101+
ObjectNode json = ParsingUtilities.mapper.readValue(result, ObjectNode.class);
102+
String code = json.get("status").asText();
103+
String message = json.get("message").asText();
104+
Assert.assertNotNull(code);
105+
Assert.assertNotNull(message);
106+
Assert.assertEquals(code, "error");
107+
Assert.assertEquals(message, "GET not implemented");
108+
109+
} catch (Exception e) {
110+
// TODO Auto-generated catch block
111+
e.printStackTrace();
112+
}
113+
}
114+
115+
@Test
116+
public void testDoPostInvalidSubCommand() throws IOException, ServletException {
117+
StringWriter sw = new StringWriter();
118+
PrintWriter pw = new PrintWriter(sw);
119+
when(request.getQueryString()).thenReturn(
120+
"http://127.0.0.1:3333/command/core/importing-controller?controller=sparql/sparql-import-controller&subCommand=invalid-sub-command");
121+
122+
when(response.getWriter()).thenReturn(pw);
123+
124+
SUT.doPost(request, response);
125+
126+
String result = sw.getBuffer().toString().trim();
127+
ObjectNode json = ParsingUtilities.mapper.readValue(result, ObjectNode.class);
128+
129+
String code = json.get("status").asText();
130+
String message = json.get("message").asText();
131+
Assert.assertNotNull(code);
132+
Assert.assertNotNull(message);
133+
Assert.assertEquals(code, "error");
134+
Assert.assertEquals(message, "No such sub command");
135+
}
136+
137+
@Test
138+
public void testDoPostInitializeParser() throws ServletException, IOException {
139+
140+
StringWriter sw = new StringWriter();
141+
PrintWriter pw = new PrintWriter(sw);
142+
143+
when(request.getQueryString()).thenReturn(
144+
"http://127.0.0.1:3333/command/core/importing-controller?controller=sparql/sparql-import-controller&subCommand=initialize-parser-ui");
145+
when(response.getWriter()).thenReturn(pw);
146+
147+
SUT.doPost(request, response);
148+
149+
String result = sw.getBuffer().toString().trim();
150+
ObjectNode json = ParsingUtilities.mapper.readValue(result, ObjectNode.class);
151+
152+
String status = json.get("status").asText();
153+
Assert.assertEquals(status, "ok");
154+
}
155+
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
2+
package org.openrefine.sparql.utils;
3+
4+
import java.io.File;
5+
import java.io.IOException;
6+
import java.util.ArrayList;
7+
import java.util.Arrays;
8+
import java.util.List;
9+
10+
import org.mockito.Mockito;
11+
import org.mockito.MockitoAnnotations;
12+
import org.openrefine.extensions.sparql.utils.SPARQLQueryResultPreviewReader;
13+
import org.testng.Assert;
14+
import org.testng.annotations.AfterMethod;
15+
import org.testng.annotations.BeforeMethod;
16+
import org.testng.annotations.Test;
17+
18+
import com.google.refine.ProjectManager;
19+
import com.google.refine.ProjectMetadata;
20+
import com.google.refine.RefineServlet;
21+
import com.google.refine.importing.ImportingJob;
22+
import com.google.refine.importing.ImportingManager;
23+
import com.google.refine.io.FileProjectManager;
24+
import com.google.refine.model.ModelException;
25+
import com.google.refine.model.Project;
26+
27+
import okhttp3.HttpUrl;
28+
import okhttp3.mockwebserver.MockResponse;
29+
import okhttp3.mockwebserver.MockWebServer;
30+
31+
public class SPARQLQueryResultPreviewReaderTest {
32+
33+
private static final String ENDPOINT = "wdq/sparql";
34+
private static final String QUERY = "SELECT ?item ?itemLabel \n"
35+
+ "WHERE \n"
36+
+ "{\n"
37+
+ " ?item wdt:P31 wd:Q146. # Must be of a cat\n"
38+
+ " SERVICE wikibase:label { bd:serviceParam wikibase:language \"en,en\". } # Helps get the label in your language, if not, then en language\n"
39+
+ "}";
40+
private static final int BATCH_SIZE = 100;
41+
42+
// dependencies
43+
private Project project;
44+
private ProjectMetadata metadata;
45+
private ImportingJob job;
46+
private RefineServlet servlet;
47+
48+
// System under test
49+
private SPARQLQueryResultPreviewReader SUT = null;
50+
51+
public static File createTempDirectory(String name)
52+
throws IOException {
53+
File dir = File.createTempFile(name, "");
54+
dir.delete();
55+
dir.mkdir();
56+
return dir;
57+
}
58+
59+
@BeforeMethod
60+
public void setUp() throws IOException, ModelException {
61+
62+
MockitoAnnotations.initMocks(this);
63+
64+
File dir = createTempDirectory("OR_SPARQLExtension_Test_WorkspaceDir");
65+
FileProjectManager.initialize(dir);
66+
67+
servlet = new RefineServlet();
68+
ImportingManager.initialize(servlet);
69+
project = new Project();
70+
metadata = new ProjectMetadata();
71+
job = Mockito.mock(ImportingJob.class);
72+
73+
metadata.setName("SPARQL Import Test Project");
74+
ProjectManager.singleton.registerProject(project, metadata);
75+
76+
77+
}
78+
79+
@AfterMethod
80+
public void tearDown() {
81+
SUT = null;
82+
project = null;
83+
metadata = null;
84+
job = null;
85+
}
86+
87+
@Test
88+
public void testGetResults() throws Exception {
89+
try (MockWebServer server = new MockWebServer()) {
90+
String jsonResponse = "{\"head\":{\"vars\":[\"item\",\"itemLabel\"]},\"results\":{\"bindings\""
91+
+ ":[{\"item\":{\"type\":\"uri\",\"value\":\"http://www.wikidata.org/entity/Q378619\"},\"itemLabel\""
92+
+ ":{\"xml:lang\":\"en\",\"type\":\"literal\",\"value\":\"CC\"}},{\"item\":{\"type\":\"uri\",\"value\""
93+
+ ":\"http://www.wikidata.org/entity/Q498787\"},\"itemLabel\":{\"xml:lang\":\"en\",\"type\":\"literal\",\"value\":\"Muezza\"}}]}}";
94+
server.enqueue(new MockResponse().setBody(jsonResponse));
95+
server.start();
96+
97+
HttpUrl url = server.url(ENDPOINT);
98+
SUT = new SPARQLQueryResultPreviewReader(job, url.toString(), QUERY, BATCH_SIZE);
99+
100+
Assert.assertEquals(SUT.getColumns(), Arrays.asList("item", "itemLabel"));
101+
}
102+
}
103+
104+
@Test
105+
public void testGetNextRowOfCells() throws Exception {
106+
try (MockWebServer server = new MockWebServer()) {
107+
String jsonResponse = "{\"head\":{\"vars\":[\"item\",\"itemLabel\"]},\"results\":{\"bindings\""
108+
+ ":[{\"item\":{\"type\":\"uri\",\"value\":\"http://www.wikidata.org/entity/Q378619\"},\"itemLabel\""
109+
+ ":{\"xml:lang\":\"en\",\"type\":\"literal\",\"value\":\"CC\"}},{\"item\":{\"type\":\"uri\",\"value\""
110+
+ ":\"http://www.wikidata.org/entity/Q498787\"},\"itemLabel\":{\"xml:lang\":\"en\",\"type\":\"literal\",\"value\":\"Muezza\"}}]}}";
111+
server.enqueue(new MockResponse().setBody(jsonResponse));
112+
server.start();
113+
114+
HttpUrl url = server.url(ENDPOINT);
115+
SUT = new SPARQLQueryResultPreviewReader(job, url.toString(), QUERY, BATCH_SIZE);
116+
117+
List<Object> currentRow = null;
118+
List<List<Object>> rows = new ArrayList<>();
119+
while ((currentRow = SUT.getNextRowOfCells()) != null) {
120+
rows.add(currentRow);
121+
}
122+
123+
Assert.assertEquals(rows.get(0), Arrays.asList("http://www.wikidata.org/entity/Q378619", "CC"));
124+
Assert.assertEquals(rows.get(1), Arrays.asList("http://www.wikidata.org/entity/Q498787", "Muezza"));
125+
}
126+
}
127+
}

0 commit comments

Comments
 (0)