graph-crdt
Version:
A Delta State Graph CRDT variant
105 lines (85 loc) • 3.17 kB
JavaScript
;
var _mocha = require('mocha');
var _expect = require('expect');
var _expect2 = _interopRequireDefault(_expect);
var _index = require('./index');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var createSpy = _expect2.default.createSpy; /* eslint-disable require-jsdoc*/
(0, _mocha.describe)('A union', function () {
(0, _mocha.describe)('conflict', function () {
var current = void 0,
update = void 0,
result = void 0,
inverse = void 0;
var state = 10;
(0, _mocha.beforeEach)(function () {
current = { state: state };
update = { state: state };
});
function setup() {
// Try it in both orders.
result = (0, _index.conflict)(current, update);
inverse = (0, _index.conflict)(update, current);
}
(0, _mocha.it)('should resolve to the greater object uid', function () {
current.value = { edge: 'abc' };
update.value = { edge: 'def' };
setup();
(0, _expect2.default)(result).toBe(update);
(0, _expect2.default)(inverse).toBe(update);
});
(0, _mocha.it)('should return the first arg if uids are equal', function () {
current.value = { edge: 'equal' };
update.value = { edge: 'equal' };
setup();
(0, _expect2.default)(result).toBe(current);
(0, _expect2.default)(inverse).toBe(update);
});
(0, _mocha.it)('should favor objects over strings', function () {
current.value = { edge: 'def' };
update.value = 'abc';
setup();
(0, _expect2.default)(result).toBe(current);
(0, _expect2.default)(inverse).toBe(current);
});
(0, _mocha.it)('should favor numbers over strings', function () {
current.value = '5';
update.value = 5;
setup();
(0, _expect2.default)(result).toBe(update);
(0, _expect2.default)(inverse).toBe(update);
});
(0, _mocha.it)('should resolve to larger values', function () {
current.value = 'def';
update.value = 'abc';
setup();
(0, _expect2.default)(result).toBe(current);
(0, _expect2.default)(inverse).toBe(current);
});
(0, _mocha.it)('should return the first arg if both are equivalent', function () {
current.value = 'equal';
update.value = 'equal';
setup();
(0, _expect2.default)(result).toBe(current);
(0, _expect2.default)(inverse).toBe(update);
});
(0, _mocha.it)('should toString objects to compare', function () {
var spy = createSpy().andReturn('abc');
current.value = { toJSON: spy };
update.value = { toJSON: function toJSON() {
return 'def';
} };
setup();
(0, _expect2.default)(result).toBe(update);
(0, _expect2.default)(inverse).toBe(update);
(0, _expect2.default)(spy).toHaveBeenCalled();
});
(0, _mocha.it)('should favor edges over strings of the same value', function () {
current.value = { edge: 'equal' };
update.value = 'equal';
setup();
(0, _expect2.default)(result).toBe(current);
(0, _expect2.default)(inverse).toBe(current);
});
});
});