Add CityValidationByName.
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
				
					
				
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
							parent
							
								
									f437d777a5
								
							
						
					
					
						commit
						1a7c585aa7
					
				@ -0,0 +1,18 @@
 | 
				
			||||
<?php
 | 
				
			||||
 | 
				
			||||
namespace App\Models\Validation;
 | 
				
			||||
 | 
				
			||||
use App\Models\Validation\ModelValidationByName;
 | 
				
			||||
use App\Models\Validation\Messages\CityMessagesFactory;
 | 
				
			||||
 | 
				
			||||
class CityValidationByName extends ModelValidationByName
 | 
				
			||||
{
 | 
				
			||||
    public function __construct(string $name)
 | 
				
			||||
    {
 | 
				
			||||
        parent::__construct(
 | 
				
			||||
            $name,
 | 
				
			||||
            'App\Models\City',
 | 
				
			||||
            (new CityMessagesFactory())->create(),
 | 
				
			||||
        );
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,20 @@
 | 
				
			||||
<?php
 | 
				
			||||
 | 
				
			||||
namespace App\Models\Validation\Messages;
 | 
				
			||||
 | 
				
			||||
use App\Models\Validation\Messages\BaseMessages;
 | 
				
			||||
 | 
				
			||||
class CityMessagesFactory
 | 
				
			||||
{
 | 
				
			||||
    protected array $messages = [
 | 
				
			||||
        'found' => 'A city with the name is valid.',
 | 
				
			||||
        'not_found' => 'A city with the name does not exist!!!',
 | 
				
			||||
        'invalid_name' => 'The city name is empty, please, write the name!!!',
 | 
				
			||||
    ];
 | 
				
			||||
 | 
				
			||||
    public function create()
 | 
				
			||||
    {
 | 
				
			||||
        return new BaseMessages($this->messages);
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,45 @@
 | 
				
			||||
<?php
 | 
				
			||||
 | 
				
			||||
namespace Tests\Feature;
 | 
				
			||||
 | 
				
			||||
use Tests\TestCase;
 | 
				
			||||
 | 
				
			||||
use App\Models\Validation\CityValidationByName;
 | 
				
			||||
 | 
				
			||||
class CityValidationByNameTest extends TestCase
 | 
				
			||||
{
 | 
				
			||||
    public function dataProvider() {
 | 
				
			||||
        return [
 | 
				
			||||
            'Invalid Case' => [
 | 
				
			||||
                'name' => '',
 | 
				
			||||
                'key' => 'error',
 | 
				
			||||
                'message' =>  'The city name is empty, please, write the name!!!',
 | 
				
			||||
                'isValid' =>  false,
 | 
				
			||||
            ],
 | 
				
			||||
            'Not Found Case' => [
 | 
				
			||||
                'name' => '404 City',
 | 
				
			||||
                'key' => 'error',
 | 
				
			||||
                'message' =>  'A city with the name does not exist!!!',
 | 
				
			||||
                'isValid' =>  false,
 | 
				
			||||
            ],
 | 
				
			||||
            'Found Case' => [
 | 
				
			||||
                'name' => 'testCity',
 | 
				
			||||
                'key' => 'ok',
 | 
				
			||||
                'message' =>  'A city with the name is valid.',
 | 
				
			||||
                'isValid' =>  true,
 | 
				
			||||
            ]
 | 
				
			||||
        ];
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    /**
 | 
				
			||||
     * @dataProvider dataProvider
 | 
				
			||||
     */
 | 
				
			||||
    public function testCityValidationWithName(string $name, string $key, string $message, bool $isValid): void
 | 
				
			||||
    {
 | 
				
			||||
        $validator = new CityValidationByName($name);
 | 
				
			||||
        $json = $validator->getMessageMap();
 | 
				
			||||
 | 
				
			||||
        $this->assertEquals($json[$key], $message);
 | 
				
			||||
        $this->assertEquals($validator->isValid(), $isValid);
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -1,37 +0,0 @@
 | 
				
			||||
<?php
 | 
				
			||||
 | 
				
			||||
namespace Tests\Feature;
 | 
				
			||||
 | 
				
			||||
use Illuminate\Foundation\Testing\RefreshDatabase;
 | 
				
			||||
use Illuminate\Foundation\Testing\WithFaker;
 | 
				
			||||
use Tests\TestCase;
 | 
				
			||||
 | 
				
			||||
use App\Models\City;
 | 
				
			||||
 | 
				
			||||
class CityValidationTest extends TestCase
 | 
				
			||||
{
 | 
				
			||||
    public function testCityWithEmptyName(): void
 | 
				
			||||
    {
 | 
				
			||||
        $json = City::validateWithName('');
 | 
				
			||||
 | 
				
			||||
        $this->assertEquals($json['error'], 'The city name is empty, please, write the name!!!');
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function testNotExistingCityWithName(): void
 | 
				
			||||
    {
 | 
				
			||||
        $name = '404 City';
 | 
				
			||||
 | 
				
			||||
        $json = City::validateWithName($name);
 | 
				
			||||
 | 
				
			||||
        $this->assertEquals($json['error'], 'A city with the name does not exist!!!');
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public function testValidCityWithName(): void
 | 
				
			||||
    {
 | 
				
			||||
        $name = 'testCity';
 | 
				
			||||
 | 
				
			||||
        $json = City::validateWithName($name);
 | 
				
			||||
 | 
				
			||||
        $this->assertEquals($json['ok'], 'A city with the name is valid.');
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue