Skip to content

Commit

Permalink
Add validation condition (#10)
Browse files Browse the repository at this point in the history
Add validation condition
  • Loading branch information
NBZ4live committed Jun 11, 2019
2 parents 91b770f + 5238e0e commit 39a885d
Show file tree
Hide file tree
Showing 19 changed files with 167 additions and 25 deletions.
3 changes: 2 additions & 1 deletion config/conditional-actions.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
'conditions' => [
'AllOfCondition' => ConditionalActions\Entities\Conditions\AllOfCondition::class,
'OneOfCondition' => ConditionalActions\Entities\Conditions\OneOfCondition::class,
'TrueCondition' => ConditionalActions\Entities\Conditions\TrueCondition::class,
'TrueCondition' => ConditionalActions\Entities\Conditions\TrueCondition::class,
'ValidationCondition' => ConditionalActions\Entities\Conditions\ValidationCondition::class,
],
'actions' => [
'UpdateStateAttributeAction' => ConditionalActions\Entities\Actions\UpdateStateAttributeAction::class,
Expand Down
9 changes: 9 additions & 0 deletions src/ConditionalActionException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace ConditionalActions;

use Exception;

class ConditionalActionException extends Exception
{
}
8 changes: 8 additions & 0 deletions src/Contracts/TargetProviders/ProvidesValidationData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

namespace ConditionalActions\Contracts\TargetProviders;

interface ProvidesValidationData
{
public function getValidationData(): array;
}
36 changes: 36 additions & 0 deletions src/Entities/Conditions/ValidationCondition.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

namespace ConditionalActions\Entities\Conditions;

use ConditionalActions\ConditionalActionException;
use ConditionalActions\Contracts\StateContract;
use ConditionalActions\Contracts\TargetContract;
use ConditionalActions\Contracts\TargetProviders\ProvidesValidationData;
use Illuminate\Support\Facades\Validator;

class ValidationCondition extends BaseCondition
{
/**
* Runs condition check.
*
* @param TargetContract|ProvidesValidationData $target
* @param StateContract $state
*
* @throws ConditionalActionException
*
* @return bool
*/
public function check(TargetContract $target, StateContract $state): bool
{
if (!($target instanceof ProvidesValidationData)) {
throw new ConditionalActionException(
'The target does not implemented ProvidesValidationData contract',
400
);
}

$validator = Validator::make($target->getValidationData(), $this->parameters ?? []);

return !$validator->fails();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
use Tests\Helpers\Dummy\DummySucceedCondition;
use Tests\Helpers\Dummy\DummyTestHelper;

class TestCase extends OrchestraTestCase
class ConditionalActionsTestCase extends OrchestraTestCase
{
use DummyTestHelper;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Tests;

class EloquentTestCase extends TestCase
class EloquentConditionalActionsTestCase extends ConditionalActionsTestCase
{
protected function setUp()
{
Expand Down
4 changes: 2 additions & 2 deletions tests/Feature/ConditionalActionManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

use ConditionalActions\Entities\Eloquent\Action;
use ConditionalActions\Entities\Eloquent\Condition;
use Tests\EloquentTestCase;
use Tests\EloquentConditionalActionsTestCase;
use Tests\Helpers\Dummy\DummyEloquentModel;
use Tests\Helpers\Dummy\DummyEloquentTarget;

class ConditionalActionManagerTest extends EloquentTestCase
class ConditionalActionManagerTest extends EloquentConditionalActionsTestCase
{
public function test_run_conditional_actions_succeeded()
{
Expand Down
4 changes: 2 additions & 2 deletions tests/Feature/Entities/Eloquent/ConditionActionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
use Illuminate\Support\Carbon;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpFoundation\Response;
use Tests\EloquentTestCase;
use Tests\EloquentConditionalActionsTestCase;

class ConditionActionTest extends EloquentTestCase
class ConditionActionTest extends EloquentConditionalActionsTestCase
{
/** @var Carbon */
private $now = '2019-01-05 10:00:00';
Expand Down
4 changes: 2 additions & 2 deletions tests/Feature/Entities/Eloquent/ConditionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
use Illuminate\Http\Response;
use Illuminate\Support\Carbon;
use Illuminate\Validation\ValidationException;
use Tests\EloquentTestCase;
use Tests\EloquentConditionalActionsTestCase;

class ConditionTest extends EloquentTestCase
class ConditionTest extends EloquentConditionalActionsTestCase
{
/** @var Carbon */
private $now = '2019-01-05 10:00:00';
Expand Down
4 changes: 2 additions & 2 deletions tests/Feature/Http/Conditions/ActionsControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
use Illuminate\Support\Carbon;
use Mockery;
use Symfony\Component\HttpFoundation\Response;
use Tests\TestCase;
use Tests\ConditionalActionsTestCase;

class ActionsControllerTest extends TestCase
class ActionsControllerTest extends ConditionalActionsTestCase
{
/** @var Mockery\MockInterface */
private $actionRepositoryMock;
Expand Down
4 changes: 2 additions & 2 deletions tests/Feature/Http/Conditions/ConditionsControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
use Illuminate\Support\Carbon;
use Mockery;
use Symfony\Component\HttpFoundation\Response;
use Tests\TestCase;
use Tests\ConditionalActionsTestCase;

class ConditionsControllerTest extends TestCase
class ConditionsControllerTest extends ConditionalActionsTestCase
{
/** @var Mockery\MockInterface */
private $conditionRepositoryMock;
Expand Down
4 changes: 2 additions & 2 deletions tests/Feature/Repositories/EloquentActionRepositoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
use ConditionalActions\Entities\Eloquent\Condition;
use ConditionalActions\Exceptions\ActionNotFoundException;
use ConditionalActions\Repositories\EloquentActionRepository;
use Tests\EloquentTestCase;
use Tests\EloquentConditionalActionsTestCase;

class EloquentActionRepositoryTest extends EloquentTestCase
class EloquentActionRepositoryTest extends EloquentConditionalActionsTestCase
{
/** @var EloquentActionRepository */
private $actionsRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
use ConditionalActions\Entities\Eloquent\Condition;
use ConditionalActions\Exceptions\ConditionNotFoundException;
use ConditionalActions\Repositories\EloquentConditionRepository;
use Tests\EloquentTestCase;
use Tests\EloquentConditionalActionsTestCase;

class EloquentConditionRepositoryTest extends EloquentTestCase
class EloquentConditionRepositoryTest extends EloquentConditionalActionsTestCase
{
/** @var EloquentConditionRepository */
private $conditionsRepository;
Expand Down
4 changes: 2 additions & 2 deletions tests/Feature/Traits/EloquentTargetTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
use ConditionalActions\Contracts\ConditionContract;
use ConditionalActions\Entities\Eloquent\Condition;
use Illuminate\Support\Collection;
use Tests\EloquentTestCase;
use Tests\EloquentConditionalActionsTestCase;
use Tests\Helpers\Dummy\DummyEloquentModel;

class EloquentTargetTest extends EloquentTestCase
class EloquentTargetTest extends EloquentConditionalActionsTestCase
{
public function test_get_root_and_children_conditions()
{
Expand Down
22 changes: 22 additions & 0 deletions tests/Helpers/Dummy/DummyValidationDataTarget.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Tests\Helpers\Dummy;

use ConditionalActions\Contracts\TargetProviders\ProvidesValidationData;

class DummyValidationDataTarget extends DummyTarget implements ProvidesValidationData
{
/** @var array */
private $validationData;

public function __construct(array $validationData)
{
parent::__construct();
$this->validationData = $validationData;
}

public function getValidationData(): array
{
return $this->validationData;
}
}
4 changes: 2 additions & 2 deletions tests/Unit/ConditionActionManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
use ConditionalActions\ConditionalActionManager;
use Tests\Helpers\Dummy\DummyAction;
use Tests\Helpers\Dummy\DummyTarget;
use Tests\TestCase;
use Tests\ConditionalActionsTestCase;

class ConditionActionManagerTest extends TestCase
class ConditionActionManagerTest extends ConditionalActionsTestCase
{
/** @var ConditionalActionManager */
private $manager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

use ConditionalActions\Entities\Actions\UpdateStateAttributeAction;
use ConditionalActions\Entities\State;
use Tests\TestCase;
use Tests\ConditionalActionsTestCase;

class UpdateStateAttributeActionTest extends TestCase
class UpdateStateAttributeActionTest extends ConditionalActionsTestCase
{
public function test_state_attribute_updated()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
use Tests\Helpers\Dummy\DummyAction;
use Tests\Helpers\Dummy\DummyCondition;
use Tests\Helpers\Dummy\DummyTarget;
use Tests\TestCase;
use Tests\ConditionalActionsTestCase;

class HasChildrenConditionsTestCase extends TestCase
class HasChildrenConditionsTestCase extends ConditionalActionsTestCase
{
/** @var ConditionContract */
protected $testCondition;
Expand Down
66 changes: 66 additions & 0 deletions tests/Unit/Entities/Conditions/ValidationConditionTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php

namespace Tests\Unit\Entities\Conditions;

use ConditionalActions\ConditionalActionException;
use ConditionalActions\Entities\Conditions\ValidationCondition;
use Tests\ConditionalActionsTestCase;
use Tests\Helpers\Dummy\DummyTarget;
use Tests\Helpers\Dummy\DummyValidationDataTarget;

class ValidationConditionTest extends ConditionalActionsTestCase
{
/** @var ValidationCondition */
private $condition;

protected function setUp(): void
{
parent::setUp();
$this->condition = new ValidationCondition();
}

/**
* @param array $validationData
* @param array $conditionParams
* @param bool $result
*
* @dataProvider provider_test_validation
* @throws ConditionalActionException
*/
public function test_validation(array $validationData, array $conditionParams, bool $result)
{
$this->condition->setParameters($conditionParams);
$target = new DummyValidationDataTarget($validationData);

$this->assertEquals($result, $this->condition->check($target, $target->getInitialState()));
}

public function provider_test_validation(): array
{
return [
'succeeded' => [
['foo' => ['bar' => 10]],
['foo.bar' => 'required|int|max:9'],
false,
],
'failed' => [
['foo' => ['bar' => 10]],
['foo.bar' => 'required|int|max:11'],
true,
],
];
}

/**
* @throws ConditionalActionException
*/
public function test_exception_when_provides_validation_data_contract_not_implemented()
{
$target = new DummyTarget();

$this->expectException(ConditionalActionException::class);
$this->expectExceptionCode(400);

$this->condition->check($target, $target->getInitialState());
}
}

0 comments on commit 39a885d

Please sign in to comment.