www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit f8684cc9d860eb684d349717155b5722c2bba199
parent ac440b2b38b49eab254b9bcd40cc6ddfc9339282
Author: Dan Stillman <dstillman@zotero.org>
Date:   Tue,  9 Jun 2015 03:03:46 -0400

Fix tag purging and Zotero.Tags.getName()

Diffstat:
Mchrome/content/zotero/xpcom/data/tags.js | 10++++++----
Atest/tests/tagsTest.js | 50++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 4 deletions(-)

diff --git a/chrome/content/zotero/xpcom/data/tags.js b/chrome/content/zotero/xpcom/data/tags.js @@ -51,7 +51,7 @@ Zotero.Tags = new function() { throw new Error("tagID not provided"); } if (_tagNamesByID[tagID]) { - return _tagNamesByID[tagID].name; + return _tagNamesByID[tagID]; } _requireLoad(libraryID); return false; @@ -394,7 +394,7 @@ Zotero.Tags = new function() { yield Zotero.DB.queryAsync(sql); sql = "SELECT tagID AS id, libraryID, name FROM tagDelete JOIN tags USING (tagID)"; - var toDelete = yield Zotero.DB.columnQueryAsync(sql); + var toDelete = yield Zotero.DB.queryAsync(sql); if (!toDelete.length) { sql = "DROP TABLE tagDelete"; @@ -402,9 +402,11 @@ Zotero.Tags = new function() { } } + var ids = []; notifierData = {}; for (let i=0; i<toDelete.length; i++) { let row = toDelete[i]; + ids.push(row.id); notifierData[row.id] = { old: { libraryID: row.libraryID, @@ -415,7 +417,7 @@ Zotero.Tags = new function() { // Clear cached values delete _tagNamesByID[row.id]; if (_tagIDsByName[row.libraryID]) { - delete _tagIDsByName[row.libraryID]['_' + tagName]; + delete _tagIDsByName[row.libraryID]['_' + row.name]; } } @@ -425,7 +427,7 @@ Zotero.Tags = new function() { sql = "DROP TABLE tagDelete"; yield Zotero.DB.queryAsync(sql); - Zotero.Notifier.queue('delete', 'tag', toDelete, notifierData); + Zotero.Notifier.queue('delete', 'tag', ids, notifierData); Zotero.Prefs.set('purge.tags', false); }); diff --git a/test/tests/tagsTest.js b/test/tests/tagsTest.js @@ -0,0 +1,50 @@ +"use strict"; + +describe("Zotero.Tags", function () { + describe("#getID()", function () { + it("should return tag id", function* () { + var tagName = Zotero.Utilities.randomString(); + var item = createUnsavedDataObject('item'); + item.addTag(tagName); + yield item.saveTx(); + + assert.typeOf(Zotero.Tags.getID(Zotero.Libraries.userLibraryID, tagName), "number"); + }) + }) + + describe("#getName()", function () { + it("should return tag id", function* () { + var tagName = Zotero.Utilities.randomString(); + var item = createUnsavedDataObject('item'); + item.addTag(tagName); + yield item.saveTx(); + + var tagID = Zotero.Tags.getID(Zotero.Libraries.userLibraryID, tagName); + assert.equal(Zotero.Tags.getName(Zotero.Libraries.userLibraryID, tagID), tagName); + }) + }) + + describe("#purge()", function () { + it("should remove orphaned tags", function* () { + var libraryID = Zotero.Libraries.userLibraryID; + var tagName = Zotero.Utilities.randomString(); + var item = createUnsavedDataObject('item'); + item.addTag(tagName); + yield item.saveTx(); + + var tagID = Zotero.Tags.getID(libraryID, tagName); + assert.typeOf(tagID, "number"); + + yield item.eraseTx(); + + assert.equal(Zotero.Tags.getName(libraryID, tagID), tagName); + + yield Zotero.DB.executeTransaction(function* () { + yield Zotero.Tags.purge(); + }); + + yield Zotero.Tags.load(libraryID); + assert.isFalse(Zotero.Tags.getName(libraryID, tagID)); + }) + }) +})