From 42a41b05404a51162a5c2a7397e94e80bdb6cfed Mon Sep 17 00:00:00 2001 From: Wolfy-J Date: Sun, 30 Jul 2017 12:36:07 +0300 Subject: [PATCH 01/11] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index c38e48a8a..bb80e2ad4 100644 --- a/README.md +++ b/README.md @@ -185,8 +185,6 @@ $post->save(); $this->transaction->store($post); ``` -> This example uses IoC scope to properly resolve ORM connection manager, "no magic" way - `$postSource->create([]);` - And much more: [Skeleton App](https://github.com/spiral-php/application) | [Guide](https://github.com/spiral-php/guide) Tests From 206bbec3fc1a04ed2c99efba0c18dcf7bafd3cb6 Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Tue, 1 Aug 2017 10:42:14 +0300 Subject: [PATCH 02/11] pr / checker condition included --- .../Validation/CheckerConditionInterface.php | 21 +++++ .../Prototypes/AbstractCheckerCondition.php | 23 +++++ source/Spiral/Validation/Validator.php | 83 +++++++++++++++++++ .../Spiral/Validation/ValidatorInterface.php | 16 ++++ 4 files changed, 143 insertions(+) create mode 100644 source/Spiral/Validation/CheckerConditionInterface.php create mode 100644 source/Spiral/Validation/Prototypes/AbstractCheckerCondition.php diff --git a/source/Spiral/Validation/CheckerConditionInterface.php b/source/Spiral/Validation/CheckerConditionInterface.php new file mode 100644 index 000000000..e02c1d6a7 --- /dev/null +++ b/source/Spiral/Validation/CheckerConditionInterface.php @@ -0,0 +1,21 @@ +validator = $validator; + + return $condition; + } +} \ No newline at end of file diff --git a/source/Spiral/Validation/Validator.php b/source/Spiral/Validation/Validator.php index 58f77c55a..6921c6a71 100644 --- a/source/Spiral/Validation/Validator.php +++ b/source/Spiral/Validation/Validator.php @@ -101,6 +101,13 @@ class Validator extends Component implements ValidatorInterface, LoggerAwareInte */ protected $container = null; + /** + * Validation context. Not validated. + * + * @var mixed + */ + protected $context; + /** * {@inheritdoc} * @@ -211,6 +218,22 @@ public function getErrors(): array return $this->registeredErrors + $this->errors; } + /** + * {@inheritdoc} + */ + public function setContext($context) + { + $this->context = $context; + } + + /** + * {@inheritdoc} + */ + public function getContext() + { + return $this->context; + } + /** * Receive field from context data or return default value. * @@ -260,6 +283,10 @@ protected function validate() break; } + if ($this->skipUnderEmptyCondition($rule)) { + continue; + } + $result = $this->check($field, $this->getValue($field), $condition, $arguments); if ($result === true) { @@ -504,4 +531,60 @@ private function extractData($data): array return $data; } + + /** + * Does rule have condition. + * + * @param $rule + * + * @return bool + */ + protected function skipUnderEmptyCondition($rule) + { + if (is_array($rule) && !empty($rule['condition']) && $this->hasCondition($rule['condition'])) { + $condition = $this->getCondition($rule['condition']); + if (!$condition->isMet()) { + return true; + } + } + + return false; + } + + /** + * Does checker condition class exist. + * + * @param string $name + * + * @return bool + */ + protected function hasCondition(string $name): bool + { + if (class_exists($name)) { + $condition = $this->container->get($name); + + return $condition instanceof CheckerConditionInterface; + } + + return false; + } + + /** + * Get or create instance of validation checker condition. + * + * @param string $name + * + * @return CheckerConditionInterface + * @throws ValidationException + */ + protected function getCondition(string $name): CheckerConditionInterface + { + if (!$this->hasCondition($name)) { + throw new ValidationException( + "Unable to create validation checker condition defined by '{$name}' name" + ); + } + + return $this->container->get($name)->withValidator($this); + } } \ No newline at end of file diff --git a/source/Spiral/Validation/ValidatorInterface.php b/source/Spiral/Validation/ValidatorInterface.php index 04d3ec48a..269ed3536 100644 --- a/source/Spiral/Validation/ValidatorInterface.php +++ b/source/Spiral/Validation/ValidatorInterface.php @@ -101,4 +101,20 @@ public function hasErrors(): bool; * @return array */ public function getErrors(): array; + + /** + * Get context data (not validated). + * + * @return mixed + */ + public function getContext(); + + /** + * Set context data (not validated). + * + * @param $context + * + * @return mixed + */ + public function setContext($context); } From ac44323bfd6a3941bfefce0771df9b348f218899 Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Wed, 2 Aug 2017 10:36:49 +0300 Subject: [PATCH 03/11] pr / checker condition --- .../Validation/Fixtures/IsLoadedCondition.php | 21 +++++++ tests/Validation/ValidatorTest.php | 63 ++++++++++++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 tests/Validation/Fixtures/IsLoadedCondition.php diff --git a/tests/Validation/Fixtures/IsLoadedCondition.php b/tests/Validation/Fixtures/IsLoadedCondition.php new file mode 100644 index 000000000..250b9c0b7 --- /dev/null +++ b/tests/Validation/Fixtures/IsLoadedCondition.php @@ -0,0 +1,21 @@ +validator->getContext(); + + return !empty($entity) && ($entity instanceof Record) && $entity->isLoaded(); + } +} \ No newline at end of file diff --git a/tests/Validation/ValidatorTest.php b/tests/Validation/ValidatorTest.php index 0d2fe9720..6473694df 100644 --- a/tests/Validation/ValidatorTest.php +++ b/tests/Validation/ValidatorTest.php @@ -12,12 +12,13 @@ use Psr\Log\LoggerInterface; use Spiral\Debug\LogsInterface; use Spiral\Models\DataEntity; -use Spiral\Tests\Validation\Fixtures\SimpleTestChecker; +use Spiral\Tests\Validation\Fixtures\IsLoadedCondition; use Spiral\Translator\TranslatorInterface; use Spiral\Validation\Checkers\AddressChecker; use Spiral\Validation\Checkers\TypeChecker; use Spiral\Validation\Configs\ValidatorConfig; use Spiral\Validation\Validator; +use TestApplication\Database\SampleRecord; /** * Class ValidatorTest @@ -308,4 +309,64 @@ public function testCustomErrors() $this->assertEquals(substr(AddressChecker::MESSAGES['email'], 2, -2), $validator->getErrors()['email']); } + + public function testContext() + { + $context = new \StdClass(); + $context->data = 'some context'; + + $validator = new Validator(); + $validator->setContext($context); + + $this->assertEquals($context, $validator->getContext()); + } + + public function testWithConditions() + { + $validator = new Validator( + ['email' => ['notEmpty', 'address::email']], + ['email' => 'some@email.com'], + $this->config, + $this->container + ); + + $this->assertTrue($validator->isValid()); + + $validator = new Validator( + [ + 'email' => [ + ['notEmpty', 'condition' => IsLoadedCondition::class], + ['address::email', 'condition' => IsLoadedCondition::class], + ] + ], + ['email' => null], + $this->config, + $this->container + ); + $this->assertFalse($validator->isValid()); + + $entity = new SampleRecord(); + + $validator = new Validator( + [ + 'email' => [ + ['notEmpty', 'condition' => IsLoadedCondition::class], + ['address::email', 'condition' => IsLoadedCondition::class], + ] + ], + ['email' => null], + $this->config, + $this->container + ); + $validator->setContext($entity); + $this->assertFalse($validator->isValid()); + + $validator->setContext(['some', 'context']); + $this->assertFalse($validator->isValid()); + + $entity->save(); + $validator->setContext($entity); + + $this->assertTrue($validator->isValid()); + } } \ No newline at end of file From ac2b3310930d11eae6c2594306516c7a572ec03c Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Wed, 2 Aug 2017 10:57:21 +0300 Subject: [PATCH 04/11] pr / checker condition --- tests/Validation/ValidatorTest.php | 31 ++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/tests/Validation/ValidatorTest.php b/tests/Validation/ValidatorTest.php index 6473694df..38d4a8bc4 100644 --- a/tests/Validation/ValidatorTest.php +++ b/tests/Validation/ValidatorTest.php @@ -329,7 +329,6 @@ public function testWithConditions() $this->config, $this->container ); - $this->assertTrue($validator->isValid()); $validator = new Validator( @@ -345,8 +344,6 @@ public function testWithConditions() ); $this->assertFalse($validator->isValid()); - $entity = new SampleRecord(); - $validator = new Validator( [ 'email' => [ @@ -358,15 +355,37 @@ public function testWithConditions() $this->config, $this->container ); - $validator->setContext($entity); + $validator->setContext(['some', 'context']); + //should be entity $this->assertFalse($validator->isValid()); - $validator->setContext(['some', 'context']); + $entity = new SampleRecord(); + $validator->setContext($entity); + //should be loaded $this->assertFalse($validator->isValid()); + $entity = new SampleRecord(); $entity->save(); $validator->setContext($entity); - $this->assertTrue($validator->isValid()); + + $validator = new Validator( + [ + 'email' => [ + ['notEmpty', 'condition' => 'Some\Condition'], + ['address::email', 'condition' => 'Some\Condition'], + ] + ], + ['email' => null], + $this->config, + $this->container + ); + + $entity = new SampleRecord(); + $entity->save(); + + $validator->setContext($entity); + //should exist and be instance of \Spiral\Validation\CheckerConditionInterface::class + $this->assertFalse($validator->isValid()); } } \ No newline at end of file From 03cda47d2e7ff01f3c7e410c3bc133ec5cd40fed Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Wed, 2 Aug 2017 11:02:04 +0300 Subject: [PATCH 05/11] pr / checker condition --- .../Conditions/IsLoadedConditionTest.php | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tests/Validation/Conditions/IsLoadedConditionTest.php diff --git a/tests/Validation/Conditions/IsLoadedConditionTest.php b/tests/Validation/Conditions/IsLoadedConditionTest.php new file mode 100644 index 000000000..f674ea5b1 --- /dev/null +++ b/tests/Validation/Conditions/IsLoadedConditionTest.php @@ -0,0 +1,37 @@ +container->get(IsLoadedCondition::class)->withValidator($validator); + + $this->assertFalse($condition->isMet()); + + $validator->setContext(['context']); + $this->assertFalse($condition->isMet()); + + $entity = new SampleRecord(); + $this->assertFalse($condition->isMet()); + + $entity->save(); + $this->assertTrue($condition->isMet()); + } +} \ No newline at end of file From 02f23067b1c35df16e9361a01375787a6b2410c9 Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Wed, 2 Aug 2017 11:07:26 +0300 Subject: [PATCH 06/11] pr / checker condition --- tests/Validation/ValidatorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Validation/ValidatorTest.php b/tests/Validation/ValidatorTest.php index 38d4a8bc4..4168d8b5d 100644 --- a/tests/Validation/ValidatorTest.php +++ b/tests/Validation/ValidatorTest.php @@ -315,7 +315,7 @@ public function testContext() $context = new \StdClass(); $context->data = 'some context'; - $validator = new Validator(); + $validator = new Validator([], [], $this->config, $this->container); $validator->setContext($context); $this->assertEquals($context, $validator->getContext()); From 4b853c84301fdc30343ff573662575d21c694afa Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Wed, 2 Aug 2017 11:24:23 +0300 Subject: [PATCH 07/11] pr / checker condition --- tests/Validation/Conditions/IsLoadedConditionTest.php | 4 ++++ tests/Validation/ValidatorTest.php | 3 +++ 2 files changed, 7 insertions(+) diff --git a/tests/Validation/Conditions/IsLoadedConditionTest.php b/tests/Validation/Conditions/IsLoadedConditionTest.php index f674ea5b1..4b35e957e 100644 --- a/tests/Validation/Conditions/IsLoadedConditionTest.php +++ b/tests/Validation/Conditions/IsLoadedConditionTest.php @@ -18,6 +18,10 @@ class IsLoadedConditionTest extends BaseTest { public function testIsMet() { + $this->commands->run('orm:schema', [ + '--alter' => true + ]); + $validator = new Validator(); /** @var \Spiral\Validation\CheckerConditionInterface $condition */ diff --git a/tests/Validation/ValidatorTest.php b/tests/Validation/ValidatorTest.php index 4168d8b5d..d28ad346e 100644 --- a/tests/Validation/ValidatorTest.php +++ b/tests/Validation/ValidatorTest.php @@ -14,6 +14,7 @@ use Spiral\Models\DataEntity; use Spiral\Tests\Validation\Fixtures\IsLoadedCondition; use Spiral\Translator\TranslatorInterface; +use Spiral\Validation\CheckerConditionInterface; use Spiral\Validation\Checkers\AddressChecker; use Spiral\Validation\Checkers\TypeChecker; use Spiral\Validation\Configs\ValidatorConfig; @@ -93,6 +94,8 @@ public function setUp() return new TypeChecker($this->container); case AddressChecker::class: return new AddressChecker($this->container); + case IsLoadedCondition::class: + return new IsLoadedCondition(); default: // it actually must throw NotFoundException (interface), but it will not // because there is no real reason for SomeException (interface) From d5b10cef695454c815108d8aa5d9a9088d5b22ca Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Wed, 2 Aug 2017 11:45:37 +0300 Subject: [PATCH 08/11] pr / checker condition --- .../Conditions/IsLoadedConditionTest.php | 1 + tests/Validation/ValidatorTest.php | 25 +++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/tests/Validation/Conditions/IsLoadedConditionTest.php b/tests/Validation/Conditions/IsLoadedConditionTest.php index 4b35e957e..52d9ff7f7 100644 --- a/tests/Validation/Conditions/IsLoadedConditionTest.php +++ b/tests/Validation/Conditions/IsLoadedConditionTest.php @@ -33,6 +33,7 @@ public function testIsMet() $this->assertFalse($condition->isMet()); $entity = new SampleRecord(); + $validator->setContext($entity); $this->assertFalse($condition->isMet()); $entity->save(); diff --git a/tests/Validation/ValidatorTest.php b/tests/Validation/ValidatorTest.php index d28ad346e..9d076f9be 100644 --- a/tests/Validation/ValidatorTest.php +++ b/tests/Validation/ValidatorTest.php @@ -326,6 +326,7 @@ public function testContext() public function testWithConditions() { + //Validator works $validator = new Validator( ['email' => ['notEmpty', 'address::email']], ['email' => 'some@email.com'], @@ -334,6 +335,15 @@ public function testWithConditions() ); $this->assertTrue($validator->isValid()); + $validator = new Validator( + ['email' => ['notEmpty', 'address::email']], + ['email' => null], + $this->config, + $this->container + ); + $this->assertFalse($validator->isValid()); + + //Condition will not met because no context $validator = new Validator( [ 'email' => [ @@ -345,8 +355,9 @@ public function testWithConditions() $this->config, $this->container ); - $this->assertFalse($validator->isValid()); + $this->assertTrue($validator->isValid()); + //Condition will not met because context should be entity $validator = new Validator( [ 'email' => [ @@ -359,19 +370,20 @@ public function testWithConditions() $this->container ); $validator->setContext(['some', 'context']); - //should be entity - $this->assertFalse($validator->isValid()); + $this->assertTrue($validator->isValid()); + //Condition will not met because context should be loaded entity $entity = new SampleRecord(); $validator->setContext($entity); - //should be loaded - $this->assertFalse($validator->isValid()); + $this->assertTrue($validator->isValid()); + //Condition will met and validator will fail check $entity = new SampleRecord(); $entity->save(); $validator->setContext($entity); - $this->assertTrue($validator->isValid()); + $this->assertFalse($validator->isValid()); + //Validator will fail because condition should exist and be instance of \Spiral\Validation\CheckerConditionInterface::class $validator = new Validator( [ 'email' => [ @@ -388,7 +400,6 @@ public function testWithConditions() $entity->save(); $validator->setContext($entity); - //should exist and be instance of \Spiral\Validation\CheckerConditionInterface::class $this->assertFalse($validator->isValid()); } } \ No newline at end of file From 91dd153c83fe9684b1846bb90d4035357611d71f Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Wed, 2 Aug 2017 12:40:57 +0300 Subject: [PATCH 09/11] pr / checker condition --- .../Conditions/IsLoadedConditionTest.php | 96 +++++++++++++++++++ tests/Validation/ValidatorTest.php | 84 ---------------- 2 files changed, 96 insertions(+), 84 deletions(-) diff --git a/tests/Validation/Conditions/IsLoadedConditionTest.php b/tests/Validation/Conditions/IsLoadedConditionTest.php index 52d9ff7f7..3b4f8eda8 100644 --- a/tests/Validation/Conditions/IsLoadedConditionTest.php +++ b/tests/Validation/Conditions/IsLoadedConditionTest.php @@ -11,11 +11,28 @@ use Spiral\Tests\BaseTest; use Spiral\Tests\Validation\Fixtures\IsLoadedCondition; +use Spiral\Validation\Configs\ValidatorConfig; use Spiral\Validation\Validator; use TestApplication\Database\SampleRecord; class IsLoadedConditionTest extends BaseTest { + protected function getConfig() + { + return new ValidatorConfig([ + 'emptyConditions' => [ + 'notEmpty', + 'type::notEmpty', + ], + 'checkers' => [], + 'aliases' => [ + 'notEmpty' => 'type::notEmpty', + 'email' => 'address::email', + 'url' => 'address::url', + ], + ]); + } + public function testIsMet() { $this->commands->run('orm:schema', [ @@ -39,4 +56,83 @@ public function testIsMet() $entity->save(); $this->assertTrue($condition->isMet()); } + + public function testWithConditions() + { + //Validator works + $validator = new Validator( + ['email' => ['notEmpty', 'address::email']], + ['email' => 'some@email.com'], + $this->getConfig(), + $this->container + ); + $this->assertTrue($validator->isValid()); + + $validator = new Validator( + ['email' => ['notEmpty', 'address::email']], + ['email' => null], + $this->getConfig(), + $this->container + ); + $this->assertFalse($validator->isValid()); + + //Condition will not met because no context + $validator = new Validator( + [ + 'email' => [ + ['notEmpty', 'condition' => IsLoadedCondition::class], + ['address::email', 'condition' => IsLoadedCondition::class], + ] + ], + ['email' => null], + $this->getConfig(), + $this->container + ); + $this->assertTrue($validator->isValid()); + + //Condition will not met because context should be entity + $validator = new Validator( + [ + 'email' => [ + ['notEmpty', 'condition' => IsLoadedCondition::class], + ['address::email', 'condition' => IsLoadedCondition::class], + ] + ], + ['email' => null], + $this->getConfig(), + $this->container + ); + $validator->setContext(['some', 'context']); + $this->assertTrue($validator->isValid()); + + //Condition will not met because context should be loaded entity + $entity = new SampleRecord(); + $validator->setContext($entity); + $this->assertTrue($validator->isValid()); + + //Condition will met and validator will fail check + $entity = new SampleRecord(); + $entity->save(); + $validator->setContext($entity); + $this->assertFalse($validator->isValid()); + + //Validator will fail because condition should exist and be instance of \Spiral\Validation\CheckerConditionInterface::class + $validator = new Validator( + [ + 'email' => [ + ['notEmpty', 'condition' => 'Some\Condition'], + ['address::email', 'condition' => 'Some\Condition'], + ] + ], + ['email' => null], + $this->getConfig(), + $this->container + ); + + $entity = new SampleRecord(); + $entity->save(); + + $validator->setContext($entity); + $this->assertFalse($validator->isValid()); + } } \ No newline at end of file diff --git a/tests/Validation/ValidatorTest.php b/tests/Validation/ValidatorTest.php index 9d076f9be..7db67bac9 100644 --- a/tests/Validation/ValidatorTest.php +++ b/tests/Validation/ValidatorTest.php @@ -12,14 +12,11 @@ use Psr\Log\LoggerInterface; use Spiral\Debug\LogsInterface; use Spiral\Models\DataEntity; -use Spiral\Tests\Validation\Fixtures\IsLoadedCondition; use Spiral\Translator\TranslatorInterface; -use Spiral\Validation\CheckerConditionInterface; use Spiral\Validation\Checkers\AddressChecker; use Spiral\Validation\Checkers\TypeChecker; use Spiral\Validation\Configs\ValidatorConfig; use Spiral\Validation\Validator; -use TestApplication\Database\SampleRecord; /** * Class ValidatorTest @@ -94,8 +91,6 @@ public function setUp() return new TypeChecker($this->container); case AddressChecker::class: return new AddressChecker($this->container); - case IsLoadedCondition::class: - return new IsLoadedCondition(); default: // it actually must throw NotFoundException (interface), but it will not // because there is no real reason for SomeException (interface) @@ -323,83 +318,4 @@ public function testContext() $this->assertEquals($context, $validator->getContext()); } - - public function testWithConditions() - { - //Validator works - $validator = new Validator( - ['email' => ['notEmpty', 'address::email']], - ['email' => 'some@email.com'], - $this->config, - $this->container - ); - $this->assertTrue($validator->isValid()); - - $validator = new Validator( - ['email' => ['notEmpty', 'address::email']], - ['email' => null], - $this->config, - $this->container - ); - $this->assertFalse($validator->isValid()); - - //Condition will not met because no context - $validator = new Validator( - [ - 'email' => [ - ['notEmpty', 'condition' => IsLoadedCondition::class], - ['address::email', 'condition' => IsLoadedCondition::class], - ] - ], - ['email' => null], - $this->config, - $this->container - ); - $this->assertTrue($validator->isValid()); - - //Condition will not met because context should be entity - $validator = new Validator( - [ - 'email' => [ - ['notEmpty', 'condition' => IsLoadedCondition::class], - ['address::email', 'condition' => IsLoadedCondition::class], - ] - ], - ['email' => null], - $this->config, - $this->container - ); - $validator->setContext(['some', 'context']); - $this->assertTrue($validator->isValid()); - - //Condition will not met because context should be loaded entity - $entity = new SampleRecord(); - $validator->setContext($entity); - $this->assertTrue($validator->isValid()); - - //Condition will met and validator will fail check - $entity = new SampleRecord(); - $entity->save(); - $validator->setContext($entity); - $this->assertFalse($validator->isValid()); - - //Validator will fail because condition should exist and be instance of \Spiral\Validation\CheckerConditionInterface::class - $validator = new Validator( - [ - 'email' => [ - ['notEmpty', 'condition' => 'Some\Condition'], - ['address::email', 'condition' => 'Some\Condition'], - ] - ], - ['email' => null], - $this->config, - $this->container - ); - - $entity = new SampleRecord(); - $entity->save(); - - $validator->setContext($entity); - $this->assertFalse($validator->isValid()); - } } \ No newline at end of file From b259c9e685e7992a4845a03627d6e536d4816f10 Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Wed, 2 Aug 2017 13:15:31 +0300 Subject: [PATCH 10/11] pr / checker condition --- .../Conditions/IsLoadedConditionTest.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/Validation/Conditions/IsLoadedConditionTest.php b/tests/Validation/Conditions/IsLoadedConditionTest.php index 3b4f8eda8..7735d369f 100644 --- a/tests/Validation/Conditions/IsLoadedConditionTest.php +++ b/tests/Validation/Conditions/IsLoadedConditionTest.php @@ -11,6 +11,8 @@ use Spiral\Tests\BaseTest; use Spiral\Tests\Validation\Fixtures\IsLoadedCondition; +use Spiral\Validation\Checkers\AddressChecker; +use Spiral\Validation\Checkers\TypeChecker; use Spiral\Validation\Configs\ValidatorConfig; use Spiral\Validation\Validator; use TestApplication\Database\SampleRecord; @@ -24,7 +26,10 @@ protected function getConfig() 'notEmpty', 'type::notEmpty', ], - 'checkers' => [], + 'checkers' => [ + 'type' => TypeChecker::class, + 'address' => AddressChecker::class, + ], 'aliases' => [ 'notEmpty' => 'type::notEmpty', 'email' => 'address::email', @@ -33,12 +38,17 @@ protected function getConfig() ]); } - public function testIsMet() + public function setUp() { + parent::setUp(); // TODO: Change the autogenerated stub + $this->commands->run('orm:schema', [ '--alter' => true ]); + } + public function testIsMet() + { $validator = new Validator(); /** @var \Spiral\Validation\CheckerConditionInterface $condition */ From 2cc6d4d681a116fb396ce520cac01cafc023c183 Mon Sep 17 00:00:00 2001 From: valentin v / vvval Date: Wed, 2 Aug 2017 19:01:24 +0300 Subject: [PATCH 11/11] pr / checker condition --- source/Spiral/Http/Request/RequestFilter.php | 20 +++++++++++++ tests/Http/RequestFilters/DemoRequestTest.php | 28 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/source/Spiral/Http/Request/RequestFilter.php b/source/Spiral/Http/Request/RequestFilter.php index e50913778..beca24048 100644 --- a/source/Spiral/Http/Request/RequestFilter.php +++ b/source/Spiral/Http/Request/RequestFilter.php @@ -162,4 +162,24 @@ protected function getSchema(): array return static::SCHEMA; } + + /** + * Pass context to validator. + * + * @param mixed $context + */ + public function setContext($context) + { + $this->getValidator()->setContext($context); + } + + /** + * Get context from validator. + * + * @return mixed + */ + public function getContext() + { + return $this->getValidator()->getContext(); + } } \ No newline at end of file diff --git a/tests/Http/RequestFilters/DemoRequestTest.php b/tests/Http/RequestFilters/DemoRequestTest.php index 6717ebdc8..8896c4343 100644 --- a/tests/Http/RequestFilters/DemoRequestTest.php +++ b/tests/Http/RequestFilters/DemoRequestTest.php @@ -207,4 +207,32 @@ public function testValid() $request->name = $name; $this->assertTrue($request->isValid(true)); } + + public function testContext() + { + $serverRequest = new ServerRequest(); + $serverRequest = $serverRequest->withParsedBody([ + 'name' => 'Anton', + 'address' => [ + 'countryCode' => '', + 'city' => 'San Francisco', + 'address' => 'Some street' + ], + 'files' => [ + //Iterating over data + 0 => [ + 'label' => 'Some label' + ] + ] + ]); + $this->container->bind(ServerRequestInterface::class, $serverRequest); + /** @var DemoRequest $request */ + $request = $this->container->get(DemoRequest::class); + + $context = new \stdClass(); + $context->data = 'some context'; + $request->setContext($context); + + $this->assertEquals($context, $request->getContext()); + } }