package com.google.refine.test.rdf.vocab;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.apache.lucene.index.CorruptIndexException;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.google.refine.rdf.RdfSchema;
import com.google.refine.rdf.app.ApplicationContext;
import com.google.refine.rdf.commands.AddPrefixCommand;
import com.google.refine.rdf.vocab.PrefixExistException;
import com.google.refine.rdf.vocab.VocabularyImportException;
import com.google.refine.rdf.vocab.VocabularyImporter;
import com.google.refine.rdf.vocab.VocabularyIndexException;
import com.google.refine.rdf.vocab.imp.VocabularySearcher;
import static org.testng.Assert.*;
public class AddPrefixCommandTest{
private static final String TEMP_TEST_DIRECTORY = "tmp_VocabularySearchRelatedCommandsTest";
ApplicationContext ctxt;
VocabularySearcher searcher;
VocabularyImporter importer;
String name= "foaf";
String uri = "http://xmlns.com/foaf/0.1/";
String projectId = "1";
@BeforeClass
public void init() throws VocabularyIndexException, IOException, PrefixExistException{
//gurad assert
assertFalse(new File(TEMP_TEST_DIRECTORY).exists());
importer = new FakeImporter();
searcher = new FakeVocabularySearcher(new File(TEMP_TEST_DIRECTORY),this.importer);
ctxt = new ApplicationContext();
ctxt.setVocabularySearcher(searcher);
}
@Test
public void testAddPrefixCommand() throws Exception{
RdfSchema schema = new RdfSchema();
AddPrefixCommand command = new FakeAddPrefixCommand(ctxt,schema);
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
request.addParameter("name", name);
request.addParameter("uri", uri);
request.addParameter("fetch", "web");
request.addParameter("project", projectId);
request.addParameter("fetch-url", uri);
assertFalse(schema.getPrefixesMap().containsKey("foaf"));
assertTrue(searcher.searchClasses("foaf:P", projectId).isEmpty());
command.doPost(request, response);
//verification
//prefix is added to the project
assertTrue(schema.getPrefixesMap().containsKey("foaf"));
//search
assertFalse(searcher.searchClasses("foaf:P", projectId).isEmpty());
}
}
class FakeVocabularySearcher extends VocabularySearcher{
VocabularyImporter importer;
public FakeVocabularySearcher(File dir,VocabularyImporter importer) throws IOException {
super(dir);
this.importer = importer;
}
@Override
public void importAndIndexVocabulary(String name, String uri,
String fetchUrl, String projectId, VocabularyImporter im)
throws VocabularyImportException, VocabularyIndexException, PrefixExistException, CorruptIndexException, IOException {
super.importAndIndexVocabulary(name, uri, fetchUrl, projectId, this.importer);
}
}
class FakeAddPrefixCommand extends AddPrefixCommand{
RdfSchema schema;
public FakeAddPrefixCommand(ApplicationContext ctxt,RdfSchema schema) {
super(ctxt);
this.schema = schema;
}
@Override
public RdfSchema getRdfSchema(HttpServletRequest request)
throws ServletException {
return schema;
}
}