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