supportTest.js (7302B)
1 describe("Support Functions for Unit Testing", function() { 2 describe("resetDB", function() { 3 it("should restore the DB to factory settings", function* () { 4 yield resetDB({ 5 thisArg: this 6 }); 7 assert.equal((yield Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM items")), 0); 8 }); 9 }); 10 describe("loadSampleData", function() { 11 it("should load data from file", function() { 12 let data = loadSampleData('journalArticle'); 13 assert.isObject(data, 'loaded data object'); 14 assert.isNotNull(data); 15 assert.isAbove(Object.keys(data).length, 0, 'data object is not empty'); 16 }); 17 }); 18 describe("populateDBWithSampleData", function() { 19 it("should populate database with data", Zotero.Promise.coroutine(function* () { 20 let data = loadSampleData('journalArticle'); 21 yield populateDBWithSampleData(data); 22 23 let skipFields = ['id', 'itemType', 'creators']; // Special comparisons 24 25 for (let itemName in data) { 26 let item = data[itemName]; 27 assert.isAbove(item.id, 0, 'assigned new item ID'); 28 29 let zItem = yield Zotero.Items.getAsync(item.id); 30 assert.ok(zItem, 'inserted item into database'); 31 32 // Compare item type 33 assert.equal(item.itemType, Zotero.ItemTypes.getName(zItem.itemTypeID), 'inserted item has the same item type'); 34 35 // Compare simple properties 36 for (let prop in item) { 37 if (skipFields.indexOf(prop) != -1) continue; 38 39 // Using base-mapped fields 40 let field = zItem.getField(prop, false, true); 41 if (prop === "accessDate") field = Zotero.Date.sqlToISO8601(field); 42 assert.equal(field, item[prop], 'inserted item property has the same value as sample data'); 43 } 44 45 if (item.creators) { 46 // Compare creators 47 for (let i=0; i<item.creators.length; i++) { 48 let creator = item.creators[i]; 49 let zCreator = zItem.getCreator(i); 50 assert.ok(zCreator, 'creator was added to item'); 51 assert.equal(creator.firstName, zCreator.firstName, 'first names match'); 52 assert.equal(creator.lastName, zCreator.lastName, 'last names match'); 53 assert.equal(creator.creatorType, Zotero.CreatorTypes.getName(zCreator.creatorTypeID), 'creator types match'); 54 } 55 } 56 } 57 })); 58 it("should populate items with tags", Zotero.Promise.coroutine(function* () { 59 let data = yield populateDBWithSampleData({ 60 itemWithTags: { 61 itemType: "journalArticle", 62 tags: [ 63 { tag: "automatic tag", type: 0 }, 64 { tag: "manual tag", type: 1} 65 ] 66 } 67 }); 68 69 let zItem = yield Zotero.Items.getAsync(data.itemWithTags.id); 70 assert.ok(zItem, 'inserted item with tags into database'); 71 72 73 let tags = data.itemWithTags.tags; 74 for (let i=0; i<tags.length; i++) { 75 let tagID = Zotero.Tags.getID(tags[i].tag); 76 assert.ok(tagID, '"' + tags[i].tag + '" tag was inserted into the database'); 77 assert.ok(zItem.hasTag(tags[i].tag), '"' + tags[i].tag + '" tag was assigned to item'); 78 } 79 })); 80 }); 81 describe("generateAllTypesAndFieldsData", function() { 82 it("should generate all types and fields data", function() { 83 let data = generateAllTypesAndFieldsData(); 84 assert.isObject(data, 'created data object'); 85 assert.isNotNull(data); 86 assert.isAbove(Object.keys(data).length, 0, 'data object is not empty'); 87 }); 88 it("all types and fields sample data should be up to date", function() { 89 assert.deepEqual(loadSampleData('allTypesAndFields'), generateAllTypesAndFieldsData()); 90 }); 91 }); 92 describe("generateItemJSONData", function() { 93 it("item JSON data should be up to date", Zotero.Promise.coroutine(function* () { 94 let oldData = loadSampleData('itemJSON'), 95 newData = yield generateItemJSONData(); 96 97 assert.isObject(newData, 'created data object'); 98 assert.isNotNull(newData); 99 assert.isAbove(Object.keys(newData).length, 0, 'data object is not empty'); 100 101 // Ignore data that is not stable, but make sure it is set 102 let ignoreFields = ['dateAdded', 'dateModified', 'key']; 103 for (let itemName in oldData) { 104 for (let i=0; i<ignoreFields.length; i++) { 105 let field = ignoreFields[i] 106 if (oldData[itemName][field] !== undefined) { 107 assert.isDefined(newData[itemName][field], field + ' is set'); 108 delete oldData[itemName][field]; 109 delete newData[itemName][field]; 110 } 111 } 112 } 113 114 assert.deepEqual(oldData, newData); 115 })); 116 }); 117 // describe("generateCiteProcJSExportData", function() { 118 // let citeURL = Zotero.Prefs.get("export.citePaperJournalArticleURL"); 119 // before(function () { 120 // Zotero.Prefs.set("export.citePaperJournalArticleURL", true); 121 // }); 122 // after(function() { 123 // Zotero.Prefs.set("export.citePaperJournalArticleURL", citeURL); 124 // }); 125 126 // it("all citeproc-js export data should be up to date", Zotero.Promise.coroutine(function* () { 127 // let oldData = loadSampleData('citeProcJSExport'), 128 // newData = yield generateCiteProcJSExportData(); 129 130 // assert.isObject(newData, 'created data object'); 131 // assert.isNotNull(newData); 132 // assert.isAbove(Object.keys(newData).length, 0, 'citeproc-js export object is not empty'); 133 134 // // Ignore item ID 135 // for (let itemName in oldData) { 136 // delete oldData[itemName].id; 137 // } 138 // for (let itemName in newData) { 139 // delete newData[itemName].id; 140 // } 141 142 // assert.deepEqual(oldData, newData, 'citeproc-js export data has not changed'); 143 // })); 144 // }); 145 describe("generateTranslatorExportData", function() { 146 it("legacy mode data should be up to date", Zotero.Promise.coroutine(function* () { 147 let oldData = loadSampleData('translatorExportLegacy'), 148 newData = yield generateTranslatorExportData(true); 149 150 assert.isObject(newData, 'created data object'); 151 assert.isNotNull(newData); 152 assert.isAbove(Object.keys(newData).length, 0, 'translator export object is not empty'); 153 154 // Ignore data that is not stable, but make sure it is set 155 let ignoreFields = ['itemID', 'dateAdded', 'dateModified', 'uri', 'key']; 156 for (let itemName in oldData) { 157 for (let i=0; i<ignoreFields.length; i++) { 158 let field = ignoreFields[i] 159 if (oldData[itemName][field] !== undefined) { 160 assert.isDefined(newData[itemName][field], field + ' is set'); 161 delete oldData[itemName][field]; 162 delete newData[itemName][field]; 163 } 164 } 165 } 166 167 assert.deepEqual(oldData, newData, 'translator export data has not changed'); 168 })); 169 it("data should be up to date", Zotero.Promise.coroutine(function* () { 170 let oldData = loadSampleData('translatorExport'), 171 newData = yield generateTranslatorExportData(); 172 173 assert.isObject(newData, 'created data object'); 174 assert.isNotNull(newData); 175 assert.isAbove(Object.keys(newData).length, 0, 'translator export object is not empty'); 176 177 // Ignore data that is not stable, but make sure it is set 178 let ignoreFields = ['dateAdded', 'dateModified', 'uri']; 179 for (let itemName in oldData) { 180 for (let i=0; i<ignoreFields.length; i++) { 181 let field = ignoreFields[i] 182 if (oldData[itemName][field] !== undefined) { 183 assert.isDefined(newData[itemName][field], field + ' is set'); 184 delete oldData[itemName][field]; 185 delete newData[itemName][field]; 186 } 187 } 188 } 189 190 assert.deepEqual(oldData, newData, 'translator export data has not changed'); 191 })); 192 }); 193 });