This commit is contained in:
Juan Pablo Vial
2025-09-15 16:45:42 -03:00
parent c0f56f02e9
commit ae1b985b35

View File

@ -5,12 +5,10 @@ use Psr\Log\LoggerInterface;
use PHPUnit\Framework\TestCase;
use Faker;
use Incoviba\Common\Implement;
use Incoviba\Exception\ServiceAction;
use Incoviba\Model;
use Incoviba\Repository;
use Incoviba\Service;
use Incoviba\Common\Define;
use Incoviba\Common\Ideal;
use Tests\Extension\Faker\Provider\Rut;
class PersonaTest extends TestCase
{
@ -51,10 +49,11 @@ class PersonaTest extends TestCase
$personaService = new Service\Persona($this->logger, $this->personaRepository, $this->datosPersonaRepository,
$this->propietarioRepository, $this->direccionService);
$faker = Faker\Factory::create('es_ES');
$digit = $faker->boolean(100-round(1/11*100)) ? $faker->randomNumber(1) : 'K';
$faker->addProvider(new Rut($faker));
$rut = $faker->rut(false, false);
$data = [
'rut' => $faker->randomNumber(8),
'digito' => $digit,
'rut' => $rut,
'digito' => $faker->digitoVerificador($rut),
'nombres' => $faker->name(),
'apellido_paterno' => $faker->lastName(),
'apellido_materno' => $faker->lastName(),
@ -62,4 +61,64 @@ class PersonaTest extends TestCase
$persona = $personaService->add($data);
$this->assertEquals($data['rut'], $persona->rut);
}
public function testGetById(): void
{
$faker = Faker\Factory::create('es_ES');
$faker->addProvider(new Rut($faker));
$direccion = $this->getMockBuilder(Model\Direccion::class)
->disableOriginalConstructor()->getMock();
$direccion->id = $faker->randomNumber(2);
$datos = new Model\Venta\Datos();
$datos->direccion = $direccion;
$datos->telefono = $faker->randomNumber(8);
$datos->email = $faker->email();
$datos->sexo = $faker->randomElement(['M', 'F']);
$rut = $faker->rut(false, false);
$propietario = new Model\Venta\Propietario();
$propietario->rut = $rut;
$propietario->dv = $faker->digitoVerificador($rut);
$propietario->nombres = $faker->name();
$propietario->apellidos['paterno'] = $faker->lastName();
$propietario->apellidos['materno'] = $faker->lastName();
$propietario->datos = $datos;
$propietarioRepository = $this->getMockBuilder(Repository\Venta\Propietario::class)
->disableOriginalConstructor()->getMock();
$personaRepository = $this->getMockBuilder(Repository\Persona::class)
->disableOriginalConstructor()->getMock();
$personaRepository->method('fetchById')->willThrowException(new Implement\Exception\EmptyResult(''));
$personaRepository->method('create')->willReturnCallback(function($data) {
$persona = new Model\Persona();
$persona->rut = $data['rut'];
$persona->digito = $data['digito'];
$persona->nombres = $data['nombres'];
$persona->apellidoPaterno = $data['apellido_paterno'];
$persona->apellidoMaterno = $data['apellido_materno'];
return $persona;
});
$personaRepository->method('save')->willReturnArgument(0);
$datosPersona = new Model\Persona\Datos();
$datosPersona->direccion = $direccion;
$datosPersona->telefono = $datos->telefono;
$datosPersona->email = $datos->email;
$datosPersona->sexo = $datos->sexo;
$datosPersonaRepository = $this->getMockBuilder(Repository\Persona\Datos::class)
->disableOriginalConstructor()->getMock();
$datosPersonaRepository->method('fetchByPersona')->willReturn($datosPersona);
$propietarioRepository->method('fetchById')->willReturn($propietario);
$direccionService = $this->getMockBuilder(Service\Direccion::class)
->disableOriginalConstructor()->getMock();
$direccionService->method('add')->willReturn($direccion);
$personaService = new Service\Persona($this->logger, $personaRepository, $datosPersonaRepository,
$propietarioRepository, $direccionService);
$persona = $personaService->getById($rut);
$this->assertEquals($rut, $persona->rut);
$this->assertEquals($propietario->dv, $persona->digito);
$this->assertEquals($propietario->nombres, $persona->nombres);
$this->assertEquals($propietario->apellidos['paterno'], $persona->apellidoPaterno);
$this->assertEquals($propietario->apellidos['materno'], $persona->apellidoMaterno);
$this->assertEquals($datos->direccion, $persona->datos->direccion);
$this->assertEquals($datos->telefono, $persona->datos->telefono);
$this->assertEquals($datos->email, $persona->datos->email);
$this->assertEquals($datos->sexo, $persona->datos->sexo);
}
}