From 33f8fcfafb12661bc818a986d5964f07545cd05c Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sun, 22 Apr 2018 17:27:33 -0400 Subject: [PATCH] Fix syncing of saved search changes Condition changes were only uploaded after every other change + sync --- .../zotero/xpcom/data/dataObjectUtilities.js | 11 ++---- chrome/content/zotero/xpcom/data/searches.js | 7 ++++ test/tests/dataObjectUtilitiesTest.js | 37 +++++++++++++++++++ 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/chrome/content/zotero/xpcom/data/dataObjectUtilities.js b/chrome/content/zotero/xpcom/data/dataObjectUtilities.js index 8e5813b07..3ec8737e0 100644 --- a/chrome/content/zotero/xpcom/data/dataObjectUtilities.js +++ b/chrome/content/zotero/xpcom/data/dataObjectUtilities.js @@ -234,14 +234,9 @@ Zotero.DataObjectUtilities = { }, _conditionsChanged: function (data1, data2) { - if (!data2) return true; - var pred1 = Object.keys(data1); - pred1.sort(); - var pred2 = Object.keys(data2); - pred2.sort(); - if (!Zotero.Utilities.arrayEquals(pred1, pred2)) return false; - for (let i in pred1) { - if (!Zotero.Utilities.arrayEquals(pred1[i], pred2[i])) { + if (!data2 || data1.length != data2.length) return true; + for (let i = 0; i < data1.length; i++) { + if (!Zotero.Searches.conditionEquals(data1[i], data2[i])) { return true; } } diff --git a/chrome/content/zotero/xpcom/data/searches.js b/chrome/content/zotero/xpcom/data/searches.js index d05a342c9..7198cf98d 100644 --- a/chrome/content/zotero/xpcom/data/searches.js +++ b/chrome/content/zotero/xpcom/data/searches.js @@ -96,6 +96,13 @@ Zotero.Searches = function() { } + this.conditionEquals = function (data1, data2) { + return data1.condition === data2.condition + && data1.operator === data2.operator + && data1.value === data2.value; + }, + + this._loadConditions = Zotero.Promise.coroutine(function* (libraryID, ids, idSQL) { var sql = "SELECT savedSearchID, searchConditionID, condition, operator, value, required " + "FROM savedSearches LEFT JOIN savedSearchConditions USING (savedSearchID) " diff --git a/test/tests/dataObjectUtilitiesTest.js b/test/tests/dataObjectUtilitiesTest.js index f828c3078..5372ca0b1 100644 --- a/test/tests/dataObjectUtilitiesTest.js +++ b/test/tests/dataObjectUtilitiesTest.js @@ -10,6 +10,43 @@ describe("Zotero.DataObjectUtilities", function() { obj = Zotero.DataObjectUtilities.patch(patchBase, obj); assert.notProperty(obj, 'collections'); }) + + it("should include modified 'conditions'", function* () { + var patchBase = { + name: "Search", + conditions: [ + { + condition: 'title', + operator: 'is', + value: 'A' + }, + { + condition: 'language', + operator: 'is', + value: 'en' + } + ] + }; + var obj = { + name: "Search", + conditions: [ + { + condition: 'title', + operator: 'is', + value: 'B' + }, + { + condition: 'language', + operator: 'is', + value: 'en' + } + ] + }; + obj = Zotero.DataObjectUtilities.patch(patchBase, obj); + assert.property(obj, 'conditions'); + assert.equal(obj.conditions[0].value, 'B'); + assert.equal(obj.conditions[1].value, 'en'); + }) }) describe("#diff()", function () {