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:
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));
+ })
+ })
+})