diff --git a/app/Http/ValidationRules/ValidAmount.php b/app/Http/ValidationRules/ValidAmount.php index 4f5fe1700de3..d2832e83a046 100644 --- a/app/Http/ValidationRules/ValidAmount.php +++ b/app/Http/ValidationRules/ValidAmount.php @@ -26,7 +26,8 @@ class ValidAmount implements Rule */ public function passes($attribute, $value) { - return (bool) is_float($value) || preg_match('#[^0-9]#',$value); + return trim($value, '-1234567890.,') === ''; + } /** diff --git a/tests/Integration/Validation/AmountValidationRuleTest.php b/tests/Integration/Validation/AmountValidationRuleTest.php new file mode 100644 index 000000000000..82a9b06c0a69 --- /dev/null +++ b/tests/Integration/Validation/AmountValidationRuleTest.php @@ -0,0 +1,143 @@ + [new ValidAmount()] + ]; + + $data = [ + 'amount' => 1, + ]; + + $v = $this->app['validator']->make($data, $rules); + $this->assertTrue($v->passes()); + } + + public function testInvalidAmountValid() + { + $rules = [ + 'amount' => [new ValidAmount()] + ]; + + $data = [ + 'amount' => "aa", + ]; + + $v = $this->app['validator']->make($data, $rules); + $this->assertFalse($v->passes()); + } + + public function testIllegalChars() + { + $rules = [ + 'amount' => [new ValidAmount()] + ]; + + $data = [ + 'amount' => "5+5", + ]; + + $v = $this->app['validator']->make($data, $rules); + $this->assertFalse($v->passes()); + } + + public function testIllegalCharsNaked() + { + $rules = [ + 'amount' => [new ValidAmount()] + ]; + + $data = [ + 'amount' => 5+5, //resolves as 10 - but in practice, i believe this amount is wrapped in quotes so interpreted as a string + ]; + + $v = $this->app['validator']->make($data, $rules); + $this->assertTrue($v->passes()); + } + + + public function testinValidScenario1() + { + $rules = [ + 'amount' => [new ValidAmount()] + ]; + + $data = [ + 'amount' => "-10x", + ]; + + $v = $this->app['validator']->make($data, $rules); + $this->assertFalse($v->passes()); + } + + public function testValidScenario2() + { + $rules = [ + 'amount' => [new ValidAmount()] + ]; + + $data = [ + 'amount' => -10, + ]; + + $v = $this->app['validator']->make($data, $rules); + $this->assertTrue($v->passes()); + } + + + public function testValidScenario3() + { + $rules = [ + 'amount' => [new ValidAmount()] + ]; + + $data = [ + 'amount' => "-10", + ]; + + $v = $this->app['validator']->make($data, $rules); + $this->assertTrue($v->passes()); + } + + public function testInValidScenario4() + { + $rules = [ + 'amount' => [new ValidAmount()] + ]; + + $data = [ + 'amount' => "-0 1", + ]; + + $v = $this->app['validator']->make($data, $rules); + $this->assertFalse($v->passes()); + } +} + +