4
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Tests\TestCase;
|
||||
use App\Models\Aficionado;
|
||||
use App\Models\Evento;
|
||||
use App\Models\QrCode;
|
||||
|
||||
class EventoQRTest extends TestCase
|
||||
{
|
||||
use DatabaseTransactions;
|
||||
|
||||
// No hay cambios requeridos aquí si es Aficionado, auto_increment está ON para id_aficionado.
|
||||
// Pero si algún dia usamos jugadores, recordamos usar id_jugador string.
|
||||
public function test_jugador_puede_solicitar_qr()
|
||||
{
|
||||
// 1. Crear un Club y un Jugador activo
|
||||
$club = \App\Models\Club::create(['nombre' => 'Club Test']);
|
||||
$idJugador = 'JUG_' . substr(uniqid(), 0, 15);
|
||||
$jugador = \App\Models\Jugador::create([
|
||||
'id_jugador' => $idJugador,
|
||||
'nombre' => 'Carlos',
|
||||
'apellido' => 'Test',
|
||||
'documento' => '12345678',
|
||||
'email' => 'carlos@test.com',
|
||||
'password' => bcrypt('password123'),
|
||||
'id_club_actual' => $club->id_club,
|
||||
'activo' => true
|
||||
]);
|
||||
|
||||
// 2. Crear un equipo del club
|
||||
$idEquipo = (int) (rand(1000, 9999));
|
||||
$equipo = \App\Models\Equipo::create([
|
||||
'id_club' => $club->id_club,
|
||||
'categoria' => 'Mayores',
|
||||
'division' => 'A'
|
||||
]);
|
||||
|
||||
// Vincular jugador al equipo
|
||||
\Illuminate\Support\Facades\DB::table('jugador_equipo')->insert([
|
||||
'id_jugador' => $jugador->id_jugador,
|
||||
'id_equipo' => $equipo->id_equipo
|
||||
]);
|
||||
|
||||
// 3. Crear un evento donde juegue ese equipo
|
||||
$evento = Evento::create([
|
||||
'id_evento' => 'EVE_' . substr(uniqid(), 0, 15),
|
||||
'nombre_evento' => 'Partido Amistoso',
|
||||
'fecha_evento' => now()->addDays(2)->format('Y-m-d'),
|
||||
'hora_inicio' => '20:00',
|
||||
'hora_fin' => '22:00',
|
||||
'id_equipo_local' => $equipo->id_equipo,
|
||||
'id_equipo_visitante' => null,
|
||||
'limite_qr_jugador' => 3
|
||||
]);
|
||||
|
||||
// 4. Simular la sesión iniciada como jugador
|
||||
$this->withSession([
|
||||
'user_logged_in' => true,
|
||||
'user_tipo' => 'jugador',
|
||||
'user_id' => $jugador->id_jugador,
|
||||
'user_name' => 'Carlos Test'
|
||||
]);
|
||||
|
||||
// 5. Hacer el request POST
|
||||
$response = $this->post(route('panel.solicitar.qr'), [
|
||||
'id_evento' => $evento->id_evento
|
||||
]);
|
||||
|
||||
// 6. Verificaciones
|
||||
$response->assertRedirect(route('panel.mis.qrs', ['evento' => $evento->id_evento]));
|
||||
$response->assertSessionHas('panel_msg');
|
||||
|
||||
// Verificar que en la tabla 'qr_codes' existan los QRs
|
||||
$this->assertEquals(3, QrCode::where('id_evento', $evento->id_evento)
|
||||
->where('id_jugador', $jugador->id_jugador)
|
||||
->count());
|
||||
}
|
||||
|
||||
public function test_jugador_no_puede_solicitar_dos_veces_qrs_para_mismo_evento()
|
||||
{
|
||||
$club = \App\Models\Club::create(['nombre' => 'Club Test']);
|
||||
$idJugador = 'JUG_' . substr(uniqid(), 0, 15);
|
||||
$jugador = \App\Models\Jugador::create([
|
||||
'id_jugador' => $idJugador,
|
||||
'nombre' => 'Carlos',
|
||||
'apellido' => 'Test',
|
||||
'documento' => '12345678',
|
||||
'email' => 'carlos@test.com',
|
||||
'password' => bcrypt('password123'),
|
||||
'id_club_actual' => $club->id_club,
|
||||
'activo' => true
|
||||
]);
|
||||
|
||||
$evento = Evento::create([
|
||||
'id_evento' => 'EVE_' . substr(uniqid(), 0, 15),
|
||||
'nombre_evento' => 'Partido Amistoso',
|
||||
'fecha_evento' => now()->addDays(2)->format('Y-m-d'),
|
||||
'hora_inicio' => '18:00',
|
||||
'hora_fin' => '20:00'
|
||||
]);
|
||||
|
||||
// Generar el primer QR directamente en BD simulando que ya lo pidió antes
|
||||
QrCode::create([
|
||||
'id_qr' => 'qr_' . uniqid(),
|
||||
'id_evento' => $evento->id_evento,
|
||||
'id_jugador' => $jugador->id_jugador,
|
||||
'tipo_qr' => 'invitado',
|
||||
'escaneos_restantes' => 1,
|
||||
'creado' => now()
|
||||
]);
|
||||
|
||||
$this->withSession([
|
||||
'user_logged_in' => true,
|
||||
'user_tipo' => 'jugador',
|
||||
'user_id' => $jugador->id_jugador
|
||||
]);
|
||||
|
||||
$response = $this->post(route('panel.solicitar.qr'), [
|
||||
'id_evento' => $evento->id_evento
|
||||
]);
|
||||
|
||||
// Debería tirar mensaje de error de que ya solicitó
|
||||
$response->assertSessionHas('panel_error', 'Ya solicitaste QRs para este evento.');
|
||||
$this->assertEquals(1, QrCode::where('id_evento', $evento->id_evento)->count());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user