From 26e1372f46ca0222ffb7f73a1adb38dfea465292 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Wed, 6 May 2015 04:16:54 -0400 Subject: [PATCH] Throw an error if item type isn't set when saving And add a test for throwing from setField(), which already happens. --- chrome/content/zotero/xpcom/data/item.js | 7 +++++-- test/tests/itemTest.js | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js index 136c85631..4ea868c33 100644 --- a/chrome/content/zotero/xpcom/data/item.js +++ b/chrome/content/zotero/xpcom/data/item.js @@ -781,7 +781,7 @@ Zotero.Item.prototype.setField = function(field, value, loadIn) { let itemTypeID = this.itemTypeID; if (!itemTypeID) { - throw ('Item type must be set before setting field data'); + throw new Error('Item type must be set before setting field data'); } var fieldID = Zotero.ItemFields.getID(field); @@ -1173,7 +1173,10 @@ Zotero.Item.prototype._saveData = Zotero.Promise.coroutine(function* (env) { var options = env.options; var itemTypeID = this.itemTypeID; - + if (!itemTypeID) { + throw new Error("Item type must be set before saving"); + } + var sqlColumns = []; var sqlValues = []; var reloadParentChildItems = {}; diff --git a/test/tests/itemTest.js b/test/tests/itemTest.js index 19fa7bbeb..e65979278 100644 --- a/test/tests/itemTest.js +++ b/test/tests/itemTest.js @@ -19,6 +19,11 @@ describe("Zotero.Item", function () { }); describe("#setField", function () { + it("should throw an error if item type isn't set", function* () { + var item = new Zotero.Item; + assert.throws(item.setField.bind(item, 'title', 'test'), "Item type must be set before setting field data"); + }) + it("should mark a field as changed", function () { var item = new Zotero.Item('book'); item.setField('title', 'Foo');