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
JavaScript
;
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']);
});
});