feat(desfile): export entry reservations

This commit is contained in:
2026-09-24 10:14:56 -03:00
parent d8d8354070
commit 0e870776c4
9 changed files with 375 additions and 7 deletions

View File

@@ -4,14 +4,20 @@ namespace Tests\Feature\Desfile;
use App\Domains\Commerce\Catalog\Models\Inventory;
use App\Domains\Core\Auth\Models\User;
use App\Domains\Core\Tenant\Models\Tenant;
use App\Domains\Ticketing\Desfile\Requests\ExportEntryReservationsRequest;
use App\Domains\Ticketing\Desfile\Requests\IndexEntryReservationsRequest;
use App\Domains\Ticketing\Desfile\Requests\StoreEntryReservationsRequest;
use App\Domains\Ticketing\Desfile\Resources\EntryReservationResource;
use App\Domains\Ticketing\Desfile\Services\EntryReservationExcelService;
use App\Domains\Ticketing\Desfile\Services\EntryReservationPdfService;
use App\Domains\Ticketing\Desfile\Services\EntryReservationReportService;
use App\Domains\Ticketing\Desfile\Services\EntryReservationService;
use App\Domains\Ticketing\Ticket\Models\Ticket;
use App\Domains\Ticketing\Ticket\Services\ResolvedTicketValidity;
use App\Domains\Ticketing\Ticket\Services\TicketGeneratorService;
use App\Domains\Ticketing\Ticket\Services\TicketValidityResolver;
use Barryvdh\DomPDF\ServiceProvider as DomPdfServiceProvider;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@@ -29,6 +35,7 @@ class EntryReservationServiceTest extends TestCase
protected function setUp(): void
{
parent::setUp();
$this->app->register(DomPdfServiceProvider::class);
// Minimal domain schema isolates this workflow from unrelated legacy migrations.
Schema::create('users', function (Blueprint $table): void {
$table->id();
@@ -324,6 +331,48 @@ class EntryReservationServiceTest extends TestCase
);
}
public function test_export_request_requires_a_valid_timezone(): void
{
$validator = Validator::make([
'tipo_pago' => 'sin_cargo',
'timezone' => 'Invalid/Timezone',
], (new ExportEntryReservationsRequest)->rules());
$this->assertTrue($validator->fails());
$this->assertArrayHasKey('timezone', $validator->errors()->toArray());
}
public function test_exports_filtered_reservations_to_pdf_and_excel(): void
{
$service = $this->service();
$user = User::findOrFail(1);
$service->reserve($user, (string) Str::uuid(), $this->rows());
$reservations = $service->reservationsForExport($user, ['tipo_pago' => 'otro_metodo']);
$tenant = Tenant::query()->firstOrFail();
$tenant->setAttribute('nombre', 'Desfile Pura Tendencia');
$report = new EntryReservationReportService;
$this->assertCount(1, $reservations);
$this->assertSame('Otro método', $report->rows($reservations)->sole()['pago']);
$pdf = (new EntryReservationPdfService($report))->download(
$tenant,
$reservations,
'America/Argentina/Buenos_Aires',
);
$this->assertSame('application/pdf', $pdf->headers->get('content-type'));
$excel = (new EntryReservationExcelService($report))->download(
$tenant,
$reservations,
'America/Argentina/Buenos_Aires',
);
$this->assertSame(
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
$excel->headers->get('content-type'),
);
}
public function test_real_ticket_generator_links_admin_variant_and_reservation(): void
{
$validity = Mockery::mock(TicketValidityResolver::class);