UNPKG

sparnatural

Version:

Visual client-side SPARQL query builder and knowledge graph exploration tool

76 lines 3.07 kB
import { Store, DataFactory } from 'n3'; import { StoreBasedSparqlHandler } from '../StoreBasedSparqlHandler'; import '@jest/globals'; const { namedNode, literal } = DataFactory; jest.setTimeout(10000); // Increase timeout for async operations describe('StoreBasedSparqlHandler', () => { let store; let handler; beforeEach(() => { // Create a new Store before each test store = new Store(); // Add some sample triples store.addQuad(namedNode('http://example.org/john'), namedNode('http://example.org/name'), literal('John Doe')); store.addQuad(namedNode('http://example.org/john'), namedNode('http://example.org/age'), literal('30', 'http://www.w3.org/2001/XMLSchema#integer')); // Initialize the handler handler = new StoreBasedSparqlHandler(store); }); test('should execute a simple SPARQL query', (done) => { const sparqlQuery = ` SELECT ?name WHERE { ?person <http://example.org/name> ?name . } `; handler.executeSparql(sparqlQuery, (results) => { try { expect(results.results.bindings).toBeDefined(); expect(results.results.bindings.length).toBe(1); expect(results.results.bindings[0].name.value).toBe('John Doe'); done(); } catch (error) { done(error); } }, (error) => { done(error); }); }); test('should handle queries with multiple results', (done) => { // Add another person to the store store.addQuad(namedNode('http://example.org/jane'), namedNode('http://example.org/name'), literal('Jane Smith')); const sparqlQuery = ` SELECT ?name ?person WHERE { ?person <http://example.org/name> ?name . } ORDER BY ?name `; handler.executeSparql(sparqlQuery, (results) => { try { expect(results.results.bindings).toBeDefined(); expect(results.results.bindings.length).toBe(2); expect(results.results.bindings[0].name.value).toBe('Jane Smith'); expect(results.results.bindings[1].name.value).toBe('John Doe'); expect(results.results.bindings[0].person.value).toBe('http://example.org/jane'); expect(results.results.bindings[1].person.value).toBe('http://example.org/john'); done(); } catch (error) { done(error); } }, (error) => { done(error); }); }); test('should handle query errors', (done) => { const invalidQuery = 'INVALID SPARQL QUERY'; handler.executeSparql(invalidQuery, () => { done(new Error('Should not succeed with invalid query')); }, (error) => { expect(error).toBeDefined(); done(); }); }); }); //# sourceMappingURL=StoreBasedSparqlHandler.test.js.map