@innotrade/enapso-graphdb-client
Version:
ENAPSO Graph Database Client for Node.js
160 lines (147 loc) • 4.73 kB
JavaScript
/* eslint-disable prettier/prettier */
/* eslint-disable no-console, func-names, no-undef */
// Innotrade ENAPSO Graph Database Client - Automated Test Suite
// (C) Copyright 2021-2022 Innotrade GmbH, Herzogenrath, NRW, Germany
// Author: Alexander Schulze and Muhammad Yasir
const { EnapsoGraphDBClient } = require('../index');
const testConfig = require('./config');
const baseURL = process?.argv[5]?.replace(/'/g, '');
const triplestore = process?.argv[7]?.replace(/'/g, '');
const username = process?.argv[9]?.replace(/'/g, '');
const password = process?.argv[11]?.replace(/'/g, '');
const GRAPHDB_CONTEXT_TEST = encfg.getConfig(
'enapsoDefaultGraphDB.contextTest',
'http://ont.enapso.com/test'
);
describe('ENAPSO Graph Database Client Automated Test Suite', function () {
this.timeout(5000);
this.slow(100);
let chai, expect;
// Setup - load chai using dynamic import before tests run
before(async function() {
chai = await import('chai');
expect = chai.expect;
});
const graphDBEndpoint = new EnapsoGraphDBClient.Endpoint({
baseURL,
repository: testConfig.repository,
prefixes: testConfig.prefixes,
triplestore
});
if(triplestore=='qlever')
{
graphDBEndpoint.setAccessToken(testConfig.accessToken);
}
it('Authenticate against Graph Database instance', function (done) {
// eslint-disable-next-line eqeqeq
if (triplestore != 'fuseki' && triplestore!= 'qlever') {
console.log(triplestore)
this.slow(80);
graphDBEndpoint
.login(username, password)
.then((result) => {
// console.log(result.);
expect(result).to.have.property('status', 200);
done();
})
.catch((err) => {
console.log(`Authentication: ${err.message}`);
done(err);
});
} else {
done();
}
});
// first try to insert a class
it('Insert a class', (done) => {
this.slow(80);
const lQuery = `
insert data {
graph <${GRAPHDB_CONTEXT_TEST}> {
entest:TestClass rdf:type owl:Class
}
}`;
graphDBEndpoint
.update(lQuery)
.then((result) => {
console.log(`Success: ${ result.success}`);
expect(result).to.have.property('success', true);
done();
})
.catch((err) => {
console.log(`Insert class: ${err.message}`);
done(err);
});
});
// then try to update that inserted class
it('Update inserted class', function (done) {
this.slow(80);
const lQuery = `
with <${GRAPHDB_CONTEXT_TEST}>
delete {
entest:TestClass rdf:type owl:Class
}
insert {
entest:TestClassUpdated rdf:type owl:Class
}
where {
entest:TestClass rdf:type owl:Class
}`;
graphDBEndpoint
.update(lQuery)
.then((result) => {
// console.log("Success: " + result.success);
expect(result).to.have.property('success', true);
done();
})
.catch((err) => {
console.log(`Update class: ${err.message}`);
done(err);
});
});
// now try to read the updated class
it('Read inserted and updated class', function (done) {
this.slow(80);
const lQuery = `
select ?class
where {
graph <${GRAPHDB_CONTEXT_TEST}> {
?class a owl:Class
}
} limit 1`;
graphDBEndpoint
.query(lQuery)
.then((result) => {
// console.log("Success: " + result.success);
expect(result.results.bindings).to.have.lengthOf(1);
done();
})
.catch((err) => {
console.log(`Read class: ${err.message}`);
done(err);
});
});
// and finally try to delete the new and updated class
it('Delete inserted and updated class', function (done) {
this.slow(80);
const lQuery = `
with <${GRAPHDB_CONTEXT_TEST}>
delete {
entest:TestClassUpdated rdf:type owl:Class
}
where {
entest:TestClassUpdated rdf:type owl:Class
}`;
graphDBEndpoint
.update(lQuery)
.then((result) => {
// console.log("Success: " + result.success);
expect(result).to.have.property('success', true);
done();
})
.catch((err) => {
console.log(`Delete class: ${err.message}`);
done(err);
});
});
});