Fix Zotero.Utilities tests, which were being skipped accidentally
Unfortunately this will need to be partly redone, since retrieveItem(), and therefore itemToCSLJSON(), and therefore itemToExportFormat(), need to be synchronous. The item data load statements in itemToExportFormat() will probably need to be performed earlier, when they can be async, and made available to the session for retrieval by retrieveItem(), but I'll let someone more familiar with the citation infrastructure do that. This restores some code in retrieveItem() that may have been accidentally removed in a merge, though it probably won't be useful anymore anyway. Addresses #529
This commit is contained in:
parent
d2d7f2368c
commit
72c927c840
|
@ -517,12 +517,19 @@ Zotero.Cite.System.prototype = {
|
|||
return embeddedCitation;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// is an item ID
|
||||
//if(this._cache[item]) return this._cache[item];
|
||||
try {
|
||||
zoteroItem = Zotero.Items.get(item);
|
||||
} catch(e) {}
|
||||
}
|
||||
|
||||
if(!zoteroItem) {
|
||||
throw "Zotero.Cite.System.retrieveItem called on non-item "+item;
|
||||
}
|
||||
|
||||
throw new Error("Unimplemented");
|
||||
var cslItem = Zotero.Utilities.itemToCSLJSON(zoteroItem);
|
||||
|
||||
// TEMP: citeproc-js currently expects the id property to be the item DB id
|
||||
|
|
|
@ -1586,7 +1586,8 @@ Zotero.Utilities = {
|
|||
/**
|
||||
* Converts an item from toArray() format to citeproc-js JSON
|
||||
* @param {Zotero.Item} zoteroItem
|
||||
* @return {Object} The CSL item
|
||||
* @return {Object|Promise<Object>} A CSL item, or a promise for a CSL item if a Zotero.Item
|
||||
* is passed
|
||||
*/
|
||||
"itemToCSLJSON":function(zoteroItem) {
|
||||
if (zoteroItem instanceof Zotero.Item) {
|
||||
|
@ -1836,8 +1837,8 @@ Zotero.Utilities = {
|
|||
|
||||
var nameMappings = cslItem[CSL_NAMES_MAPPINGS[field]];
|
||||
for(var i in nameMappings) {
|
||||
var cslAuthor = nameMappings[i],
|
||||
creator = isZoteroItem ? new Zotero.Creator() : {};
|
||||
var cslAuthor = nameMappings[i];
|
||||
let creator = {};
|
||||
if(cslAuthor.family || cslAuthor.given) {
|
||||
if(cslAuthor.family) creator.lastName = cslAuthor.family;
|
||||
if(cslAuthor.given) creator.firstName = cslAuthor.given;
|
||||
|
@ -1847,9 +1848,10 @@ Zotero.Utilities = {
|
|||
} else {
|
||||
continue;
|
||||
}
|
||||
creator.creatorTypeID = creatorTypeID;
|
||||
|
||||
if(isZoteroItem) {
|
||||
item.setCreator(item.getCreators().length, creator, creatorTypeID);
|
||||
item.setCreator(item.getCreators().length, creator);
|
||||
} else {
|
||||
creator.creatorType = Zotero.CreatorTypes.getName(creatorTypeID);
|
||||
if(Zotero.isFx && !Zotero.isBookmarklet && Zotero.platformMajorVersion >= 32) {
|
||||
|
|
|
@ -608,15 +608,18 @@ Zotero.Utilities.Internal = {
|
|||
*
|
||||
* @param {Zotero.Item} zoteroItem
|
||||
* @param {Boolean} legacy Add mappings for legacy (pre-4.0.27) translators
|
||||
* @return {Object}
|
||||
* @return {Promise<Object>}
|
||||
*/
|
||||
"itemToExportFormat": new function() {
|
||||
return Zotero.Promise.coroutine(function* (zoteroItem, legacy) {
|
||||
var item = yield zoteroItem.toJSON();
|
||||
|
||||
item.uri = Zotero.URI.getItemURI(zoteroItem);
|
||||
delete item.key;
|
||||
|
||||
if (!zoteroItem.isAttachment() && !zoteroItem.isNote()) {
|
||||
yield zoteroItem.loadChildItems();
|
||||
|
||||
// Include attachments
|
||||
item.attachments = [];
|
||||
let attachments = zoteroItem.getAttachments();
|
||||
|
|
|
@ -272,7 +272,7 @@ describe("Zotero.Utilities", function() {
|
|||
|
||||
assert.isUndefined(cslJSON.PMID, 'field labels are case-sensitive');
|
||||
}));
|
||||
it("should parse particles in creator names", function() {
|
||||
it("should parse particles in creator names", function* () {
|
||||
let creators = [
|
||||
{
|
||||
// No particles
|
||||
|
@ -339,7 +339,7 @@ describe("Zotero.Utilities", function() {
|
|||
}
|
||||
];
|
||||
|
||||
let data = populateDBWithSampleData({
|
||||
let data = yield populateDBWithSampleData({
|
||||
item: {
|
||||
itemType: 'journalArticle',
|
||||
creators: creators
|
||||
|
@ -347,7 +347,7 @@ describe("Zotero.Utilities", function() {
|
|||
});
|
||||
|
||||
let item = Zotero.Items.get(data.item.id);
|
||||
let cslCreators = Zotero.Utilities.itemToCSLJSON(item).author;
|
||||
let cslCreators = (yield Zotero.Utilities.itemToCSLJSON(item)).author;
|
||||
|
||||
assert.deepEqual(cslCreators[0], creators[0].expect, 'simple name is not parsed');
|
||||
assert.deepEqual(cslCreators[1], creators[1].expect, 'name with dropping and non-dropping particles is parsed');
|
||||
|
@ -357,63 +357,52 @@ describe("Zotero.Utilities", function() {
|
|||
assert.deepEqual(cslCreators[5], creators[5].expect, 'protected last name prevents parsing');
|
||||
});
|
||||
});
|
||||
describe("itemFromCSLJSON", function() {
|
||||
it("should stably perform itemToCSLJSON -> itemFromCSLJSON -> itemToCSLJSON", function() {
|
||||
describe("itemFromCSLJSON", function () {
|
||||
it("should stably perform itemToCSLJSON -> itemFromCSLJSON -> itemToCSLJSON", function* () {
|
||||
let data = loadSampleData('citeProcJSExport');
|
||||
|
||||
Zotero.DB.beginTransaction();
|
||||
|
||||
for (let i in data) {
|
||||
let item = data[i];
|
||||
let json = data[i];
|
||||
|
||||
let zItem = new Zotero.Item();
|
||||
Zotero.Utilities.itemFromCSLJSON(zItem, item);
|
||||
zItem = Zotero.Items.get(zItem.save());
|
||||
let item = new Zotero.Item();
|
||||
Zotero.Utilities.itemFromCSLJSON(item, json);
|
||||
yield item.saveTx();
|
||||
|
||||
let newItem = Zotero.Utilities.itemToCSLJSON(zItem);
|
||||
let newJSON = yield Zotero.Utilities.itemToCSLJSON(item);
|
||||
|
||||
delete newItem.id;
|
||||
delete item.id;
|
||||
delete newJSON.id;
|
||||
delete json.id;
|
||||
|
||||
assert.deepEqual(newItem, item, i + ' export -> import -> export is stable');
|
||||
assert.deepEqual(newJSON, json, i + ' export -> import -> export is stable');
|
||||
}
|
||||
|
||||
Zotero.DB.commitTransaction();
|
||||
|
||||
});
|
||||
it("should import exported standalone note", function() {
|
||||
it("should import exported standalone note", function* () {
|
||||
let note = new Zotero.Item('note');
|
||||
note.setNote('Some note longer than 50 characters, which will become the title.');
|
||||
note = Zotero.Items.get(note.save());
|
||||
yield note.saveTx();
|
||||
|
||||
let jsonNote = Zotero.Utilities.itemToCSLJSON(note);
|
||||
let jsonNote = yield Zotero.Utilities.itemToCSLJSON(note);
|
||||
|
||||
let zItem = new Zotero.Item();
|
||||
Zotero.Utilities.itemFromCSLJSON(zItem, jsonNote);
|
||||
zItem = Zotero.Items.get(zItem.save());
|
||||
let item = new Zotero.Item();
|
||||
Zotero.Utilities.itemFromCSLJSON(item, jsonNote);
|
||||
|
||||
assert.equal(zItem.getField('title'), jsonNote.title, 'title imported correctly');
|
||||
assert.equal(item.getField('title'), jsonNote.title, 'title imported correctly');
|
||||
});
|
||||
it("should import exported standalone attachment", function() {
|
||||
let file = getTestDataDirectory();
|
||||
file.append("empty.pdf");
|
||||
|
||||
let attachment = Zotero.Items.get(Zotero.Attachments.importFromFile(file));
|
||||
it("should import exported standalone attachment", function* () {
|
||||
let attachment = yield importFileAttachment("empty.pdf");
|
||||
attachment.setField('title', 'Empty');
|
||||
attachment.setField('accessDate', '2001-02-03 12:13:14');
|
||||
attachment.setField('url', 'http://example.com');
|
||||
attachment.setNote('Note');
|
||||
yield attachment.saveTx();
|
||||
|
||||
attachment.save();
|
||||
let jsonAttachment = yield Zotero.Utilities.itemToCSLJSON(attachment);
|
||||
|
||||
let jsonAttachment = Zotero.Utilities.itemToCSLJSON(attachment);
|
||||
let item = new Zotero.Item();
|
||||
Zotero.Utilities.itemFromCSLJSON(item, jsonAttachment);
|
||||
|
||||
let zItem = new Zotero.Item();
|
||||
Zotero.Utilities.itemFromCSLJSON(zItem, jsonAttachment);
|
||||
zItem = Zotero.Items.get(zItem.save());
|
||||
|
||||
assert.equal(zItem.getField('title'), jsonAttachment.title, 'title imported correctly');
|
||||
assert.equal(item.getField('title'), jsonAttachment.title, 'title imported correctly');
|
||||
});
|
||||
>>>>>>> 4.0:test/tests/utilities.js
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue
Block a user