Don't mark an empty field set to an empty string as changed
And some tests
This commit is contained in:
parent
0cefa03827
commit
93a6a4ffdb
|
@ -789,7 +789,7 @@ Zotero.Item.prototype.setField = function(field, value, loadIn) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value === "") {
|
if (value === "" || value === null || value === false) {
|
||||||
value = false;
|
value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -850,9 +850,8 @@ Zotero.Item.prototype.setField = function(field, value, loadIn) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// If existing value, make sure it's actually changing
|
// If existing value, make sure it's actually changing
|
||||||
if ((typeof this._itemData[fieldID] == 'undefined' && value === false)
|
if ((this._itemData[fieldID] === null && value === false)
|
||||||
|| (typeof this._itemData[fieldID] != 'undefined'
|
|| (this._itemData[fieldID] !== null && this._itemData[fieldID] === value)) {
|
||||||
&& this._itemData[fieldID] === value)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1264,7 +1263,7 @@ Zotero.Item.prototype._saveData = Zotero.Promise.coroutine(function* (env) {
|
||||||
let value = this.getField(fieldID, true);
|
let value = this.getField(fieldID, true);
|
||||||
|
|
||||||
// If field changed and is empty, mark row for deletion
|
// If field changed and is empty, mark row for deletion
|
||||||
if (!value) {
|
if (value === '') {
|
||||||
del.push(fieldID);
|
del.push(fieldID);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,49 @@ describe("Zotero.Item", function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("#setField", function () {
|
describe("#setField", function () {
|
||||||
|
it("should mark a field as changed", function () {
|
||||||
|
var item = new Zotero.Item('book');
|
||||||
|
item.setField('title', 'Foo');
|
||||||
|
assert.ok(item._changed.itemData[Zotero.ItemFields.getID('title')]);
|
||||||
|
assert.ok(item.hasChanged());
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should clear an existing field set to a falsy value", function () {
|
||||||
|
var field = 'title';
|
||||||
|
var fieldID = Zotero.ItemFields.getID(field);
|
||||||
|
var item = new Zotero.Item('book');
|
||||||
|
item.setField(field, 'Foo');
|
||||||
|
id = yield item.save();
|
||||||
|
item = yield Zotero.Items.getAsync(id);
|
||||||
|
|
||||||
|
item.setField(field, "");
|
||||||
|
assert.ok(item._changed.itemData[fieldID]);
|
||||||
|
assert.ok(item.hasChanged());
|
||||||
|
yield item.reload();
|
||||||
|
|
||||||
|
assert.isFalse(item.hasChanged());
|
||||||
|
|
||||||
|
item.setField(field, false);
|
||||||
|
assert.ok(item._changed.itemData[fieldID]);
|
||||||
|
assert.ok(item.hasChanged());
|
||||||
|
yield item.reload();
|
||||||
|
|
||||||
|
assert.isFalse(item.hasChanged());
|
||||||
|
|
||||||
|
item.setField(field, null);
|
||||||
|
assert.ok(item._changed.itemData[fieldID]);
|
||||||
|
assert.ok(item.hasChanged());
|
||||||
|
|
||||||
|
yield item.save();
|
||||||
|
assert.isFalse(item.getField(fieldID));
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should not mark an empty field set to an empty string as changed", function () {
|
||||||
|
var item = new Zotero.Item('book');
|
||||||
|
item.setField('url', '');
|
||||||
|
assert.isUndefined(item._changed.itemData);
|
||||||
|
})
|
||||||
|
|
||||||
it("should save version as object version", function* () {
|
it("should save version as object version", function* () {
|
||||||
var item = new Zotero.Item('book');
|
var item = new Zotero.Item('book');
|
||||||
item.setField("version", 1);
|
item.setField("version", 1);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user