feat(admin): expose ticket refund states

This commit is contained in:
2026-09-10 16:10:17 -03:00
parent 18f739b712
commit f19bca64d0
14 changed files with 84 additions and 21 deletions

View File

@@ -78,6 +78,9 @@ class AdminAppTicketFilterFormControllerTest extends TestCase
['value' => 'active', 'label' => 'Activo'],
['value' => 'used', 'label' => 'Usado'],
['value' => 'expired', 'label' => 'Vencido'],
['value' => 'disabled', 'label' => 'Inhabilitado'],
['value' => 'cancelled', 'label' => 'Cancelado'],
['value' => 'refunded', 'label' => 'Reembolsado'],
],
],
],

View File

@@ -63,6 +63,9 @@ class AdminAppTicketFormControllerTest extends TestCase
['value' => 'active', 'label' => 'Activo'],
['value' => 'used', 'label' => 'Usado'],
['value' => 'expired', 'label' => 'Vencido'],
['value' => 'disabled', 'label' => 'Inhabilitado'],
['value' => 'cancelled', 'label' => 'Cancelado'],
['value' => 'refunded', 'label' => 'Reembolsado'],
],
'categories' => [
[

View File

@@ -507,12 +507,14 @@ class AdminAppSaleControllerTest extends TestCase
'id' => $firstTicket->id,
'expires_at' => null,
'status' => Ticket::STATUS_ACTIVE,
'status_label' => 'Activo',
],
[
'product' => 'Abono general',
'id' => $usedTicket->id,
'expires_at' => null,
'status' => Ticket::STATUS_USED,
'status_label' => 'Usado',
],
],
]);

View File

@@ -72,6 +72,7 @@ class AdminAppTicketControllerTest extends TestCase
->assertJsonPath('data.0.tenant_code', $tenant->codigo)
->assertJsonPath('data.0.values.id', $ticket->id)
->assertJsonPath('data.0.values.status', Ticket::STATUS_ACTIVE)
->assertJsonPath('data.0.status_label', 'Activo')
->assertJsonMissingPath('data.0.values.ticket')
->assertJsonPath('data.0.values.date', '-')
->assertJsonPath('data.0.values.size', '-')
@@ -335,6 +336,7 @@ class AdminAppTicketControllerTest extends TestCase
->assertJsonPath('data.0.order_number', $purchase->id)
->assertJsonPath('data.0.product', 'Remera')
->assertJsonPath('data.0.amount', '8000.00')
->assertJsonPath('data.0.refunded_amount', '0.00')
->assertJsonPath('data.0.status', Ticket::STATUS_USED)
->assertJsonPath('data.0.scanned_by', $admin->nombre_apellido)
->assertJsonPath('data.0.variant_properties.0.code', 'size')
@@ -498,6 +500,28 @@ class AdminAppTicketControllerTest extends TestCase
->assertJsonPath('data.0.id', $active->id);
}
public function test_it_filters_persisted_ticket_statuses(): void
{
$tenant = $this->createTenant('ticket-statuses');
$admin = $this->createAdminAppUser($tenant);
$this->grantTicketsMenu($tenant);
Sanctum::actingAs($admin);
foreach ([
Ticket::STATUS_DISABLED => 'disabled_at',
Ticket::STATUS_CANCELLED => 'cancelled_at',
Ticket::STATUS_REFUNDED => 'refunded_at',
] as $status => $timestamp) {
$ticket = $this->createTicket($tenant, $admin, [$timestamp => now()]);
$this->getJson('/api/v1/adminapp/tenant/tickets?status='.$status)
->assertOk()
->assertJsonCount(1, 'data')
->assertJsonPath('data.0.id', $ticket->id)
->assertJsonPath('data.0.status', $status);
}
}
public function test_it_downloads_filtered_ticket_reports(): void
{
$tenant = $this->createTenant('fiesta_futbol_infantil');

View File

@@ -272,6 +272,11 @@ class ScannerTicketControllerTest extends TestCase
->assertJsonPath('data.ticket.scanner_user_id', $this->scanner->id)
->assertJsonPath('data.ticket.is_valid', false)
->assertJsonPath('data.ticket.is_used', true)
->assertJsonPath('data.ticket.status', Ticket::STATUS_USED)
->assertJsonPath('data.ticket.status_label', 'Usado')
->assertJsonMissingPath('data.ticket.disabled_at')
->assertJsonMissingPath('data.ticket.cancelled_at')
->assertJsonMissingPath('data.ticket.refunded_at')
->assertJsonPath('data.ticket.client', $this->ticketOwner->nombre_apellido)
->assertJsonPath('data.client.id', $this->ticketOwner->id)
->assertJsonPath('data.client.nombre_apellido', $this->ticketOwner->nombre_apellido);
@@ -280,6 +285,14 @@ class ScannerTicketControllerTest extends TestCase
'id' => $ticket->id,
'scanner_user_id' => $this->scanner->id,
]);
$this->assertDatabaseHas('value_changes', [
'tenant_code' => $this->tenant->codigo,
'trackable_type' => $ticket->getMorphClass(),
'trackable_id' => $ticket->id,
'attribute' => 'used_at',
'old_value' => null,
'user_id' => $this->scanner->id,
]);
$this->assertNotNull($ticket->fresh()->used_at);
$scanAttempt = ScanAttempt::query()->sole();