www

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

advancedSearchTest.js (8211B)


      1 "use strict";
      2 
      3 describe("Advanced Search", function () {
      4 	var win, zp;
      5 	
      6 	before(function* () {
      7 		yield resetDB({
      8 			thisArg: this,
      9 			skipBundledFiles: true
     10 		});
     11 		win = yield loadZoteroPane();
     12 		zp = win.ZoteroPane;
     13 	});
     14 	
     15 	after(function () {
     16 		win.close();
     17 	});
     18 	
     19 	it("should perform a search", function* () {
     20 		var item = yield createDataObject('item', { setTitle: true });
     21 		
     22 		var promise = waitForWindow('chrome://zotero/content/advancedSearch.xul');
     23 		zp.openAdvancedSearchWindow();
     24 		var searchWin = yield promise;
     25 		
     26 		// Add condition
     27 		var searchBox = searchWin.document.getElementById('zotero-search-box');
     28 		
     29 		var s = new Zotero.Search();
     30 		s.addCondition('title', 'is', item.getField('title'))
     31 		searchBox.search = s;
     32 		
     33 		// Run search and wait for results
     34 		var o = searchWin.ZoteroAdvancedSearch;
     35 		var deferred = Zotero.Promise.defer();
     36 		o.search();
     37 		var iv = o.itemsView;
     38 		yield iv.waitForLoad();
     39 		
     40 		// Check results
     41 		assert.equal(iv.rowCount, 1);
     42 		var index = iv.getRowIndexByID(item.id);
     43 		assert.isNumber(index);
     44 		
     45 		searchWin.close();
     46 		
     47 		item.eraseTx();
     48 	});
     49 	
     50 	describe("Conditions", function () {
     51 		var searchWin, searchBox, conditions;
     52 		
     53 		before(function* () {
     54 			var promise = waitForWindow('chrome://zotero/content/advancedSearch.xul');
     55 			zp.openAdvancedSearchWindow();
     56 			searchWin = yield promise;
     57 			searchBox = searchWin.document.getElementById('zotero-search-box');
     58 			conditions = searchBox.id('conditions');
     59 		});
     60 		
     61 		after(function () {
     62 			searchWin.close();
     63 		});
     64 		
     65 		describe("Collection", function () {
     66 			it("should show collections and saved searches", function* () {
     67 				var col1 = yield createDataObject('collection', { name: "A" });
     68 				var col2 = yield createDataObject('collection', { name: "C", parentID: col1.id });
     69 				var col3 = yield createDataObject('collection', { name: "D", parentID: col2.id });
     70 				var col4 = yield createDataObject('collection', { name: "B" });
     71 				var search1 = yield createDataObject('search', { name: "A" });
     72 				var search2 = yield createDataObject('search', { name: "B" });
     73 				
     74 				// Add condition
     75 				var s = new Zotero.Search();
     76 				s.addCondition('title', 'is', '');
     77 				searchBox.search = s;
     78 				
     79 				var searchCondition = conditions.firstChild;
     80 				var conditionsMenu = searchCondition.id('conditionsmenu');
     81 				var valueMenu = searchCondition.id('valuemenu');
     82 				
     83 				assert.isTrue(valueMenu.hidden);
     84 				// Select 'Collection' condition
     85 				for (let i = 0; i < conditionsMenu.itemCount; i++) {
     86 					let menuitem = conditionsMenu.getItemAtIndex(i);
     87 					if (menuitem.value == 'collection') {
     88 						menuitem.click();
     89 						break;
     90 					}
     91 				}
     92 				
     93 				assert.isFalse(valueMenu.hidden);
     94 				assert.equal(valueMenu.itemCount, 6);
     95 				var valueMenuItem = valueMenu.getItemAtIndex(1);
     96 				assert.equal(valueMenuItem.getAttribute('label'), "- " + col2.name);
     97 				assert.equal(valueMenuItem.getAttribute('value'), "C" + col2.key);
     98 				valueMenuItem = valueMenu.getItemAtIndex(2);
     99 				assert.equal(valueMenuItem.getAttribute('label'), "    - " + col3.name);
    100 				assert.equal(valueMenuItem.getAttribute('value'), "C" + col3.key);
    101 				valueMenuItem = valueMenu.getItemAtIndex(4);
    102 				assert.equal(valueMenuItem.getAttribute('label'), search1.name);
    103 				assert.equal(valueMenuItem.getAttribute('value'), "S" + search1.key);
    104 				valueMenuItem = valueMenu.getItemAtIndex(5);
    105 				assert.equal(valueMenuItem.getAttribute('label'), search2.name);
    106 				assert.equal(valueMenuItem.getAttribute('value'), "S" + search2.key);
    107 				
    108 				yield Zotero.Collections.erase([col1.id, col2.id, col3.id, col4.id]);
    109 				yield Zotero.Searches.erase([search1.id, search2.id]);
    110 			});
    111 			
    112 			it("should be selected for 'savedSearch' condition", function* () {
    113 				var search = yield createDataObject('search', { name: "A" });
    114 				
    115 				var s = new Zotero.Search();
    116 				s.addCondition('savedSearch', 'is', search.key);
    117 				searchBox.search = s;
    118 				
    119 				var searchCondition = conditions.firstChild;
    120 				var conditionsMenu = searchCondition.id('conditionsmenu');
    121 				var valueMenu = searchCondition.id('valuemenu');
    122 				
    123 				assert.equal(conditionsMenu.selectedItem.value, 'collection');
    124 				assert.isFalse(valueMenu.hidden);
    125 				assert.equal(valueMenu.selectedItem.value, "S" + search.key);
    126 				
    127 				yield search.eraseTx();
    128 			});
    129 			
    130 			it("should set 'savedSearch' condition when a search is selected", function* () {
    131 				var collection = yield createDataObject('collection', { name: "A" });
    132 				var search = yield createDataObject('search', { name: "B" });
    133 				
    134 				var s = new Zotero.Search();
    135 				s.addCondition('title', 'is', '');
    136 				searchBox.search = s;
    137 				
    138 				var searchCondition = conditions.firstChild;
    139 				var conditionsMenu = searchCondition.id('conditionsmenu');
    140 				var valueMenu = searchCondition.id('valuemenu');
    141 				
    142 				// Select 'Collection' condition
    143 				for (let i = 0; i < conditionsMenu.itemCount; i++) {
    144 					let menuitem = conditionsMenu.getItemAtIndex(i);
    145 					if (menuitem.value == 'collection') {
    146 						menuitem.click();
    147 						break;
    148 					}
    149 				}
    150 				for (let i = 0; i < valueMenu.itemCount; i++) {
    151 					let menuitem = valueMenu.getItemAtIndex(i);
    152 					if (menuitem.getAttribute('value') == "S" + search.key) {
    153 						menuitem.click();
    154 						break;
    155 					}
    156 				}
    157 				
    158 				searchBox.updateSearch();
    159 				var condition = searchBox.search.getConditions()[0];
    160 				assert.equal(condition.condition, 'savedSearch');
    161 				assert.equal(condition.value, search.key);
    162 				
    163 				yield collection.eraseTx();
    164 				yield search.eraseTx();
    165 			});
    166 			
    167 			it("should update when the library is changed", function* () {
    168 				var group = yield getGroup();
    169 				var groupLibraryID = group.libraryID;
    170 				
    171 				var collection1 = yield createDataObject('collection', { name: "A" });
    172 				var search1 = yield createDataObject('search', { name: "B" });
    173 				var collection2 = yield createDataObject('collection', { name: "C", libraryID: groupLibraryID });
    174 				var search2 = yield createDataObject('search', { name: "D", libraryID: groupLibraryID });
    175 				
    176 				var s = new Zotero.Search();
    177 				s.addCondition('title', 'is', '');
    178 				searchBox.search = s;
    179 				
    180 				var searchCondition = conditions.firstChild;
    181 				var conditionsMenu = searchCondition.id('conditionsmenu');
    182 				var valueMenu = searchCondition.id('valuemenu');
    183 				
    184 				// Select 'Collection' condition
    185 				for (let i = 0; i < conditionsMenu.itemCount; i++) {
    186 					let menuitem = conditionsMenu.getItemAtIndex(i);
    187 					if (menuitem.value == 'collection') {
    188 						menuitem.click();
    189 						break;
    190 					}
    191 				}
    192 				for (let i = 0; i < valueMenu.itemCount; i++) {
    193 					let menuitem = valueMenu.getItemAtIndex(i);
    194 					if (menuitem.getAttribute('value') == "S" + search1.key) {
    195 						menuitem.click();
    196 						break;
    197 					}
    198 				}
    199 				assert.equal(valueMenu.value, "S" + search1.key);
    200 				
    201 				var libraryMenu = searchWin.document.getElementById('libraryMenu');
    202 				for (let i = 0; i < libraryMenu.itemCount; i++) {
    203 					let menuitem = libraryMenu.getItemAtIndex(i);
    204 					// Switch to group library
    205 					if (menuitem.value == groupLibraryID) {
    206 						menuitem.click();
    207 						break;
    208 					}
    209 				}
    210 				
    211 				var values = [];
    212 				valueMenu = searchCondition.id('valuemenu')
    213 				assert.equal(valueMenu.value, "C" + collection2.key);
    214 				for (let i = 0; i < valueMenu.itemCount; i++) {
    215 					let menuitem = valueMenu.getItemAtIndex(i);
    216 					values.push(menuitem.getAttribute('value'));
    217 				}
    218 				assert.notInclude(values, "C" + collection1.key);
    219 				assert.notInclude(values, "S" + search1.key);
    220 				assert.include(values, "C" + collection2.key);
    221 				assert.include(values, "S" + search2.key);
    222 				
    223 				yield Zotero.Collections.erase([collection1.id, collection2.id]);
    224 				yield Zotero.Searches.erase([search1.id, search2.id]);
    225 			});
    226 		});
    227 		
    228 		describe("Saved Search", function () {
    229 			it("shouldn't appear", function* () {
    230 				var searchCondition = conditions.firstChild;
    231 				var conditionsMenu = searchCondition.id('conditionsmenu');
    232 				
    233 				// Make sure "Saved Search" isn't present
    234 				for (let i = 0; i < conditionsMenu.itemCount; i++) {
    235 					let menuitem = conditionsMenu.getItemAtIndex(i);
    236 					if (menuitem.value == 'savedSearch') {
    237 						assert.fail();
    238 					}
    239 				}
    240 			});
    241 		});
    242 	});
    243 });