mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
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
This commit is contained in:
parent
e39a109060
commit
26166deb0c
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
||||
|
@ -146,4 +146,5 @@
|
||||
+process ipa_tests.js
|
||||
+process ordered_map_tests.js
|
||||
+process widget_tests.js
|
||||
+process ip_tests.js
|
||||
+process ip_tests.js
|
||||
+process utils_tests.js
|
24
install/ui/test/utils_tests.html
Normal file
24
install/ui/test/utils_tests.html
Normal file
@ -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>
|
136
install/ui/test/utils_tests.js
Normal file
136
install/ui/test/utils_tests.js
Normal file
@ -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');
|
||||
});
|
Loading…
Reference in New Issue
Block a user