- 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`.
78 lines
2.4 KiB
Dart
78 lines
2.4 KiB
Dart
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);
|
|
});
|
|
});
|
|
}
|