package org.nextprot.api.integration.tests.rdf;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.query.MalformedQueryException;
import org.eclipse.rdf4j.query.QueryEvaluationException;
import org.eclipse.rdf4j.query.QueryLanguage;
import org.eclipse.rdf4j.query.TupleQuery;
import org.eclipse.rdf4j.query.TupleQueryResult;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.RepositoryException;
import org.eclipse.rdf4j.repository.sail.SailRepository;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.eclipse.rdf4j.sail.memory.MemoryStore;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.nextprot.api.rdf.utils.SparqlDictionary;
import org.nextprot.api.web.dbunit.base.mvc.WebIntegrationBaseTest;
import org.springframework.beans.factory.annotation.Autowired;
public class PhenotypicTTLIntegrationTest extends WebIntegrationBaseTest {
@Autowired
private SparqlDictionary sparqlDictionary;
private Repository testRepo = null;
@Before
public void init() throws Exception {
String prefixes = this.mockMvc.perform(get("/common-prefixes.ttl")).andReturn().getResponse().getContentAsString();
// Prepare repository
String ttlContent = this.mockMvc.perform(get("/entry/NX_Q15858.ttl")).andReturn().getResponse().getContentAsString();
// Daniel: Missing terminologies and other things I guess...
String ttl = prefixes + ttlContent;
//System.out.println(ttl);
testRepo = new SailRepository(new MemoryStore());
testRepo.initialize();
InputStream stream = new ByteArrayInputStream((ttl).getBytes());
testRepo.getConnection().add(stream, "", RDFFormat.TURTLE, new Resource[] {});
}
private TupleQueryResult doTupleQuery(String sparqlQuery) throws RepositoryException, QueryEvaluationException, MalformedQueryException {
RepositoryConnection conn = testRepo.getConnection();
TupleQuery query = (TupleQuery) conn.prepareQuery(QueryLanguage.SPARQL, sparqlQuery);
TupleQueryResult result = query.evaluate();
return result;
}
@Test
public void shouldReturnCorrectTTLAndBeAbleToPerformAnRDFQuery() throws Exception {
// String sparqlQuery = sparqlDictionary.getSparqlOnly("NXQ_00147");
// //For phenotypic
String sparqlQuery = "SELECT (COUNT(*) AS ?no) where { ?s ?p ?o }";
TupleQueryResult result = doTupleQuery(sparqlQuery);
//System.err.println(result.getBindingNames().iterator().next());
long numberOfTriples = Long.valueOf(result.next().getBinding("no").getValue().stringValue());
Assert.assertTrue(numberOfTriples > 1000);
result.close();
}
}