UNPKG

wgraph

Version:

An optionnal thin abstraction layer of LevelGraph

239 lines (206 loc) 8.02 kB
'use strict'; var _assert = require('assert'); var _assert2 = _interopRequireDefault(_assert); var _rsvp = require('rsvp'); var _rsvp2 = _interopRequireDefault(_rsvp); var _wgraph = require('../wgraph'); var _wgraph2 = _interopRequireDefault(_wgraph); var _node = require('../node'); var _node2 = _interopRequireDefault(_node); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('WGraph', () => { let graph; before(done => { graph = new _wgraph2.default(__dirname + '/graph'); graph.del().then(nbTriplets => { //console.log('%s deleted triplets', nbTriplets) done(); }).catch(done); }); it('should build triplets', () => { let isVariable = (v, name) => { _assert2.default.strictEqual(v.constructor.name, 'Variable'); _assert2.default.strictEqual(v.name, name); }; let triplet = graph.triplet(); isVariable(triplet.subject, 'subject'); isVariable(triplet.predicate, 'predicate'); isVariable(triplet.object, 'object'); triplet = graph.triplet('brice'); _assert2.default.strictEqual(triplet.subject, 'brice'); isVariable(triplet.predicate, 'predicate'); isVariable(triplet.object, 'object'); triplet = graph.triplet('brice', 'knows'); _assert2.default.strictEqual(triplet.subject, 'brice'); _assert2.default.strictEqual(triplet.predicate, 'knows'); isVariable(triplet.object, 'object'); triplet = graph.triplet('brice', 'knows', 'arnaud'); _assert2.default.strictEqual(triplet.subject, 'brice'); _assert2.default.strictEqual(triplet.predicate, 'knows'); _assert2.default.strictEqual(triplet.object, 'arnaud'); }); it('should create nodes', () => { let brice = graph.node('brice'); _assert2.default.strictEqual(brice.constructor.name, 'Node'); _assert2.default.strictEqual(brice.index, 'brice'); let briceAndSacha = graph.nodes('brice', 'sacha'); _assert2.default.strictEqual(briceAndSacha.brice.constructor.name, 'Node'); _assert2.default.strictEqual(briceAndSacha.brice.index, 'brice'); _assert2.default.strictEqual(briceAndSacha.sacha.constructor.name, 'Node'); _assert2.default.strictEqual(briceAndSacha.sacha.index, 'sacha'); }); describe('Node', () => { it('should be loaded even if not exists', done => { let brice = graph.node('brice'); (0, _assert2.default)(brice.standalone()); brice.load().then(() => { (0, _assert2.default)(brice.standalone()); done(); }).catch(done); }); it('should be saved (no relations)', done => { let brice = graph.node('brice'); (0, _assert2.default)(brice.standalone()); brice.save().then(() => { (0, _assert2.default)(brice.standalone()); let search = graph.triplet(brice.index); graph.graph.search(search, (err, triplets) => { if (err) return done(err); _assert2.default.strictEqual(triplets.length, 1); _assert2.default.strictEqual(triplets.shift().predicate, _node2.default.SELF_PREDICATE); done(); }); }).catch(done); }); it('should have properties', done => { let brice = graph.node('brice'); brice.props.clear().then(() => { return brice.props.map(); }).then(data0 => { _assert2.default.deepEqual(data0, {}); return brice.props.set('age', 28).then(() => { return brice.props.del('age'); }).then(() => { return brice.props.set({ sex: 'female', age: 27 }); }).then(() => { return brice.props.set([['sex', 'male'], ['hair', 'brown']]); }).then(() => { return brice.props.map(); }); }).then(data1 => { _assert2.default.deepEqual(data1, { sex: 'male', age: 27, hair: 'brown' }); done(); }).catch(done); }); let brice; let arnaud; it('should be related to other nodes', () => { brice = graph.node('brice'); arnaud = graph.node('arnaud'); let briceKnowsArnaud = brice.rel('knows', arnaud); _assert2.default.strictEqual(briceKnowsArnaud.constructor.name, 'Edge'); _assert2.default.strictEqual(briceKnowsArnaud.subject.index, brice.index); _assert2.default.strictEqual(briceKnowsArnaud.predicate, 'knows'); _assert2.default.strictEqual(briceKnowsArnaud.object.index, arnaud.index); }); it('should be saved (with relation)', done => { (0, _assert2.default)(!brice.standalone()); brice.save().then(() => { let search = graph.triplet(brice.index); graph.graph.search(search, (err, triplets) => { if (err) return done(err); _assert2.default.strictEqual(triplets.length, 2); let rel = triplets.shift(); _assert2.default.strictEqual(rel.predicate, 'knows'); _assert2.default.strictEqual(rel.object, arnaud.index); _assert2.default.strictEqual(triplets.shift().predicate, _node2.default.SELF_PREDICATE); done(); }); }).catch(done); }); describe('should search', () => { it('#1 empty', done => { graph.search('antonin').then(nodes => { _assert2.default.deepEqual(nodes, {}); done(); }).catch(done); }); it('#1 args', done => { let antonin = graph.node('antonin'); let sacha = graph.node('sacha'); antonin.rel('knows', sacha); _rsvp2.default.all([antonin.save(), sacha.save()]).then(() => { return graph.search('antonin', 'sacha'); }).then(nodes => { _assert2.default.deepEqual(Object.keys(nodes), ['sacha', 'antonin']); _assert2.default.strictEqual(nodes.antonin.edges['knows:sacha'].object.index, 'sacha'); done(); }).catch(done); }); it('#2 array', done => { graph.search(['antonin', 'sacha']).then(nodes => { _assert2.default.deepEqual(Object.keys(nodes), ['sacha', 'antonin']); done(); }).catch(done); }); }); it('should be deleted', done => { brice.del().then(() => { let search = graph.triplet(brice.index); graph.graph.search(search, (err, triplets) => { if (err) return done(err); _assert2.default.strictEqual(triplets.length, 0); brice.props.map().then(data => { _assert2.default.deepEqual(data, {}); done(); }); }); }).catch(done); }); }); describe('Edges', () => { let brice; let arnaud; let briceKnowsArnaud; let expRelTriplet; before(() => { brice = graph.node('brice'); arnaud = graph.node('arnaud'); briceKnowsArnaud = brice.rel('knows', arnaud); expRelTriplet = { subject: brice.index, predicate: 'knows', object: arnaud.index }; }); it('should be loaded', done => { briceKnowsArnaud.load().then(() => { _assert2.default.deepEqual(briceKnowsArnaud.triplet(), expRelTriplet); done(); }).catch(done); }); it('should be saved', done => { briceKnowsArnaud.save().then(() => { _assert2.default.deepEqual(briceKnowsArnaud.triplet(), expRelTriplet); done(); }).catch(done); }); it('should be deleted', done => { briceKnowsArnaud.save().then(() => { return briceKnowsArnaud.del(); }).then(triplet => { briceKnowsArnaud.graph.graph.search(expRelTriplet, (err, triplets) => { if (err) return done(err); _assert2.default.strictEqual(triplets.length, 0); done(); }); }).catch(done); }); it('should have properties', done => { let attrs = { since: '2015/11/01', colleague: true }; briceKnowsArnaud.props.set(attrs).then(() => { return briceKnowsArnaud.props.map(); }).then(data => { _assert2.default.deepEqual(data, attrs); done(); }).catch(done); }); }); }); //# sourceMappingURL=wgraph.js.map