Fix tag purging and Zotero.Tags.getName()

This commit is contained in:
Dan Stillman 2015-06-09 03:03:46 -04:00
parent ac440b2b38
commit f8684cc9d8
2 changed files with 56 additions and 4 deletions

View file

@ -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);
});

50
test/tests/tagsTest.js Normal file
View file

@ -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));
})
})
})