Skip to content

Commit

Permalink
Merge pull request #43 from mwaylabs/feature/filter-type
Browse files Browse the repository at this point in the history
add longrange filter and test cases
  • Loading branch information
Axel Hodler authored Dec 9, 2016
2 parents e3a5262 + 5230819 commit e898bc3
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 2 deletions.
29 changes: 27 additions & 2 deletions src/mw-backbone/collection/filter.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,22 @@ mwUI.Backbone.Filter = function () {
return (_.isUndefined(value) || value === null || value === '' || value.length===0 || (_.isArray(value) && _.compact(value).length===0)) ? null : object;
};

var returnNullOrObjectForMultipleValues = function (values, object) {
var hasValue = false;
if(!_.isObject(values)){
console.log(values);
throw new Error('The argument values has to be an object');
}
for(var key in values){
if(returnNullOrObjectFor(values[key], true)){
hasValue = true;
} else {
delete object[key];
}
}
return hasValue ? object : null;
};

return {
containsString: function (fieldName, value) {
return returnNullOrObjectFor(value, {
Expand Down Expand Up @@ -95,12 +111,21 @@ mwUI.Backbone.Filter = function () {
},

dateRange: function(fieldName, min, max){
return returnNullOrObjectFor(max, returnNullOrObjectFor(min, {
return returnNullOrObjectForMultipleValues({min: min, max: max}, {
type: 'dateRange',
fieldName: fieldName,
min: min,
max: max
}));
});
},

longRange: function(fieldName, min, max){
return returnNullOrObjectForMultipleValues({min: min, max: max}, {
type: 'longRange',
fieldName: fieldName,
min: min,
max: max
});
}
};

Expand Down
85 changes: 85 additions & 0 deletions src/mw-backbone/collection/filter_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
describe('Collection Selectable', function () {

beforeEach(function () {
this.filter = new mwUI.Backbone.Filter();
});

describe('dateRange Filter', function(){
it('returns dateRange filter when min and max are defined', function(){
var filter = this.filter.dateRange('xxx', 1, 5);

expect(filter).toEqual({
type: 'dateRange',
fieldName: 'xxx',
min: 1,
max: 5
});
});

it('returns dateRange filter with only min value set when only min is defined', function(){
var filter = this.filter.dateRange('xxx', 1);

expect(filter).toEqual({
type: 'dateRange',
fieldName: 'xxx',
min: 1
});
});

it('returns dateRange filter with only max value set when only min is defined', function(){
var filter = this.filter.dateRange('xxx', null, 5);

expect(filter).toEqual({
type: 'dateRange',
fieldName: 'xxx',
max: 5
});
});

it('returns no dateRange filter when neither min nor max is defined', function(){
var filter = this.filter.dateRange('xxx');

expect(filter).toEqual(null);
});
});

describe('longRange Filter', function(){
it('returns longRange filter when min and max are defined', function(){
var filter = this.filter.longRange('xxx', 1, 5);

expect(filter).toEqual({
type: 'longRange',
fieldName: 'xxx',
min: 1,
max: 5
});
});

it('returns longRange filter with only min value set when only min is defined', function(){
var filter = this.filter.longRange('xxx', 1);

expect(filter).toEqual({
type: 'longRange',
fieldName: 'xxx',
min: 1
});
});

it('returns longRange filter with only max value set when only min is defined', function(){
var filter = this.filter.longRange('xxx', null, 5);

expect(filter).toEqual({
type: 'longRange',
fieldName: 'xxx',
max: 5
});
});

it('returns no longRange filter when neither min nor max is defined', function(){
var filter = this.filter.longRange('xxx');

expect(filter).toEqual(null);
});
});

});

0 comments on commit e898bc3

Please sign in to comment.