diff options
author | Petr Vobornik <pvoborni@redhat.com> | 2012-09-11 13:52:10 +0200 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2012-09-19 11:09:09 +0200 |
commit | 26166deb0c3a9938eeb94725705d49d259aa6e70 (patch) | |
tree | d4bf0e63a61224de35b6e74b67f471bfb4ea4901 /install | |
parent | e39a109060ce8b92919c00aebd83a682a039d9b5 (diff) | |
download | freeipa-26166deb0c3a9938eeb94725705d49d259aa6e70.tar.gz freeipa-26166deb0c3a9938eeb94725705d49d259aa6e70.tar.xz freeipa-26166deb0c3a9938eeb94725705d49d259aa6e70.zip |
Fix integer validation when boundary value is empty string
There was an error in number validation check. If boundary value was an empty string, validation of a number always failed. This patch fixes the problem by not performing the check in these cases.
https://fedorahosted.org/freeipa/ticket/3066
Diffstat (limited to 'install')
-rw-r--r-- | install/ui/field.js | 4 | ||||
-rw-r--r-- | install/ui/ipa.js | 5 | ||||
-rw-r--r-- | install/ui/test/all_tests.html | 1 | ||||
-rw-r--r-- | install/ui/test/index.html | 1 | ||||
-rw-r--r-- | install/ui/test/jsl.conf | 3 | ||||
-rw-r--r-- | install/ui/test/utils_tests.html | 24 | ||||
-rw-r--r-- | install/ui/test/utils_tests.js | 136 |
7 files changed, 171 insertions, 3 deletions
diff --git a/install/ui/field.js b/install/ui/field.js index 42da6f92c..c5c999e68 100644 --- a/install/ui/field.js +++ b/install/ui/field.js @@ -448,13 +448,13 @@ IPA.metadata_validator = function(spec) { if (number) { - if (metadata.minvalue !== undefined && Number(value) < Number(metadata.minvalue)) { + if (IPA.defined(metadata.minvalue, true) && Number(value) < Number(metadata.minvalue)) { message = IPA.messages.widget.validation.min_value; message = message.replace('${value}', metadata.minvalue); return that.false_result(message); } - if (metadata.maxvalue !== undefined && Number(value) > Number(metadata.maxvalue)) { + if (IPA.defined(metadata.maxvalue, true) && Number(value) > Number(metadata.maxvalue)) { message = IPA.messages.widget.validation.max_value; message = message.replace('${value}', metadata.maxvalue); return that.false_result(message); diff --git a/install/ui/ipa.js b/install/ui/ipa.js index a2c4c08d6..bd25aeae2 100644 --- a/install/ui/ipa.js +++ b/install/ui/ipa.js @@ -2021,6 +2021,11 @@ IPA.is_empty = function(value) { return empty; }; +IPA.defined = function(value, check_empty_str) { + return value !== null && value !== undefined && + ((check_empty_str && value !== '') || !check_empty_str); +}; + IPA.array_diff = function(a, b) { if (a === b || (!a && !b)) return false; diff --git a/install/ui/test/all_tests.html b/install/ui/test/all_tests.html index 5a5eae54b..e9061b6ca 100644 --- a/install/ui/test/all_tests.html +++ b/install/ui/test/all_tests.html @@ -32,6 +32,7 @@ <script type="text/javascript" src="aci_tests.js"></script> <script type="text/javascript" src="widget_tests.js"></script> <script type="text/javascript" src="ip_tests.js"></script> + <script type="text/javascript" src="utils_tests.js"></script> </head> <body> <h1 id="qunit-header">Complete Test Suite</h1> diff --git a/install/ui/test/index.html b/install/ui/test/index.html index 1b623d40f..0a135188e 100644 --- a/install/ui/test/index.html +++ b/install/ui/test/index.html @@ -34,6 +34,7 @@ <li><a href="aci_tests.html">Access Control Interface Test Suite</a> <li><a href="widget_tests.html">Widget Test Suite</a> <li><a href="ip_tests.html">IP Addresses Test Suite</a> + <li><a href="utils_tests.html">Utils Test Suite</a> </ul> </div> diff --git a/install/ui/test/jsl.conf b/install/ui/test/jsl.conf index 4654b714f..768a295f1 100644 --- a/install/ui/test/jsl.conf +++ b/install/ui/test/jsl.conf @@ -146,4 +146,5 @@ +process ipa_tests.js +process ordered_map_tests.js +process widget_tests.js -+process ip_tests.js
\ No newline at end of file ++process ip_tests.js ++process utils_tests.js
\ No newline at end of file diff --git a/install/ui/test/utils_tests.html b/install/ui/test/utils_tests.html new file mode 100644 index 000000000..5b81cc359 --- /dev/null +++ b/install/ui/test/utils_tests.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> + <title>IPA utils test suite</title> + <link rel="stylesheet" href="qunit.css" type="text/css" media="screen"> + <script type="text/javascript" src="../jquery.js"></script> + <script type="text/javascript" src="../jquery.ba-bbq.js"></script> + <script type="text/javascript" src="../jquery-ui.js"></script> + <script type="text/javascript" src="../jquery.ordered-map.js"></script> + <script type="text/javascript" src="qunit.js"></script> + <script type="text/javascript" src="../ipa.js"></script> + <script type="text/javascript" src="../widget.js"></script> + <script type="text/javascript" src="../field.js"></script> + <script type="text/javascript" src="utils_tests.js"></script> +</head> +<body> + <h1 id="qunit-header">IPA utils test suite</h1> + <h2 id="qunit-banner"></h2> + <div id="qunit-testrunner-toolbar"></div> + <h2 id="qunit-userAgent"></h2> + <ol id="qunit-tests"></ol> + <div id="qunit-fixture"></div> +</body> +</html>
\ No newline at end of file diff --git a/install/ui/test/utils_tests.js b/install/ui/test/utils_tests.js new file mode 100644 index 000000000..ff4fd2a3b --- /dev/null +++ b/install/ui/test/utils_tests.js @@ -0,0 +1,136 @@ +/* Authors: + * Petr Vobornik <pvoborni@redhat.com> + * + * Copyright (C) 2012 Red Hat + * see file 'COPYING' for use and warranty information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +var old; + +module('utils',{ + + setup: function() { + old = IPA.messages; + IPA.messages = { + widget: { + validation: { + integer: "", + decimal: "", + min_value: "", + max_value: "", + pattern_errmsg: "" + } + } + }; + }, + teardown: function() { + IPA.messages = old; + } +}); + +test('Testing metadata validator', function() { + + // using strings as values because it is an output of inputs + + var validator = IPA.build({ + factory: IPA.metadata_validator + }); + + var metadata = { + type: 'int', + maxvalue: 300, + minvalue: 30 + }; + + var context = { metadata: metadata }; + + var value; + + value = "50"; + ok(validator.validate(value, context).valid, 'Checking lower maximun, alphabetically higher'); + + value = "200"; + ok(validator.validate(value, context).valid, 'Checking higher minimum, alphabetically lower'); + + value = "29"; + ok(!validator.validate(value, context).valid, 'Checking below minimum'); + + value = "301"; + ok(!validator.validate(value, context).valid, 'Checking above maximum'); + + context.metadata.minvalue = 0; + value = "-1"; + ok(!validator.validate(value, context).valid, 'Checking zero minimum - below'); + value = "0"; + ok(validator.validate(value, context).valid, 'Checking zero minimum - above'); + value = "1"; + ok(validator.validate(value, context).valid, 'Checking zero minimum - same'); + + context.metadata = { + type: 'int', + maxvalue: "", + minvalue: "" + }; + + ok(validator.validate(value, context).valid, 'Checking empty strings as boundaries'); + + context.metadata = { + type: 'int', + maxvalue: null, + minvalue: null + }; + ok(validator.validate(value, context).valid, 'Checking null as boundaries'); + + context.metadata = { + type: 'int', + maxvalue: undefined, + minvalue: undefined + }; + ok(validator.validate(value, context).valid, 'Checking undefined as boundaries'); + + context.metadata = { + type: 'Decimal', + maxvalue: "10.333", + minvalue: "-10.333" + }; + + value = "10.333"; + ok(validator.validate(value, context).valid, 'Decimal: checking maximum'); + value = "10.3331"; + ok(!validator.validate(value, context).valid, 'Decimal: checking maximum - invalid'); + + value = "-10.333"; + ok(validator.validate(value, context).valid, 'Decimal: checking minimum'); + value = "-10.3331"; + ok(!validator.validate(value, context).valid, 'Decimal: checking minimum - invalid'); +}); + +test('Testing IPA.defined', function() { + + // positive + same(IPA.defined({}), true, 'Object'); + same(IPA.defined(0), true, 'Zero number'); + same(IPA.defined(1), true, 'Some number'); + same(IPA.defined(false), true, 'false'); + same(IPA.defined(true), true, 'true'); + same(IPA.defined(function(){}), true, 'function'); + same(IPA.defined(''), true, 'Empty string - not checking'); + + // negative + same(IPA.defined('', true), false, 'Empty string - checking'); + same(IPA.defined(undefined), false, 'undefined'); + same(IPA.defined(null), false, 'null'); +});
\ No newline at end of file |