Show saved searches under "Collection" search condition
With icons to identify collections and searches Also: - `savedSearch` search condition in general - Clean up some search window code - Reorganize search tests
This commit is contained in:
parent
8f38b01712
commit
9c52ebdf8b
10 changed files with 380 additions and 140 deletions
|
@ -4,6 +4,10 @@ describe("Advanced Search", function () {
|
|||
var win, zp;
|
||||
|
||||
before(function* () {
|
||||
yield resetDB({
|
||||
thisArg: this,
|
||||
skipBundledFiles: true
|
||||
});
|
||||
win = yield loadZoteroPane();
|
||||
zp = win.ZoteroPane;
|
||||
});
|
||||
|
@ -40,5 +44,141 @@ describe("Advanced Search", function () {
|
|||
assert.isNumber(index);
|
||||
|
||||
searchWin.close();
|
||||
|
||||
item.eraseTx();
|
||||
});
|
||||
|
||||
describe("Conditions", function () {
|
||||
var searchWin, searchBox, conditions;
|
||||
|
||||
before(function* () {
|
||||
var promise = waitForWindow('chrome://zotero/content/advancedSearch.xul');
|
||||
zp.openAdvancedSearchWindow();
|
||||
searchWin = yield promise;
|
||||
searchBox = searchWin.document.getElementById('zotero-search-box');
|
||||
conditions = searchBox.id('conditions');
|
||||
});
|
||||
|
||||
after(function () {
|
||||
searchWin.close();
|
||||
});
|
||||
|
||||
describe("Collection", function () {
|
||||
it("should show collections and saved searches", function* () {
|
||||
var col1 = yield createDataObject('collection', { name: "A" });
|
||||
var col2 = yield createDataObject('collection', { name: "C", parentID: col1.id });
|
||||
var col3 = yield createDataObject('collection', { name: "D", parentID: col2.id });
|
||||
var col4 = yield createDataObject('collection', { name: "B" });
|
||||
var search1 = yield createDataObject('search', { name: "A" });
|
||||
var search2 = yield createDataObject('search', { name: "B" });
|
||||
|
||||
// Add condition
|
||||
var s = new Zotero.Search();
|
||||
s.addCondition('title', 'is', '');
|
||||
searchBox.search = s;
|
||||
|
||||
var searchCondition = conditions.firstChild;
|
||||
var conditionsMenu = searchCondition.id('conditionsmenu');
|
||||
var valueMenu = searchCondition.id('valuemenu');
|
||||
|
||||
assert.isTrue(valueMenu.hidden);
|
||||
// Select 'Collection' condition
|
||||
for (let i = 0; i < conditionsMenu.itemCount; i++) {
|
||||
let menuitem = conditionsMenu.getItemAtIndex(i);
|
||||
if (menuitem.value == 'collection') {
|
||||
menuitem.click();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
assert.isFalse(valueMenu.hidden);
|
||||
assert.equal(valueMenu.itemCount, 6);
|
||||
var valueMenuItem = valueMenu.getItemAtIndex(1);
|
||||
assert.equal(valueMenuItem.getAttribute('label'), "- " + col2.name);
|
||||
assert.equal(valueMenuItem.getAttribute('value'), "C" + col2.key);
|
||||
valueMenuItem = valueMenu.getItemAtIndex(2);
|
||||
assert.equal(valueMenuItem.getAttribute('label'), " - " + col3.name);
|
||||
assert.equal(valueMenuItem.getAttribute('value'), "C" + col3.key);
|
||||
valueMenuItem = valueMenu.getItemAtIndex(4);
|
||||
assert.equal(valueMenuItem.getAttribute('label'), search1.name);
|
||||
assert.equal(valueMenuItem.getAttribute('value'), "S" + search1.key);
|
||||
valueMenuItem = valueMenu.getItemAtIndex(5);
|
||||
assert.equal(valueMenuItem.getAttribute('label'), search2.name);
|
||||
assert.equal(valueMenuItem.getAttribute('value'), "S" + search2.key);
|
||||
|
||||
yield Zotero.Collections.erase([col1.id, col2.id, col3.id, col4.id]);
|
||||
yield Zotero.Searches.erase([search1.id, search2.id]);
|
||||
});
|
||||
|
||||
it("should be selected for 'savedSearch' condition", function* () {
|
||||
var search = yield createDataObject('search', { name: "A" });
|
||||
|
||||
var s = new Zotero.Search();
|
||||
s.addCondition('savedSearch', 'is', search.key);
|
||||
searchBox.search = s;
|
||||
|
||||
var searchCondition = conditions.firstChild;
|
||||
var conditionsMenu = searchCondition.id('conditionsmenu');
|
||||
var valueMenu = searchCondition.id('valuemenu');
|
||||
|
||||
assert.equal(conditionsMenu.selectedItem.value, 'collection');
|
||||
assert.isFalse(valueMenu.hidden);
|
||||
assert.equal(valueMenu.selectedItem.value, "S" + search.key);
|
||||
|
||||
yield search.eraseTx();
|
||||
});
|
||||
|
||||
it("should set 'savedSearch' condition when a search is selected", function* () {
|
||||
var collection = yield createDataObject('collection', { name: "A" });
|
||||
var search = yield createDataObject('search', { name: "B" });
|
||||
|
||||
var s = new Zotero.Search();
|
||||
s.addCondition('title', 'is', '');
|
||||
searchBox.search = s;
|
||||
|
||||
var searchCondition = conditions.firstChild;
|
||||
var conditionsMenu = searchCondition.id('conditionsmenu');
|
||||
var valueMenu = searchCondition.id('valuemenu');
|
||||
|
||||
// Select 'Collection' condition
|
||||
for (let i = 0; i < conditionsMenu.itemCount; i++) {
|
||||
let menuitem = conditionsMenu.getItemAtIndex(i);
|
||||
if (menuitem.value == 'collection') {
|
||||
menuitem.click();
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < valueMenu.itemCount; i++) {
|
||||
let menuitem = valueMenu.getItemAtIndex(i);
|
||||
if (menuitem.getAttribute('value') == "S" + search.key) {
|
||||
menuitem.click();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
searchBox.updateSearch();
|
||||
var condition = searchBox.search.getConditions()[0];
|
||||
assert.equal(condition.condition, 'savedSearch');
|
||||
assert.equal(condition.value, search.key);
|
||||
|
||||
yield collection.eraseTx();
|
||||
yield search.eraseTx();
|
||||
});
|
||||
});
|
||||
|
||||
describe("Saved Search", function () {
|
||||
it("shouldn't appear", function* () {
|
||||
var searchCondition = conditions.firstChild;
|
||||
var conditionsMenu = searchCondition.id('conditionsmenu');
|
||||
|
||||
// Make sure "Saved Search" isn't present
|
||||
for (let i = 0; i < conditionsMenu.itemCount; i++) {
|
||||
let menuitem = conditionsMenu.getItemAtIndex(i);
|
||||
if (menuitem.value == 'savedSearch') {
|
||||
assert.fail();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue