Skip to content
This repository was archived by the owner on Dec 4, 2020. It is now read-only.

Commit bd03e3e

Browse files
committed
- date range filter first version
- added karma configuration file
1 parent cf49650 commit bd03e3e

File tree

3 files changed

+175
-0
lines changed

3 files changed

+175
-0
lines changed

karma.conf.js

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// Karma configuration
2+
// Generated on Mon Jul 21 2014 22:01:28 GMT-0500 (CDT)
3+
4+
module.exports = function(config) {
5+
config.set({
6+
7+
// base path that will be used to resolve all patterns (eg. files, exclude)
8+
basePath: '',
9+
10+
11+
// frameworks to use
12+
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
13+
frameworks: ['jasmine'],
14+
15+
16+
// list of files / patterns to load in the browser
17+
files: [
18+
'bower_components/angular/angular.js',
19+
'bower_components/angular-mocks/angular-mocks.js',
20+
'bower_components/moment/moment.js',
21+
'src/*.js',
22+
'test/*-spec.js'
23+
],
24+
25+
26+
// list of files to exclude
27+
exclude: [
28+
],
29+
30+
31+
// preprocess matching files before serving them to the browser
32+
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
33+
preprocessors: {
34+
},
35+
36+
37+
// test results reporter to use
38+
// possible values: 'dots', 'progress'
39+
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
40+
reporters: ['progress'],
41+
42+
43+
// web server port
44+
port: 9876,
45+
46+
47+
// enable / disable colors in the output (reporters and logs)
48+
colors: true,
49+
50+
51+
// level of logging
52+
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
53+
logLevel: config.LOG_INFO,
54+
55+
56+
// enable / disable watching file and executing tests whenever any file changes
57+
autoWatch: true,
58+
59+
60+
// start these browsers
61+
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
62+
browsers: ['Chrome'],
63+
64+
65+
// Continuous Integration mode
66+
// if true, Karma captures browsers, runs the tests and exits
67+
singleRun: false
68+
});
69+
};

src/angular-date-range-filter.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
angular.module('cpc.dateRangeFilter', [])
2+
.filter('dateRange', function () {
3+
return function (arr, property, start, end) {
4+
if (!angular.isArray(arr)) {
5+
return arr;
6+
}
7+
8+
var check = function (date) {
9+
var dateAsMoment = moment(date);
10+
11+
if (start && dateAsMoment.isBefore(start, 'day')) {
12+
return false;
13+
}
14+
15+
return !(end && dateAsMoment.isAfter(end, 'day'));
16+
};
17+
18+
var filtered = [];
19+
20+
for (var i = 0; i < arr.length; i++) {
21+
if (check(arr[i][property])) {
22+
filtered.push(arr[i]);
23+
}
24+
}
25+
26+
return filtered;
27+
};
28+
});
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
describe('date range filter', function () {
2+
var today = moment(),
3+
yesterday = moment().subtract(1, 'days'),
4+
tomorrow = moment().add(1, 'days'),
5+
dateRangeFilter;
6+
7+
beforeEach(module('cpc.dateRangeFilter'));
8+
9+
beforeEach(inject(function ($filter) {
10+
dateRangeFilter = $filter('dateRange');
11+
}));
12+
13+
it('should return arr if not an array', function () {
14+
var object = {};
15+
16+
var result = dateRangeFilter(object);
17+
18+
expect(result).toBe(object);
19+
});
20+
21+
it('should not include an element when its date is before start date', function () {
22+
var arr = [
23+
{date: yesterday},
24+
{date: today}
25+
];
26+
27+
var result = dateRangeFilter(arr, 'date', tomorrow);
28+
29+
expect(result.length).toBeFalsy();
30+
});
31+
32+
it('should include an element when date is after start and end date not defined', function () {
33+
var arr = [
34+
{date: tomorrow},
35+
{date: yesterday}
36+
];
37+
38+
var result = dateRangeFilter(arr, 'date', today);
39+
40+
expect(result.length).toBe(1);
41+
expect(result).toContain(arr[0]);
42+
});
43+
44+
it('should not include an element when its date is after end date', function () {
45+
var arr = [
46+
{date: tomorrow},
47+
{date: today}
48+
];
49+
50+
var result = dateRangeFilter(arr, 'date', null, yesterday);
51+
52+
expect(result.length).toBeFalsy();
53+
});
54+
55+
it('should include an element when date is before end date and start date not defined', function () {
56+
var arr = [
57+
{date: tomorrow},
58+
{date: yesterday}
59+
];
60+
61+
var result = dateRangeFilter(arr, 'date', null, today);
62+
63+
expect(result.length).toBe(1);
64+
expect(result).toContain(arr[1]);
65+
});
66+
67+
it('should include an element when date is between start and end date', function () {
68+
var arr = [
69+
{date: today},
70+
{date: today}
71+
];
72+
73+
var result = dateRangeFilter(arr, 'date', yesterday, tomorrow);
74+
75+
expect(result).toContain(arr[0]);
76+
expect(result).toContain(arr[1]);
77+
});
78+
});

0 commit comments

Comments
 (0)