feat: Implement multiplayer game session management
- Add models for managing player assignments and game session initialization in `inicio_partida_multijugador.dart`. - Create a multiplayer room state management system in `sala_multijugador.dart`, including user registration, selection, and session validation. - Develop a UI screen for displaying player words sequentially in `pantalla_palabras_cliente.dart`. - Implement unit tests for the multiplayer session management and player assignment logic in `inicio_partida_multijugador_test.dart` and `sala_multijugador_test.dart`.
This commit is contained in:
77
test/modelos/inicio_partida_multijugador_test.dart
Normal file
77
test/modelos/inicio_partida_multijugador_test.dart
Normal file
@@ -0,0 +1,77 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:farolero/modelos/inicio_partida_multijugador.dart';
|
||||
|
||||
void main() {
|
||||
group('InicioPartidaMultijugador', () {
|
||||
test('agrupa varios jugadores controlados por el mismo cliente', () {
|
||||
final asignaciones = [
|
||||
const AsignacionJugador(
|
||||
jugadorId: 'ana',
|
||||
nombre: 'Ana',
|
||||
clientId: 'host',
|
||||
endpointId: null,
|
||||
),
|
||||
const AsignacionJugador(
|
||||
jugadorId: 'juan',
|
||||
nombre: 'Juan',
|
||||
clientId: 'host',
|
||||
endpointId: null,
|
||||
),
|
||||
const AsignacionJugador(
|
||||
jugadorId: 'sofia',
|
||||
nombre: 'Sofía',
|
||||
clientId: 'cliente-sofia',
|
||||
endpointId: 'endpoint-2',
|
||||
),
|
||||
];
|
||||
final impostores = {'juan': true};
|
||||
|
||||
final payloads = InicioPartidaMultijugador.crearPayloadsPorCliente(
|
||||
asignaciones: asignaciones,
|
||||
palabraSecreta: 'mate',
|
||||
categoria: 'objetos',
|
||||
impostoresPorJugadorId: impostores,
|
||||
);
|
||||
|
||||
expect(payloads['host']?.jugadores.map((j) => j.jugadorId), [
|
||||
'ana',
|
||||
'juan',
|
||||
]);
|
||||
expect(payloads['host']?.jugadores.first.palabra, 'mate');
|
||||
expect(payloads['host']?.jugadores.last.esImpostor, isTrue);
|
||||
expect(payloads['host']?.jugadores.last.palabra, isNull);
|
||||
expect(payloads['cliente-sofia']?.endpointId, 'endpoint-2');
|
||||
expect(payloads['cliente-sofia']?.jugadores.single.nombre, 'Sofía');
|
||||
});
|
||||
|
||||
test('restaura payload completo desde json', () {
|
||||
final payload = InicioPartidaCliente(
|
||||
clientId: 'cliente-sofia',
|
||||
endpointId: 'endpoint-2',
|
||||
categoria: 'todas',
|
||||
jugadores: const [
|
||||
JugadorInicioPartida(
|
||||
jugadorId: 'sofia',
|
||||
nombre: 'Sofía',
|
||||
esImpostor: false,
|
||||
palabra: 'luna',
|
||||
),
|
||||
JugadorInicioPartida(
|
||||
jugadorId: 'helena',
|
||||
nombre: 'Helena',
|
||||
esImpostor: true,
|
||||
palabra: null,
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
final restaurado = InicioPartidaCliente.fromJson(payload.toJson());
|
||||
|
||||
expect(restaurado.clientId, 'cliente-sofia');
|
||||
expect(restaurado.endpointId, 'endpoint-2');
|
||||
expect(restaurado.jugadores.length, 2);
|
||||
expect(restaurado.jugadores.first.palabra, 'luna');
|
||||
expect(restaurado.jugadores.last.esImpostor, isTrue);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user