Files
oficial/app/tests/integration/QueueTest.php
Juan Pablo Vial 7f97862324 Revisiones
2025-06-25 12:41:28 -04:00

141 lines
5.6 KiB
PHP

<?php
namespace Incoviba\Test\Integration;
use DateInterval;
use DateTimeImmutable;
use Psr\Container\ContainerInterface;
use PHPUnit\Framework\TestCase;
use Faker;
use Incoviba\Common\Define;
use Incoviba\Common\Implement;
use Incoviba\Common\Ideal;
use Incoviba\Service;
use Incoviba\Repository;
use Tests\Extension\Faker\Provider\Rut;
class QueueTest extends TestCase
{
protected ContainerInterface $container;
protected function setUp(): void
{
require_once implode(DIRECTORY_SEPARATOR, [dirname(__DIR__, 2), 'setup', 'container.php']);
$this->container = buildContainer();
}
public function testServiceWorker(): void
{
$faker = Faker\Factory::create();
$faker->addProvider(new Rut($faker));
$pagoData = [
'fecha' => '2022-01-01',
'valor' => 10000,
];
$pagoService = $this->container->get(Service\Venta\Pago::class);
$pago = $pagoService->add($pagoData);
$this->assertEquals(0.0, $pago->uf);
$queueService = $this->container->get(Service\Queue::class);
$queueService->run();
$pago = $pagoService->getById($pago->id);
$this->assertNotEquals(0.0, $pago->uf);
$direccionRepository = $this->container->get(Repository\Direccion::class);
$direcciones = $direccionRepository->fetchAll();
$direccion = $faker->randomElement($direcciones);
$rut = $faker->rut(false, false);
$propietarioData = [
'rut' => $rut,
'dv' => $faker->digitoVerificador($rut),
'direccion' => $direccion->id,
'nombres' => $faker->firstName,
'apellido_paterno' => $faker->lastName,
'apellido_materno' => $faker->lastName,
'email' => $faker->email,
'telefono' => $faker->randomNumber(9),
];
$propietarioRepository = $this->container->get(Repository\Venta\Propietario::class);
$propietario = $propietarioRepository->create($propietarioData);
$propietario = $propietarioRepository->save($propietario);
$proyectoRepository = $this->container->get(Repository\Proyecto::class);
$proyectos = $proyectoRepository->fetchAll();
$proyecto = $faker->randomElement($proyectos);
$tipoUnidadRepository = $this->container->get(Repository\Proyecto\TipoUnidad::class);
$tiposUnidades = $tipoUnidadRepository->fetchAll();
$tipoUnidad = $faker->randomElement($tiposUnidades);
$proyectoTipoUnidadData = [
'proyecto' => $proyecto->id,
'tipo' => $tipoUnidad->id,
'nombre' => $faker->word,
'descripcion' => $faker->sentence,
'abreviacion' => substr($faker->word, 0, 1),
'logia' => $faker->randomFloat(2, 1, 20),
'terraza' => $faker->randomFloat(2, 1, 20),
'm2' => $faker->randomFloat(2, 20, 100),
];
$proyectoTipoUnidadRepository = $this->container->get(Repository\Proyecto\ProyectoTipoUnidad::class);
$proyectoTipoUnidad = $proyectoTipoUnidadRepository->create($proyectoTipoUnidadData);
$proyectoTipoUnidad = $proyectoTipoUnidadRepository->save($proyectoTipoUnidad);
$unidadData = [
'proyecto' => $proyecto->id,
'tipo' => $tipoUnidad->id,
'piso' => $faker->numberBetween(1, 300),
'descripcion' => "{$tipoUnidad->descripcion} {$faker->numberBetween(1, 300)}",
'orientacion' => $faker->randomElement(['N', 'NE', 'NO', 'S', 'SE', 'SO', 'E', 'O']),
'pt' => $proyectoTipoUnidad->id,
];
$unidadRepository = $this->container->get(Repository\Venta\Unidad::class);
$unidad = $unidadRepository->create($unidadData);
$unidad = $unidadRepository->save($unidad);
$propiedadData = [
'unidad_principal' => $unidad->id,
];
$propiedadRepository = $this->container->get(Repository\Venta\Propiedad::class);
$propiedad = $propiedadRepository->create($propiedadData);
$propiedad = $propiedadRepository->save($propiedad);
$fecha = $faker->date;
$pieData = [
'valor' => 10000,
'cuotas' => 12,
'fecha' => $fecha,
];
$pieRepository = $this->container->get(Repository\Venta\Pie::class);
$pie = $pieRepository->create($pieData);
$pie = $pieRepository->save($pie);
$ventaData = [
'fecha' => $fecha,
'propietario' => $propietario->rut,
'propiedad' => $propiedad->id,
'fecha_ingreso' => new DateTimeImmutable($fecha)->add(new DateInterval('P3D'))->format('Y-m-d'),
'pie' => $pie->id,
];
$ventaRepository = $this->container->get(Repository\Venta::class);
$venta = $ventaRepository->create($ventaData);
$venta = $ventaRepository->save($venta);
$bancoData = [
'nombre' => $faker->word,
];
$bancoRepository = $this->container->get(Repository\Contabilidad\Banco::class);
$banco = $bancoRepository->create($bancoData);
$banco = $bancoRepository->save($banco);
$cuotaData = [
'pie' => $pie->id,
'fecha' => $faker->dateTimeBetween('2024-01-01')->format('Y-m-d'),
'valor' => 10000,
'banco' => $banco->id,
];
$cuotaService = $this->container->get(Service\Venta\Cuota::class);
$cuota = $cuotaService->add($cuotaData);
$this->assertEquals(0.0, $cuota->pago->uf);
$queueService->run();
$cuota = $cuotaService->getById($cuota->id);
$this->assertGreaterThan(0.0, $cuota->pago->uf);
}
}