parent
							
								
									36a803131e
								
							
						
					
					
						commit
						a37992c2e9
					
				@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Models\Validation\Messages\Factories;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Models\Validation\Messages\Factories\InformativeValidatorFactory;
 | 
				
			||||||
 | 
					use App\Models\Validation\Messages\InformativeValidator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Models\Validation\Messages\OkInformativeValidator;
 | 
				
			||||||
 | 
					use App\Models\Validation\Messages\NextInformativeValidator;
 | 
				
			||||||
 | 
					use App\Models\Validation\Validators\EmptyNameValidator;
 | 
				
			||||||
 | 
					use App\Models\Validation\Validators\CompanyValidatorByName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CompanyInformativeValidatorByNameFactory extends InformativeValidatorFactory
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    protected array $messages;
 | 
				
			||||||
 | 
					    protected string $name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct(string $name)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->messages = [
 | 
				
			||||||
 | 
					            'found' => 'A company with the name is valid.',
 | 
				
			||||||
 | 
					            'not_found' => 'A company with the name does not exist!!!',
 | 
				
			||||||
 | 
					            'invalid_name' => 'The company name is empty, please, write the name!!!',
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->name = $name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function create(): InformativeValidator
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $okValidator = new OkInformativeValidator($this->messages['found']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $nameValidator = new NextInformativeValidator(
 | 
				
			||||||
 | 
					            $this->messages['not_found'],
 | 
				
			||||||
 | 
					            new CompanyValidatorByName($this->name, $okValidator),
 | 
				
			||||||
 | 
					            $okValidator
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return new NextInformativeValidator(
 | 
				
			||||||
 | 
					            $this->messages['invalid_name'],
 | 
				
			||||||
 | 
					            new EmptyNameValidator($this->name, $nameValidator),
 | 
				
			||||||
 | 
					            $nameValidator
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Models\Validation\Validators;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Models\Validation\Validators\Validator;
 | 
				
			||||||
 | 
					use App\Models\Company;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CompanyValidatorByName extends Validator {
 | 
				
			||||||
 | 
					    private string $name;
 | 
				
			||||||
 | 
					    protected Validator $nextValidator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct(string $name, Validator $nextValidator)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->name = $name;
 | 
				
			||||||
 | 
					        $this->nextValidator = $nextValidator;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function isCurrentValid(): bool
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $count = Company::where('name', $this->name)->count();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $count != 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Tests\Feature;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Tests\TestCase;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Models\Validation\Messages\Factories\CompanyInformativeValidatorByNameFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CompanyInformativeValidatorByNameFactoryTest extends TestCase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function dataProvider() {
 | 
				
			||||||
 | 
					        return [
 | 
				
			||||||
 | 
					            'Found Case' => [
 | 
				
			||||||
 | 
					                'name' => 'testCompany',
 | 
				
			||||||
 | 
					                'key' => 'ok',
 | 
				
			||||||
 | 
					                'message' => 'A company with the name is valid.',
 | 
				
			||||||
 | 
					                'isValid' => true,
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'Not Found Case' => [
 | 
				
			||||||
 | 
					                'name' => '404 Company',
 | 
				
			||||||
 | 
					                'key' => 'error',
 | 
				
			||||||
 | 
					                'message' => 'A company with the name does not exist!!!',
 | 
				
			||||||
 | 
					                'isValid' => false,
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'Invalid Case' => [
 | 
				
			||||||
 | 
					                'name' => '',
 | 
				
			||||||
 | 
					                'key' => 'error',
 | 
				
			||||||
 | 
					                'message' => 'The company name is empty, please, write the name!!!',
 | 
				
			||||||
 | 
					                'isValid' => false,
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @dataProvider dataProvider
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function testValidatorFactory(string $name, string $key, string $message, bool $isValid): void
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $factory = new CompanyInformativeValidatorByNameFactory($name);
 | 
				
			||||||
 | 
					        $validator = $factory->create();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->assertEquals($validator->getMessage(), $message);
 | 
				
			||||||
 | 
					        $this->assertEquals($validator->getOkStatus(), [$key => $message]);
 | 
				
			||||||
 | 
					        $this->assertEquals($validator->isValid(), $isValid);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue