Fix hasChanged() bug related to 'synced'

This commit is contained in:
Dan Stillman 2015-08-02 05:26:02 -04:00
parent f02a9aa95e
commit 7075300a17
2 changed files with 37 additions and 19 deletions

View file

@ -776,6 +776,7 @@ Zotero.DataObject.prototype.hasChanged = function() {
var changed = Object.keys(this._changed).filter(dataType => this._changed[dataType]);
if (changed.length == 1
&& changed[0] == 'primaryData'
&& Object.keys(this._changed.primaryData).length == 1
&& this._changed.primaryData.synced
&& this._previousData.synced == this._synced) {
return false;

View file

@ -121,25 +121,6 @@ describe("Zotero.DataObject", function() {
}
});
it("shouldn't cause a save if unchanged and nothing else changed", function* () {
for (let type of types) {
var obj = createUnsavedDataObject(type);
obj.synced = true;
var id = yield obj.saveTx();
assert.isTrue(obj.synced);
obj.synced = true;
assert.isFalse(obj.hasChanged(), type + " shouldn't be changed");
var obj = createUnsavedDataObject(type);
obj.synced = false;
var id = yield obj.saveTx();
assert.isFalse(obj.synced);
obj.synced = false;
assert.isFalse(obj.hasChanged(), type + " shouldn't be changed");
}
})
it("should be unchanged if skipSyncedUpdate passed", function* () {
for (let type of types) {
var obj = createUnsavedDataObject(type);
@ -212,6 +193,42 @@ describe("Zotero.DataObject", function() {
})
})
describe("#hasChanged()", function () {
it("should return false if 'synced' was set but unchanged and nothing else changed", function* () {
for (let type of types) {
// True
var obj = createUnsavedDataObject(type);
obj.synced = true;
var id = yield obj.saveTx();
assert.isTrue(obj.synced);
obj.synced = true;
assert.isFalse(obj.hasChanged(), type + " shouldn't be changed");
// False
var obj = createUnsavedDataObject(type);
obj.synced = false;
var id = yield obj.saveTx();
assert.isFalse(obj.synced);
obj.synced = false;
assert.isFalse(obj.hasChanged(), type + " shouldn't be changed");
}
})
it("should return true if 'synced' was set but unchanged and another primary field changed", function* () {
for (let type of types) {
let obj = createUnsavedDataObject(type);
obj.synced = true;
yield obj.saveTx();
obj.synced = true;
obj.version = 1234;
assert.isTrue(obj.hasChanged());
}
})
})
describe("#save()", function () {
it("should add new identifiers to cache", function* () {
// Collection