'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()); } }