UNPKG

json-prism

Version:

Immutable Prisms, i.e. Taking a Multifoci Json Path to Immutability, or A sentient item has some ability to communicate, either by sharing its emotions, broadcasting its thoughts telepathically, or speaking aloud.

234 lines (221 loc) 6.84 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var F = require('functional-pipelines'); var _require = require('rxjs'), BehaviorSubject = _require.BehaviorSubject; var _require2 = require('rxjs/operators'), take = _require2.take, toArray = _require2.toArray; var _require3 = require('./SentientContainer'), shredder = _require3.shredder, unshredder = _require3.unshredder, Unprism = _require3.Unprism; var series = require('./mini-series.data'); var _require4 = require('../../utils/trace'), show = _require4.show, aLine = _require4.aLine; describe('scenario: shredder', function () { it('works: for modes [nodes, pairs, paths, values]', function () { var result = shredder(series, { modes: ['nodes', 'pairs', 'paths', 'values'] }); var expectedResult = { nodes: [{ "path": "$.episodes" }, { "path": "$.episodes.EP1" }, { "path": "$.episodes.EP1.EP11" }, { "path": "$.episodes.EP1.EP11.start" }, { "path": "$.episodes.EP1.EP11.start.place" }, { "path": "$.episodes.EP1.EP11.start.time" }, { "path": "$.episodes.EP1.EP12" }, { "path": "$.episodes.EP1.EP12.start" }, { "path": "$.episodes.EP1.EP12.start.place" }, { "path": "$.episodes.EP1.EP12.start.time" }, { "path": "$.episodes.EP1.EP13" }, { "path": "$.episodes.EP1.EP13.start" }, { "path": "$.episodes.EP1.EP13.start.place" }, { "path": "$.episodes.EP1.EP13.start.time" }, { "path": "$.episodes.EP1.sequence" }, { "path": "$.episodes.EP1.sequence[0]" }, { "path": "$.episodes.EP1.sequence[1]" }, { "path": "$.episodes.EP1.sequence[2]" }, { "path": "$.episodes.EP2" }, { "path": "$.episodes.EP2.EP21" }, { "path": "$.episodes.EP2.EP21.start" }, { "path": "$.episodes.EP2.EP21.start.place" }, { "path": "$.episodes.EP2.EP21.start.time" }, { "path": "$.episodes.EP2.EP22" }, { "path": "$.episodes.EP2.EP22.start" }, { "path": "$.episodes.EP2.EP22.start.place" }, { "path": "$.episodes.EP2.EP22.start.time" }, { "path": "$.episodes.EP2.EP23" }, { "path": "$.episodes.EP2.EP23.start" }, { "path": "$.episodes.EP2.EP23.start.place" }, { "path": "$.episodes.EP2.EP23.start.time" }, { "path": "$.episodes.EP2.sequence" }, { "path": "$.episodes.EP2.sequence[0]" }, { "path": "$.episodes.EP2.sequence[1]" }, { "path": "$.episodes.EP2.sequence[2]" }, { "path": "$.episodes.EP3" }, { "path": "$.episodes.EP3.EP31" }, { "path": "$.episodes.EP3.EP31.start" }, { "path": "$.episodes.EP3.EP31.start.place" }, { "path": "$.episodes.EP3.EP31.start.time" }, { "path": "$.episodes.EP3.EP32" }, { "path": "$.episodes.EP3.EP32.start" }, { "path": "$.episodes.EP3.EP32.start.place" }, { "path": "$.episodes.EP3.EP32.start.time" }, { "path": "$.episodes.EP3.EP33" }, { "path": "$.episodes.EP3.EP33.start" }, { "path": "$.episodes.EP3.EP33.start.place" }, { "path": "$.episodes.EP3.EP33.start.time" }, { "path": "$.episodes.EP3.sequence" }, { "path": "$.episodes.EP3.sequence[0]" }, { "path": "$.episodes.EP3.sequence[1]" }, { "path": "$.episodes.EP3.sequence[2]" }, { "path": "$.sequence" }, { "path": "$.sequence[0]" }, { "path": "$.sequence[1]" }, { "path": "$.sequence[2]" }] }; expect(result.nodes.map(function (_ref) { var path = _ref.path; return { path: path }; })).toEqual(expectedResult.nodes); expect(result.nodes.map(function (_ref2) { var path = _ref2.path, value = _ref2.value; return [path, value]; })).toEqual(result.pairs); expect((0, _toConsumableArray2["default"])(F.zip(result.paths, result.values))).toEqual(result.pairs); }); }); describe('scenario: unshredder', function () { it('works: ', function () { var _shredder = shredder(series, { modes: ['nodes', 'pairs'] }), nodes = _shredder.nodes, pairs = _shredder.pairs; var resultNodes = unshredder({ nodes: nodes }); expect(resultNodes).toEqual(series); var resultPairs = unshredder({ pairs: pairs }); expect(resultPairs).toEqual(series); }); }); describe('scenario: unprism', function () { it('works: ', function (done) { var journal = new BehaviorSubject({ value: series }); journal.subscribe(function (journalEntry) { return show({ journalEntry: journalEntry }); }, function (error) { return show('Error:', error); }, function () { return show("ALL-DONE"); }); journal.pipe(take(4), toArray()).subscribe(function (journal) { try { // expect(journal[0].value.episodes.EP2.EP21.start.place).toEqual('EP21-Place'); expect(journal[1].value.episodes.EP2.EP21.start.place).toEqual('La La'); expect(journal[2].value.episodes.EP3.EP33.start.place).toEqual('LAND'); done(); } catch (error) { done.fail(error); } }, function (error) { return done.fail(error); }, function () { return ( /*journalLog.end(`@clicks: ${clicks}`),*/ show('ALL-DONE') ); }); var resultNodes = Unprism(journal, { labels: ['Unprism-Test'] })({ nodes: [{ path: "$.episodes.EP2.EP21.start.place", value: 'La La' }, { path: "$.episodes.EP3.EP33.start.place", value: 'LAND' }] }); // expect(resultNodes.version).toEqual(0); expect(resultNodes.value.episodes.EP2.EP21.start.place).toEqual('La La'); expect(resultNodes.value.episodes.EP3.EP33.start.place).toEqual('LAND'); expect(resultNodes.multiWriter.___included()).toEqual(['$.episodes.EP2.EP21.start.place', '$.episodes.EP3.EP33.start.place']); var _resultNodes$multiWri = resultNodes.multiWriter.updates(['lA lA', 'land']), value = _resultNodes$multiWri.value; expect(value.episodes.EP2.EP21.start.place).toEqual('lA lA'); expect(value.episodes.EP3.EP33.start.place).toEqual('land'); var updates = resultNodes.multiWriter.updates(); expect(updates).toEqual(['lA lA', 'land']); }); });