Add Informative Validators.
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
				
					
				
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
							parent
							
								
									da847273b8
								
							
						
					
					
						commit
						7662d98bce
					
				@ -0,0 +1,47 @@
 | 
				
			||||
<?php
 | 
				
			||||
 | 
				
			||||
namespace App\Models\Validation\Messages;
 | 
				
			||||
 | 
				
			||||
use App\Models\Validation\Validators\Validator;
 | 
				
			||||
 | 
				
			||||
abstract class InformativeValidator extends Validator {
 | 
				
			||||
    protected Validator $validator;
 | 
				
			||||
    protected string $message;
 | 
				
			||||
 | 
				
			||||
    public function isCurrentValid(): bool
 | 
				
			||||
    {
 | 
				
			||||
        return $this->validator->isCurrentValid();
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function isValid(): bool
 | 
				
			||||
    {
 | 
				
			||||
        return $this->validator->isValid();
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function setValidator($validator): void
 | 
				
			||||
    {
 | 
				
			||||
        $this->validator = $validator;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function setMessage($message): void
 | 
				
			||||
    {
 | 
				
			||||
        $this->message = $message;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function getMessage(): string
 | 
				
			||||
    {
 | 
				
			||||
        if(!$this->isCurrentValid())
 | 
				
			||||
            return $this->message;
 | 
				
			||||
 | 
				
			||||
        return $this->nextValidator->getMessage();
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function okStatus(): array
 | 
				
			||||
    {
 | 
				
			||||
        if(!$this->isCurrentValid())
 | 
				
			||||
            return ['error' => $this->message];
 | 
				
			||||
 | 
				
			||||
        return $this->nextValidator->okStatus();
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,25 @@
 | 
				
			||||
<?php
 | 
				
			||||
 | 
				
			||||
namespace App\Models\Validation\Messages;
 | 
				
			||||
 | 
				
			||||
use App\Models\Validation\Messages\InformativeValidator;
 | 
				
			||||
use App\Models\Validation\Validators\OkValidator;
 | 
				
			||||
 | 
				
			||||
class OkInformativeValidator extends InformativeValidator {
 | 
				
			||||
    public function __construct($message)
 | 
				
			||||
    {
 | 
				
			||||
        $this->message = $message;
 | 
				
			||||
        $this->validator = new OkValidator();
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function getMessage(): string
 | 
				
			||||
    {
 | 
				
			||||
        return $this->message;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function okStatus(): array
 | 
				
			||||
    {
 | 
				
			||||
        return ['ok' => $this->getMessage()];
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,18 @@
 | 
				
			||||
<?php
 | 
				
			||||
 | 
				
			||||
namespace App\Models\Validation\Messages;
 | 
				
			||||
 | 
				
			||||
use App\Models\Validation\Messages\InformativeValidator;
 | 
				
			||||
use App\Models\Validation\Validators\UpperRangeValidator;
 | 
				
			||||
 | 
				
			||||
class UpperRangeInformativeValidator extends InformativeValidator {
 | 
				
			||||
    protected InformativeValidator $nextValidator;
 | 
				
			||||
 | 
				
			||||
    public function __construct(string $message, UpperRangeValidator $validator, InformativeValidator $nextValidator)
 | 
				
			||||
    {
 | 
				
			||||
        $this->setMessage($message);
 | 
				
			||||
        $this->setValidator($validator);
 | 
				
			||||
        $this->nextValidator = $nextValidator;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,26 @@
 | 
				
			||||
<?php
 | 
				
			||||
 | 
				
			||||
namespace Tests\Unit;
 | 
				
			||||
 | 
				
			||||
use PHPUnit\Framework\TestCase;
 | 
				
			||||
 | 
				
			||||
use App\Models\Validation\Messages\OkInformativeValidator;
 | 
				
			||||
 | 
				
			||||
class OkInformativeValidatorTest extends TestCase
 | 
				
			||||
{
 | 
				
			||||
    public function testIsValid(): void
 | 
				
			||||
    {
 | 
				
			||||
        $message = 'All fine';
 | 
				
			||||
        $validator = new OkInformativeValidator($message);
 | 
				
			||||
 | 
				
			||||
        $this->assertTrue($validator->isValid());
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function testGetMessage(): void
 | 
				
			||||
    {
 | 
				
			||||
        $message = 'All fine';
 | 
				
			||||
        $validator = new OkInformativeValidator($message);
 | 
				
			||||
 | 
				
			||||
        $this->assertEquals($validator->getMessage(), $message);
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,69 @@
 | 
				
			||||
<?php
 | 
				
			||||
 | 
				
			||||
namespace Tests\Unit;
 | 
				
			||||
 | 
				
			||||
use PHPUnit\Framework\TestCase;
 | 
				
			||||
 | 
				
			||||
use App\Models\Validation\Messages\UpperRangeInformativeValidator;
 | 
				
			||||
use App\Models\Validation\Messages\OkInformativeValidator;
 | 
				
			||||
use App\Models\Validation\Validators\UpperRangeValidator;
 | 
				
			||||
use App\Models\Validation\Validators\OkValidator;
 | 
				
			||||
 | 
				
			||||
class UpperRangeInformativeValidatorTest extends TestCase
 | 
				
			||||
{
 | 
				
			||||
    protected $messages = [
 | 
				
			||||
        'ok' => 'valid',
 | 
				
			||||
        'error' => 'invalid',
 | 
				
			||||
    ];
 | 
				
			||||
 | 
				
			||||
    public function dataProvider() {
 | 
				
			||||
        return [
 | 
				
			||||
            'Valid Case for 10' => [
 | 
				
			||||
                'value' => 10,
 | 
				
			||||
                'limit' => 10,
 | 
				
			||||
                'isValid' => true,
 | 
				
			||||
                'message' => $this->messages['ok'],
 | 
				
			||||
            ],
 | 
				
			||||
            'Valid Case for 255' => [
 | 
				
			||||
                'value' => 0,
 | 
				
			||||
                'limit' => 255,
 | 
				
			||||
                'isValid' => true,
 | 
				
			||||
                'message' => $this->messages['ok'],
 | 
				
			||||
            ],
 | 
				
			||||
            'Invalid Case for 10' => [
 | 
				
			||||
                'value' => 11,
 | 
				
			||||
                'limit' => 10,
 | 
				
			||||
                'isValid' => false,
 | 
				
			||||
                'message' => $this->messages['error'],
 | 
				
			||||
            ],
 | 
				
			||||
            'Invalid Case for 255' => [
 | 
				
			||||
                'value' => 256,
 | 
				
			||||
                'limit' => 255,
 | 
				
			||||
                'isValid' => false,
 | 
				
			||||
                'message' => $this->messages['error'],
 | 
				
			||||
            ],
 | 
				
			||||
        ];
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function setUpValidator(int $value, int $rangeLimit): UpperRangeInformativeValidator
 | 
				
			||||
    {
 | 
				
			||||
        $upperRangeValidator = new UpperRangeValidator($value, $rangeLimit, new OkValidator());
 | 
				
			||||
 | 
				
			||||
        return new UpperRangeInformativeValidator(
 | 
				
			||||
            $this->messages['error'],
 | 
				
			||||
            $upperRangeValidator,
 | 
				
			||||
            new OkInformativeValidator($this->messages['ok']),
 | 
				
			||||
        );
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    /**
 | 
				
			||||
     * @dataProvider dataProvider
 | 
				
			||||
     */
 | 
				
			||||
    public function testGetMessage(int $value, int $limit, bool $isValid, string $message): void
 | 
				
			||||
    {
 | 
				
			||||
        $validator = $this->setUpValidator($value, $limit);
 | 
				
			||||
 | 
				
			||||
        $this->assertEquals($validator->isValid(), $isValid);
 | 
				
			||||
        $this->assertEquals($validator->getMessage(), $message);
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue