From: Tom Clegg Date: Wed, 31 Dec 2014 06:56:10 +0000 (-0500) Subject: 4831: Set initial values for filters. X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/67422ce6e67a59d6c7d100b26f1e377e6eeaa870?hp=3c48f7bf7a14ff938c523a560a0ebc4cd629a090 4831: Set initial values for filters. --- diff --git a/apps/backstage/app/filter.js b/apps/backstage/app/filter.js index 1da615917e..19c95bc732 100644 --- a/apps/backstage/app/filter.js +++ b/apps/backstage/app/filter.js @@ -9,8 +9,12 @@ function FilterAnyText() { this.view = function(ctrl) { return m('.input-group.input-group-sm', [ m('input.form-control[type="text"][placeholder="Search"]', - {oninput: m.withAttr('value', setFilter)}), + {value: getFilter(), + oninput: m.withAttr('value', setFilter)}), ]); + function getFilter() { + return ctrl.currentFilter() ? ctrl.currentFilter()[2].replace(/^%(.*)%$/, '$1') : '' + } function setFilter(value) { ctrl.currentFilter('any', 'ilike', '%'+value+'%') } @@ -29,10 +33,10 @@ function FilterObjectType(opts) { ]), m('ul.dropdown-menu[role="menu"]', [ m('li', [ - m('a[href="#"]', {onclick: ctrl.currentFilter.bind(ctrl, opts.attr, 'is_a', 'arvados#collection')}, 'Collection'), + m('a[href="#"][data-value="arvados#collection"]', {onclick: ctrl.currentFilter.bind(ctrl, opts.attr, 'is_a', 'arvados#collection')}, 'Collection'), ]), m('li', [ - m('a[href="#"]', {onclick: ctrl.currentFilter.bind(ctrl, opts.attr, 'is_a', 'arvados#pipelineInstance')}, 'Pipeline instance'), + m('a[href="#"][data-value="arvados#pipelineInstance"]', {onclick: ctrl.currentFilter.bind(ctrl, opts.attr, 'is_a', 'arvados#pipelineInstance')}, 'Pipeline instance'), ]), ]), ]), diff --git a/apps/backstage/test/mithril-dom.js b/apps/backstage/test/mithril-dom.js new file mode 100644 index 0000000000..6b92b49aa0 --- /dev/null +++ b/apps/backstage/test/mithril-dom.js @@ -0,0 +1,10 @@ +var $ = require('jquery') +, m = require('mithril'); + +module.exports = md; + +function md(cell) { + var div = $('
')[0]; + m.render(div, cell); + return div.children; +} diff --git a/apps/backstage/test/unit/filter.js b/apps/backstage/test/unit/filter.js index 375647157d..d8ffd5ed0f 100644 --- a/apps/backstage/test/unit/filter.js +++ b/apps/backstage/test/unit/filter.js @@ -1,40 +1,57 @@ -var mq = require('mithril-query') -, Filter = require('app/filter') +var Filter = require('app/filter') +, chai = require('chai') +, m = require('mithril') +, md = require('test/mithril-dom') +, mq = require('mithril-query') , sinon = require('sinon') +, $ = require('jquery') +, c = chai , s = sinon; suite('Filter', function() { - function setup(filterClass) { + function setup(filterClass, initialFilter) { var f = {}; f.tested = new filterClass({attr: 'fakeAttr'}); - f.cfSpy = sinon.spy(); + f.cfSpy = sinon.stub(); + f.cfSpy.withArgs().returns(initialFilter); f.ctrl = {currentFilter: f.cfSpy}; f.rendered = f.tested.view(f.ctrl); f.domfrag = mq(f.rendered); return f; } suite('AnyText', function() { - test.skip("default is existing filter value", function() { - // TODO + test("default is existing filter value", function() { + f = setup(Filter.AnyText, ['any','ilike','%quux%']); + f.rendered = f.tested.view(f.ctrl); + f.domfrag = mq(f.rendered); + c.assert.equal(f.domfrag.first('input').attrs.value, "quux"); }); test("fires currentFilter on input change", function() { f = setup(Filter.AnyText); - // XXX: should call once to retrieve current filter value - // s.assert.calledWith(f.cfSpy); f.domfrag.setValue('input', 'qux'); // Should call again to set new filter value s.assert.calledWith(f.cfSpy, 'any', 'ilike', '%qux%'); }); }); suite('ObjectType', function() { - test.skip("default is existing filter value", function() { - // TODO + test("default is existing filter value", function() { + f = setup(Filter.ObjectType, ['fakeAttr','is_a','arvados#collection']); + f.rendered = f.tested.view(f.ctrl); + f.md = md(f.rendered); + c.assert.lengthOf($('.dropdown-toggle:contains(Type)', f.md), 0); + c.assert.lengthOf($('.dropdown-toggle:contains(collection)', f.md), 1); + }); + test("show generic label if no existing filter value", function() { + f = setup(Filter.ObjectType, undefined); + f.rendered = f.tested.view(f.ctrl); + f.md = md(f.rendered); + c.assert.lengthOf($('.dropdown-toggle:contains(Type)', f.md), 1); }); test("fires currentFilter on selection", function() { f = setup(Filter.ObjectType); - f.domfrag.click('li a'); + f.domfrag.click('li a[data-value="arvados#pipelineInstance"]'); s.assert.calledOn(f.cfSpy, f.ctrl); - s.assert.calledWith(f.cfSpy, 'fakeAttr', 'is_a', 'arvados#collection'); + s.assert.calledWith(f.cfSpy, 'fakeAttr', 'is_a', 'arvados#pipelineInstance'); }); }); });