Saved search fixes
- Fix saved search editing - Refresh items list on search change - Generate correct conditions array for search JSON
This commit is contained in:
parent
62f3177d36
commit
b7b246e741
10 changed files with 157 additions and 20 deletions
|
@ -382,6 +382,10 @@ function createUnsavedDataObject(objectType, params = {}) {
|
|||
break;
|
||||
}
|
||||
|
||||
if (objectType == 'search') {
|
||||
obj.addCondition('title', 'contains', 'test');
|
||||
}
|
||||
|
||||
Zotero.Utilities.assignProps(obj, params, allowedParams);
|
||||
|
||||
return obj;
|
||||
|
|
|
@ -232,6 +232,64 @@ describe("Zotero.ItemTreeView", function() {
|
|||
yield Zotero.Items.erase(items.map(item => item.id));
|
||||
})
|
||||
|
||||
it("should update search results when items are added", function* () {
|
||||
var search = createUnsavedDataObject('search');
|
||||
var title = Zotero.Utilities.randomString();
|
||||
search.fromJSON({
|
||||
name: "Test",
|
||||
conditions: [
|
||||
{
|
||||
condition: "title",
|
||||
operator: "is",
|
||||
value: title
|
||||
}
|
||||
]
|
||||
});
|
||||
yield search.saveTx();
|
||||
|
||||
yield waitForItemsLoad(win);
|
||||
assert.equal(zp.itemsView.rowCount, 0);
|
||||
|
||||
// Add an item matching search
|
||||
var item = yield createDataObject('item', { title });
|
||||
|
||||
yield waitForItemsLoad(win);
|
||||
assert.equal(zp.itemsView.rowCount, 1);
|
||||
assert.equal(zp.itemsView.getRowIndexByID(item.id), 0);
|
||||
});
|
||||
|
||||
it("should update search results when search conditions are changed", function* () {
|
||||
var search = createUnsavedDataObject('search');
|
||||
var title1 = Zotero.Utilities.randomString();
|
||||
var title2 = Zotero.Utilities.randomString();
|
||||
search.fromJSON({
|
||||
name: "Test",
|
||||
conditions: [
|
||||
{
|
||||
condition: "title",
|
||||
operator: "is",
|
||||
value: title1
|
||||
}
|
||||
]
|
||||
});
|
||||
yield search.saveTx();
|
||||
|
||||
yield waitForItemsLoad(win);
|
||||
|
||||
// Add an item that doesn't match search
|
||||
var item = yield createDataObject('item', { title: title2 });
|
||||
yield waitForItemsLoad(win);
|
||||
assert.equal(zp.itemsView.rowCount, 0);
|
||||
|
||||
// Modify conditions to match item
|
||||
search.removeCondition(0);
|
||||
search.addCondition("title", "is", title2);
|
||||
yield search.saveTx();
|
||||
|
||||
yield waitForItemsLoad(win);
|
||||
|
||||
assert.equal(zp.itemsView.rowCount, 1);
|
||||
});
|
||||
|
||||
it("should remove items from Unfiled Items when added to a collection", function* () {
|
||||
var userLibraryID = Zotero.Libraries.userLibraryID;
|
||||
|
|
|
@ -147,4 +147,53 @@ describe("Zotero.Search", function() {
|
|||
assert.deepEqual(matches, [foobarItem.id]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("#toJSON()", function () {
|
||||
it("should output all data", function* () {
|
||||
let s = new Zotero.Search();
|
||||
s.name = "Test";
|
||||
s.addCondition('joinMode', 'any');
|
||||
s.addCondition('fulltextWord', 'contains', 'afsgagsdg');
|
||||
let json = s.toJSON();
|
||||
assert.equal(json.name, "Test");
|
||||
assert.lengthOf(json.conditions, 2);
|
||||
assert.equal(json.conditions[0].condition, 'joinMode');
|
||||
assert.equal(json.conditions[0].operator, 'any');
|
||||
assert.equal(json.conditions[1].condition, 'fulltextWord');
|
||||
assert.equal(json.conditions[1].operator, 'contains');
|
||||
assert.equal(json.conditions[1].value, 'afsgagsdg');
|
||||
});
|
||||
});
|
||||
|
||||
describe("#fromJSON()", function () {
|
||||
it("should update all data", function* () {
|
||||
let s = new Zotero.Search();
|
||||
s.name = "Test";
|
||||
s.addCondition('joinMode', 'any');
|
||||
let json = s.toJSON();
|
||||
json.name = "Test 2";
|
||||
json.conditions = [
|
||||
{
|
||||
condition: 'title',
|
||||
operator: 'contains',
|
||||
value: 'foo'
|
||||
},
|
||||
{
|
||||
condition: 'year',
|
||||
operator: 'is',
|
||||
value: '2016'
|
||||
}
|
||||
];
|
||||
s.fromJSON(json);
|
||||
assert.equal(s.name, "Test 2");
|
||||
var conditions = s.getConditions();
|
||||
assert.lengthOf(Object.keys(conditions), 2);
|
||||
assert.equal(conditions["0"].condition, 'title');
|
||||
assert.equal(conditions["0"].operator, 'contains');
|
||||
assert.equal(conditions["0"].value, 'foo');
|
||||
assert.equal(conditions["1"].condition, 'year');
|
||||
assert.equal(conditions["1"].operator, 'is');
|
||||
assert.equal(conditions["1"].value, '2016');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -449,7 +449,7 @@ describe("Zotero.Sync.Data.Engine", function () {
|
|||
break;
|
||||
|
||||
case 'search':
|
||||
assert.typeOf(cached.data.conditions, 'object');
|
||||
assert.isArray(cached.data.conditions);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -290,4 +290,24 @@ describe("ZoteroPane", function() {
|
|||
assert.equal(cv.getSelectedLibraryID(), userLibraryID);
|
||||
});
|
||||
});
|
||||
|
||||
describe("#editSelectedCollection()", function () {
|
||||
it("should edit a saved search", function* () {
|
||||
var search = yield createDataObject('search');
|
||||
var promise = waitForWindow('chrome://zotero/content/searchDialog.xul', function (win) {
|
||||
let searchBox = win.document.getElementById('search-box');
|
||||
var c = searchBox.search.getCondition(
|
||||
searchBox.search.addCondition("title", "contains", "foo")
|
||||
);
|
||||
searchBox.addCondition(c);
|
||||
Zotero.debug("ACCEPTING");
|
||||
win.document.documentElement.acceptDialog();
|
||||
});
|
||||
yield zp.editSelectedCollection();
|
||||
yield promise;
|
||||
var conditions = search.getConditions();
|
||||
Zotero.debug(conditions);
|
||||
assert.lengthOf(Object.keys(conditions), 2);
|
||||
});
|
||||
});
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue