commit d80aa97ebd777ac8c1e9b4e495fd8375e82efd68
parent 1777fd16f02dc0d4930f82b62218d223818f812c
Author: Dan Stillman <dstillman@zotero.org>
Date: Thu, 21 Sep 2017 23:03:30 -0400
Restore related-items tests for Zotero.Translate.ItemGetter
Diffstat:
1 file changed, 82 insertions(+), 65 deletions(-)
diff --git a/test/tests/translateTest.js b/test/tests/translateTest.js
@@ -1072,67 +1072,73 @@ describe("Zotero.Translate.ItemGetter", function() {
assert.equal(translatorItem.collections.length, 1, 'item in a single nested collection lists one collection');
assert.equal(translatorItem.collections[0], collections[2].key, 'item in a single collection identifies correct collection');
}));
- // it('should return item relations in expected format', Zotero.Promise.coroutine(function* () {
- // let getter = new Zotero.Translate.ItemGetter();
- // let items;
+
+ it('should return item relations in expected format', Zotero.Promise.coroutine(function* () {
+ let getter = new Zotero.Translate.ItemGetter();
+ let items;
- // yield Zotero.DB.executeTransaction(function* () {
- // items = [
- // new Zotero.Item('journalArticle'), // Item with no relations
+ yield Zotero.DB.executeTransaction(function* () {
+ items = [
+ new Zotero.Item('journalArticle'), // Item with no relations
+
+ new Zotero.Item('journalArticle'), // Bidirectional relations
+ new Zotero.Item('journalArticle'), // between these items
+
+ new Zotero.Item('journalArticle'), // This item is related to two items below
+ new Zotero.Item('journalArticle'), // But this item is not related to the item below
+ new Zotero.Item('journalArticle')
+ ];
+ yield Zotero.Promise.all(items.map(item => item.save()));
- // new Zotero.Item('journalArticle'), // Relation set on this item
- // new Zotero.Item('journalArticle'), // To this item
+ yield items[1].addRelatedItem(items[2]);
+ yield items[2].addRelatedItem(items[1]);
- // new Zotero.Item('journalArticle'), // This item is related to two items below
- // new Zotero.Item('journalArticle'), // But this item is not related to the item below
- // new Zotero.Item('journalArticle')
- // ];
- // yield Zotero.Promise.all(items.map(item => item.save()));
-
- // yield items[1].addRelatedItem(items[2].id);
-
- // yield items[3].addRelatedItem(items[4].id);
- // yield items[3].addRelatedItem(items[5].id);
- // });
+ yield items[3].addRelatedItem(items[4]);
+ yield items[4].addRelatedItem(items[3]);
+ yield items[3].addRelatedItem(items[5]);
+ yield items[5].addRelatedItem(items[3]);
+ });
- // getter._itemsLeft = items.slice();
+ getter._itemsLeft = items.slice();
- // let translatorItem = getter.nextItem();
- // assert.isObject(translatorItem.relations, 'item with no relations has a relations object');
- // assert.equal(Object.keys(translatorItem.relations).length, 0, 'item with no relations does not list any relations');
+ let translatorItem = getter.nextItem();
+ assert.isObject(translatorItem.relations, 'item with no relations has a relations object');
+ assert.equal(Object.keys(translatorItem.relations).length, 0, 'item with no relations does not list any relations');
- // translatorItem = getter.nextItem();
- // assert.isObject(translatorItem.relations, 'item that is the subject of a single relation has a relations object');
- // assert.equal(Object.keys(translatorItem.relations).length, 1, 'item that is the subject of a single relation list one relations predicate');
- // assert.isDefined(translatorItem.relations['dc:relation'], 'item that is the subject of a single relation uses "dc:relation" as the predicate');
- // assert.isString(translatorItem.relations['dc:relation'], 'item that is the subject of a single relation lists "dc:relation" object as a string');
- // assert.equal(translatorItem.relations['dc:relation'], Zotero.URI.getItemURI(items[2]), 'item that is the subject of a single relation identifies correct object URI');
+ translatorItem = getter.nextItem();
- // translatorItem = getter.nextItem();
- // assert.isObject(translatorItem.relations, 'item that is the object of a single relation has a relations object');
- // assert.equal(Object.keys(translatorItem.relations).length, 1, 'item that is the object of a single relation list one relations predicate');
- // assert.isDefined(translatorItem.relations['dc:relation'], 'item that is the object of a single relation uses "dc:relation" as the predicate');
- // assert.isString(translatorItem.relations['dc:relation'], 'item that is the object of a single relation lists "dc:relation" object as a string');
- // assert.equal(translatorItem.relations['dc:relation'], Zotero.URI.getItemURI(items[1]), 'item that is the object of a single relation identifies correct subject URI');
+ assert.isObject(translatorItem.relations, 'item that is the subject of a single relation has a relations object');
+ assert.equal(Object.keys(translatorItem.relations).length, 1, 'item that is the subject of a single relation lists one relations predicate');
+ assert.lengthOf(translatorItem.relations['dc:relation'], 1, 'item that is the subject of a single relation lists one "dc:relation" object');
+ assert.equal(translatorItem.relations['dc:relation'][0], Zotero.URI.getItemURI(items[2]), 'item that is the subject of a single relation identifies correct object URI');
- // translatorItem = getter.nextItem();
- // assert.isObject(translatorItem.relations, 'item that is the subject of two relations has a relations object');
- // assert.equal(Object.keys(translatorItem.relations).length, 1, 'item that is the subject of two relations list one relations predicate');
- // assert.isDefined(translatorItem.relations['dc:relation'], 'item that is the subject of two relations uses "dc:relation" as the predicate');
- // assert.isArray(translatorItem.relations['dc:relation'], 'item that is the subject of two relations lists "dc:relation" object as an array');
- // assert.equal(translatorItem.relations['dc:relation'].length, 2, 'item that is the subject of two relations lists two relations in the "dc:relation" array');
- // assert.deepEqual(translatorItem.relations['dc:relation'].sort(),
- // [Zotero.URI.getItemURI(items[4]), Zotero.URI.getItemURI(items[5])].sort(),
- // 'item that is the subject of two relations identifies correct object URIs'
- // );
+ // We currently assign these bidirectionally above, so this is a bit redundant
+ translatorItem = getter.nextItem();
+ assert.isObject(translatorItem.relations, 'item that is the object of a single relation has a relations object');
+ assert.equal(Object.keys(translatorItem.relations).length, 1, 'item that is the object of a single relation list one relations predicate');
+ assert.lengthOf(translatorItem.relations['dc:relation'], 1, 'item that is the object of a single relation lists one "dc:relation" object');
+ assert.equal(translatorItem.relations['dc:relation'][0], Zotero.URI.getItemURI(items[1]), 'item that is the object of a single relation identifies correct subject URI');
+
+ translatorItem = getter.nextItem();
+ assert.isObject(translatorItem.relations, 'item that is the subject of two relations has a relations object');
+ assert.equal(Object.keys(translatorItem.relations).length, 1, 'item that is the subject of two relations list one relations predicate');
+ assert.isDefined(translatorItem.relations['dc:relation'], 'item that is the subject of two relations uses "dc:relation" as the predicate');
+ assert.isArray(translatorItem.relations['dc:relation'], 'item that is the subject of two relations lists "dc:relation" object as an array');
+ assert.equal(translatorItem.relations['dc:relation'].length, 2, 'item that is the subject of two relations lists two relations in the "dc:relation" array');
+ assert.deepEqual(
+ translatorItem.relations['dc:relation'].sort(),
+ [Zotero.URI.getItemURI(items[4]), Zotero.URI.getItemURI(items[5])].sort(),
+ 'item that is the subject of two relations identifies correct object URIs'
+ );
- // translatorItem = getter.nextItem();
- // assert.isObject(translatorItem.relations, 'item that is the object of one relation from item with two relations has a relations object');
- // assert.equal(Object.keys(translatorItem.relations).length, 1, 'item that is the object of one relation from item with two relations list one relations predicate');
- // assert.isDefined(translatorItem.relations['dc:relation'], 'item that is the object of one relation from item with two relations uses "dc:relation" as the predicate');
- // assert.isString(translatorItem.relations['dc:relation'], 'item that is the object of one relation from item with two relations lists "dc:relation" object as a string');
- // assert.equal(translatorItem.relations['dc:relation'], Zotero.URI.getItemURI(items[3]), 'item that is the object of one relation from item with two relations identifies correct subject URI');
- // }));
+ translatorItem = getter.nextItem();
+ assert.isObject(translatorItem.relations, 'item that is the object of one relation from item with two relations has a relations object');
+ assert.equal(Object.keys(translatorItem.relations).length, 1, 'item that is the object of one relation from item with two relations list one relations predicate');
+ assert.isDefined(translatorItem.relations['dc:relation'], 'item that is the object of one relation from item with two relations uses "dc:relation" as the predicate');
+ assert.lengthOf(translatorItem.relations['dc:relation'], 1, 'item that is the object of one relation from item with two relations lists one "dc:relation" object');
+ assert.equal(translatorItem.relations['dc:relation'][0], Zotero.URI.getItemURI(items[3]), 'item that is the object of one relation from item with two relations identifies correct subject URI');
+ }));
+
it('should return standalone note in expected format', Zotero.Promise.coroutine(function* () {
let relatedItem, note, collection;
@@ -1144,9 +1150,12 @@ describe("Zotero.Translate.ItemGetter", function() {
note.setNote('Note');
note.addTag('automaticTag', 0);
note.addTag('manualTag', 1);
- // note.addRelatedItem(relatedItem.id);
+ note.addRelatedItem(relatedItem);
yield note.save();
+ relatedItem.addRelatedItem(note);
+ yield relatedItem.save();
+
collection = new Zotero.Collection;
collection.name = 'test';
yield collection.save();
@@ -1202,9 +1211,9 @@ describe("Zotero.Translate.ItemGetter", function() {
}
// Relations
- // assert.isObject(translatorNote.relations, 'has relations as object' + suffix);
- // assert.equal(translatorNote.relations['dc:relation'], Zotero.URI.getItemURI(relatedItem), 'relation is correct' + suffix);
- /** TODO: test other relations and multiple relations per predicate (should be an array) **/
+ assert.isObject(translatorNote.relations, 'has relations as object' + suffix);
+ assert.lengthOf(translatorNote.relations['dc:relation'], 1, 'has one relation' + suffix);
+ assert.equal(translatorNote.relations['dc:relation'][0], Zotero.URI.getItemURI(relatedItem), 'relation is correct' + suffix);
if (!legacy) {
// Collections
@@ -1238,7 +1247,10 @@ describe("Zotero.Translate.ItemGetter", function() {
note.addTag('manualTag', 1);
yield note.save();
- // note.addRelatedItem(relatedItem.id);
+ note.addRelatedItem(relatedItem);
+ relatedItem.addRelatedItem(note);
+ yield note.save();
+ yield relatedItem.save();
});
let legacyMode = [false, true];
@@ -1306,9 +1318,9 @@ describe("Zotero.Translate.ItemGetter", function() {
}
// Relations
- // assert.isObject(translatorNote.relations, 'has relations as object' + suffix);
- // assert.equal(translatorNote.relations['dc:relation'], Zotero.URI.getItemURI(relatedItem), 'relation is correct' + suffix);
- /** TODO: test other relations and multiple relations per predicate (should be an array) **/
+ assert.isObject(translatorNote.relations, 'has relations as object' + suffix);
+ assert.lengthOf(translatorNote.relations['dc:relation'], 1, 'has one relation' + suffix);
+ assert.equal(translatorNote.relations['dc:relation'][0], Zotero.URI.getItemURI(relatedItem), 'relation is correct' + suffix);
if (!legacy) {
// Collections
@@ -1349,11 +1361,15 @@ describe("Zotero.Translate.ItemGetter", function() {
attachment.addTag('automaticTag', 0);
attachment.addTag('manualTag', 1);
-
- // attachment.addRelatedItem(relatedItem.id);
-
+
+ attachment.addRelatedItem(relatedItem);
+
yield attachment.save();
+
+ relatedItem.addRelatedItem(attachment);
}
+
+ yield relatedItem.save();
});
let items = [ attachments[0], attachments[1], item ]; // Standalone attachments and item with child attachments
@@ -1518,8 +1534,9 @@ describe("Zotero.Translate.ItemGetter", function() {
}
// Relations
- // assert.isObject(attachment.relations, prefix + 'has relations as object' + suffix);
- // assert.equal(attachment.relations['dc:relation'], Zotero.URI.getItemURI(relatedItem), prefix + 'relation is correct' + suffix);
+ assert.isObject(attachment.relations, prefix + 'has relations as object' + suffix);
+ assert.lengthOf(attachment.relations['dc:relation'], 1, prefix + 'has one relation' + suffix);
+ assert.equal(attachment.relations['dc:relation'][0], Zotero.URI.getItemURI(relatedItem), prefix + 'relation is correct' + suffix);
/** TODO: test other relations and multiple relations per predicate (should be an array) **/
}
}