www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

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