diff --git a/awx/ui/client/src/shared/filters/append.filter.js b/awx/ui/client/src/shared/filters/append.filter.js index 42860cd499..1493cf5997 100644 --- a/awx/ui/client/src/shared/filters/append.filter.js +++ b/awx/ui/client/src/shared/filters/append.filter.js @@ -1,10 +1,15 @@ export default function() { return function(string, append) { if (string) { - return string + append; + if (append) { + return string + append; + } + else { + return string; + } + } + else { + return ""; } - - return ""; }; } - diff --git a/awx/ui/client/src/shared/filters/capitalize.filter.js b/awx/ui/client/src/shared/filters/capitalize.filter.js index 7b5db1de0e..859dd367e1 100644 --- a/awx/ui/client/src/shared/filters/capitalize.filter.js +++ b/awx/ui/client/src/shared/filters/capitalize.filter.js @@ -10,11 +10,3 @@ return input; }; }]; - -// export default -// angular.module('capitalizeFilter', []).filter('capitalize', function() { -// return function(input) { -// input = input.charAt(0).toUpperCase() + input.substr(1).toLowerCase(); -// return input; -// }; -// }); diff --git a/awx/ui/client/src/shared/filters/format-epoch.filter.js b/awx/ui/client/src/shared/filters/format-epoch.filter.js index 2216249732..9d8fee351f 100644 --- a/awx/ui/client/src/shared/filters/format-epoch.filter.js +++ b/awx/ui/client/src/shared/filters/format-epoch.filter.js @@ -12,5 +12,3 @@ export default }; } ]; - - diff --git a/awx/ui/client/src/shared/filters/long-date.filter.js b/awx/ui/client/src/shared/filters/long-date.filter.js index 03f1dd8725..f2d058e3b2 100644 --- a/awx/ui/client/src/shared/filters/long-date.filter.js +++ b/awx/ui/client/src/shared/filters/long-date.filter.js @@ -7,7 +7,7 @@ export default ['moment', function(moment) { return function(input) { var date; - if(input === null){ + if(input === null || input === undefined){ return ""; }else { date = moment(input); @@ -15,23 +15,3 @@ } }; }]; - - -// function longDateFilter(moment, input) { -// var date; -// if(input === null){ -// return ""; -// }else { -// date = moment(input); -// return date.format('l LTS'); -// } -// } -// -// export default -// angular.module('longDateFilter', []) -// .filter('longDate', -// [ 'moment', -// function(moment) { -// return _.partial(longDateFilter, moment); -// } -// ]); diff --git a/awx/ui/client/src/shared/filters/prepend.filter.js b/awx/ui/client/src/shared/filters/prepend.filter.js index a9d87be94c..93bad2889d 100644 --- a/awx/ui/client/src/shared/filters/prepend.filter.js +++ b/awx/ui/client/src/shared/filters/prepend.filter.js @@ -1,9 +1,15 @@ export default function() { return function(string, prepend) { if (string) { - return prepend + string; + if(prepend) { + return prepend + string; + } + else { + return string; + } + } + else { + return ""; } - - return ""; }; } diff --git a/awx/ui/client/src/shared/filters/xss-sanitizer.filter.js b/awx/ui/client/src/shared/filters/xss-sanitizer.filter.js index 8382505725..ef1c16d32d 100644 --- a/awx/ui/client/src/shared/filters/xss-sanitizer.filter.js +++ b/awx/ui/client/src/shared/filters/xss-sanitizer.filter.js @@ -10,11 +10,3 @@ return input; }; }]; - -// export default -// angular.module('sanitizeFilter', []).filter('sanitize', function() { -// return function(input) { -// input = $("").text(input)[0].innerHTML; -// return input; -// }; -// }); diff --git a/awx/ui/tests/spec/shared/filters/append.filter-test.js b/awx/ui/tests/spec/shared/filters/append.filter-test.js new file mode 100644 index 0000000000..f8a1ddcd47 --- /dev/null +++ b/awx/ui/tests/spec/shared/filters/append.filter-test.js @@ -0,0 +1,25 @@ +'use strict'; + +describe('Filter: append', () => { + var filter; + + beforeEach(angular.mock.module('Tower')); + + beforeEach(function(){ + inject(function($injector){ + filter = $injector.get('$filter')('append'); + }); + }); + + it('should append the two parameters passed', function(){ + expect(filter("foo", "bar")).toBe("foobar"); + }); + + it('should return string if no append param passed', function(){ + expect(filter("foo")).toBe("foo"); + }); + + it('should return empty string if no params passed', function(){ + expect(filter()).toBe(""); + }); +}); diff --git a/awx/ui/tests/spec/shared/filters/capitalize.filter-test.js b/awx/ui/tests/spec/shared/filters/capitalize.filter-test.js new file mode 100644 index 0000000000..d0f939c480 --- /dev/null +++ b/awx/ui/tests/spec/shared/filters/capitalize.filter-test.js @@ -0,0 +1,20 @@ +'use strict'; + +describe('Filter: capitalize', () => { + var filter; + + beforeEach(angular.mock.module('Tower')); + + beforeEach(function(){ + inject(function($injector){ + filter = $injector.get('$filter')('capitalize'); + }); + }); + + it('should capitalize the first letter', function(){ + expect(filter("foo")).toBe("Foo"); + expect(filter("Foo")).toBe("Foo"); + expect(filter("FOO")).toBe("Foo"); + expect(filter("FoO")).toBe("Foo"); + }); +}); diff --git a/awx/ui/tests/spec/shared/filters/format-epoch.filter-test.js b/awx/ui/tests/spec/shared/filters/format-epoch.filter-test.js new file mode 100644 index 0000000000..6bc23aa51b --- /dev/null +++ b/awx/ui/tests/spec/shared/filters/format-epoch.filter-test.js @@ -0,0 +1,18 @@ +'use strict'; + +describe('Filter: formatEpoch', () => { + var filter; + + beforeEach(angular.mock.module('Tower')); + + beforeEach(function(){ + inject(function($injector){ + filter = $injector.get('$filter')('formatEpoch'); + }); + }); + + it('should convert epoch to datetime string', function(){ + expect(filter(11111)).toBe("Dec 31, 1969 10:05 PM"); + expect(filter(610430400)).toBe("May 6, 1989 12:00 AM"); + }); +}); diff --git a/awx/ui/tests/spec/shared/filters/is-empty.filter-test.js b/awx/ui/tests/spec/shared/filters/is-empty.filter-test.js new file mode 100644 index 0000000000..bbb156bf48 --- /dev/null +++ b/awx/ui/tests/spec/shared/filters/is-empty.filter-test.js @@ -0,0 +1,18 @@ +'use strict'; + +describe('Filter: isEmpty', () => { + var filter; + + beforeEach(angular.mock.module('Tower')); + + beforeEach(function(){ + inject(function($injector){ + filter = $injector.get('$filter')('isEmpty'); + }); + }); + + it('check if an object is empty', function(){ + expect(filter({})).toBe(true); + expect(filter({foo: 'bar'})).toBe(false); + }); +}); diff --git a/awx/ui/tests/spec/shared/filters/long-date.filter-test.js b/awx/ui/tests/spec/shared/filters/long-date.filter-test.js new file mode 100644 index 0000000000..579962492c --- /dev/null +++ b/awx/ui/tests/spec/shared/filters/long-date.filter-test.js @@ -0,0 +1,20 @@ +'use strict'; + +describe('Filter: longDate', () => { + var filter; + + beforeEach(angular.mock.module('Tower')); + + beforeEach(function(){ + inject(function($injector){ + filter = $injector.get('$filter')('longDate'); + }); + }); + + it('should convert the timestamp to a UI friendly date and time', function(){ + expect(filter("2017-02-13T22:00:14.106Z")).toBe("2/13/2017 5:00:14 PM"); + }); + it('should return an empty string if no timestamp is passed', function(){ + expect(filter()).toBe(""); + }); +}); diff --git a/awx/ui/tests/spec/shared/filters/prepend.filter-test.js b/awx/ui/tests/spec/shared/filters/prepend.filter-test.js new file mode 100644 index 0000000000..f22c077ecd --- /dev/null +++ b/awx/ui/tests/spec/shared/filters/prepend.filter-test.js @@ -0,0 +1,25 @@ +'use strict'; + +describe('Filter: prepend', () => { + var filter; + + beforeEach(angular.mock.module('Tower')); + + beforeEach(function(){ + inject(function($injector){ + filter = $injector.get('$filter')('prepend'); + }); + }); + + it('should prepend the second param to the first', function(){ + expect(filter("foo", "bar")).toBe("barfoo"); + }); + + it('should return string if no prepend param passed', function(){ + expect(filter("foo")).toBe("foo"); + }); + + it('should return empty string if no params passed', function(){ + expect(filter()).toBe(""); + }); +}); diff --git a/awx/ui/tests/spec/shared/filters/xss-sanitizer.filter-test.js b/awx/ui/tests/spec/shared/filters/xss-sanitizer.filter-test.js new file mode 100644 index 0000000000..88cb3458e1 --- /dev/null +++ b/awx/ui/tests/spec/shared/filters/xss-sanitizer.filter-test.js @@ -0,0 +1,17 @@ +'use strict'; + +describe('Filter: sanitize', () => { + var filter; + + beforeEach(angular.mock.module('Tower')); + + beforeEach(function(){ + inject(function($injector){ + filter = $injector.get('$filter')('sanitize'); + }); + }); + + it('should sanitize xss-vulnerable strings', function(){ + expect(filter("
foobar
")).toBe("<div>foobar</div>"); + }); +});