feat(scanner): refactor ticket scanning endpoint to accept UUID in request body and add validation
This commit is contained in:
@@ -203,7 +203,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
$ticket = $this->createTicket('77777777-7777-4777-8777-777777777777');
|
||||
Sanctum::actingAs($this->scanner);
|
||||
|
||||
$this->postJson("/api/v1/scanner/tickets/{$ticket->ticket}/scan")
|
||||
$this->postJson('/api/v1/scanner/tickets/scan', ['data' => $ticket->ticket])
|
||||
->assertOk()
|
||||
->assertJsonPath('data.ticket', $ticket->ticket)
|
||||
->assertJsonPath('data.scanner_user_id', $this->scanner->id)
|
||||
@@ -217,11 +217,26 @@ class ScannerTicketControllerTest extends TestCase
|
||||
$this->assertNotNull($ticket->fresh()->used_at);
|
||||
}
|
||||
|
||||
public function test_scan_requires_a_uuid_in_the_data_field(): void
|
||||
{
|
||||
Sanctum::actingAs($this->scanner);
|
||||
|
||||
$this->postJson('/api/v1/scanner/tickets/scan')
|
||||
->assertUnprocessable()
|
||||
->assertJsonPath('message', 'El QR proporcionado es inválido.')
|
||||
->assertJsonPath('errors.data.0', 'El QR proporcionado es inválido.');
|
||||
|
||||
$this->postJson('/api/v1/scanner/tickets/scan', ['data' => 'not-a-uuid'])
|
||||
->assertUnprocessable()
|
||||
->assertJsonPath('message', 'El QR proporcionado es inválido.')
|
||||
->assertJsonPath('errors.data.0', 'El QR proporcionado es inválido.');
|
||||
}
|
||||
|
||||
public function test_ticket_cannot_be_scanned_twice(): void
|
||||
{
|
||||
$ticket = $this->createTicket('88888888-8888-4888-8888-888888888888');
|
||||
Sanctum::actingAs($this->scanner);
|
||||
$this->postJson("/api/v1/scanner/tickets/{$ticket->ticket}/scan")->assertOk();
|
||||
$this->postJson('/api/v1/scanner/tickets/scan', ['data' => $ticket->ticket])->assertOk();
|
||||
|
||||
$otherScanner = User::factory()->create([
|
||||
'rol_codigo' => RoleCode::Scanner->value,
|
||||
@@ -230,7 +245,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
$otherScanner->scanCategories()->attach($this->category);
|
||||
Sanctum::actingAs($otherScanner);
|
||||
|
||||
$this->postJson("/api/v1/scanner/tickets/{$ticket->ticket}/scan")
|
||||
$this->postJson('/api/v1/scanner/tickets/scan', ['data' => $ticket->ticket])
|
||||
->assertUnprocessable()
|
||||
->assertJsonValidationErrors('ticket');
|
||||
$this->assertSame($this->scanner->id, $ticket->fresh()->scanner_user_id);
|
||||
@@ -249,7 +264,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
);
|
||||
Sanctum::actingAs($this->scanner);
|
||||
|
||||
$this->postJson("/api/v1/scanner/tickets/{$ticket->ticket}/scan")
|
||||
$this->postJson('/api/v1/scanner/tickets/scan', ['data' => $ticket->ticket])
|
||||
->assertUnprocessable()
|
||||
->assertJsonValidationErrors('ticket');
|
||||
$this->assertNull($ticket->fresh()->used_at);
|
||||
@@ -274,7 +289,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
->assertOk()
|
||||
->assertJsonPath('data.id', $ticket->id);
|
||||
|
||||
$this->postJson("/api/v1/scanner/tickets/{$ticket->ticket}/scan")
|
||||
$this->postJson('/api/v1/scanner/tickets/scan', ['data' => $ticket->ticket])
|
||||
->assertOk()
|
||||
->assertJsonPath('data.scanner_user_id', $this->scanner->id);
|
||||
}
|
||||
@@ -297,7 +312,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
|
||||
$this->getJson("/api/v1/scanner/tickets/{$foreignTicket->ticket}")
|
||||
->assertNotFound();
|
||||
$this->postJson("/api/v1/scanner/tickets/{$foreignTicket->ticket}/scan")
|
||||
$this->postJson('/api/v1/scanner/tickets/scan', ['data' => $foreignTicket->ticket])
|
||||
->assertNotFound();
|
||||
}
|
||||
|
||||
@@ -313,7 +328,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
|
||||
$this->getJson('/api/v1/scanner/tickets')->assertForbidden();
|
||||
$this->getJson("/api/v1/scanner/tickets/{$ticket->ticket}")->assertForbidden();
|
||||
$this->postJson("/api/v1/scanner/tickets/{$ticket->ticket}/scan")->assertForbidden();
|
||||
$this->postJson('/api/v1/scanner/tickets/scan', ['data' => $ticket->ticket])->assertForbidden();
|
||||
$this->assertNull($ticket->fresh()->used_at);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user