Gamificación
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:farolero/modelos/gamificacion_usuario.dart';
|
||||
import 'package:farolero/modelos/usuario.dart';
|
||||
import 'package:farolero/servicios/servicio_perfil_usuario.dart';
|
||||
|
||||
void main() {
|
||||
group('EstadisticasPerfilUsuario', () {
|
||||
test('sube fuego con rendimientos decrecientes y tope diario', () {
|
||||
var stats = const EstadisticasPerfilUsuario();
|
||||
final fecha = DateTime(2026, 5, 9);
|
||||
|
||||
for (var i = 0; i < 20; i++) {
|
||||
stats = stats.registrarPartida(victoria: false, fecha: fecha);
|
||||
}
|
||||
|
||||
expect(stats.fuego, 25);
|
||||
expect(stats.subidaFuegoHoy, 25);
|
||||
expect(stats.partidasHoy, 20);
|
||||
});
|
||||
|
||||
test('permite descansar un dia sin penalizar y penaliza dias extra', () {
|
||||
final inicial = EstadisticasPerfilUsuario(
|
||||
fuego: 50,
|
||||
fechaUltimaPartidaIso: DateTime(2026, 5, 1).toIso8601String(),
|
||||
);
|
||||
|
||||
final unDiaDespues = inicial.registrarPartida(
|
||||
victoria: false,
|
||||
fecha: DateTime(2026, 5, 2),
|
||||
);
|
||||
final tresDiasDespues = inicial.registrarPartida(
|
||||
victoria: false,
|
||||
fecha: DateTime(2026, 5, 4),
|
||||
);
|
||||
|
||||
expect(unDiaDespues.fuego, 56);
|
||||
expect(tresDiasDespues.fuego, 48);
|
||||
});
|
||||
|
||||
test('calcula medallas principales sin usar llama para partidas jugadas', () {
|
||||
final stats = const EstadisticasPerfilUsuario(
|
||||
partidasJugadas: 10,
|
||||
partidasGanadas: 1,
|
||||
fuego: 20,
|
||||
);
|
||||
|
||||
expect(stats.medallas, contains('habitual'));
|
||||
expect(stats.medallas, contains('brasa'));
|
||||
expect(stats.medallas, isNot(contains('llama_suave')));
|
||||
expect(stats.medallasPrincipales, contains('habitual'));
|
||||
});
|
||||
});
|
||||
|
||||
test('Usuario serializa fuego y medallas', () {
|
||||
final usuario = Usuario(
|
||||
id: 'u1',
|
||||
nombre: 'León',
|
||||
fuego: 42,
|
||||
medallas: const ['brasa', 'habitual'],
|
||||
);
|
||||
|
||||
final restaurado = Usuario.fromJson(usuario.toJson());
|
||||
|
||||
expect(restaurado.nombre, 'León');
|
||||
expect(restaurado.fuego, 42);
|
||||
expect(restaurado.medallas, ['brasa', 'habitual']);
|
||||
});
|
||||
|
||||
test('los avatares de capibara están disponibles en el perfil', () {
|
||||
expect(
|
||||
ServicioPerfilUsuario.avatares,
|
||||
contains('assets/avatars/capybara_01.png'),
|
||||
);
|
||||
expect(
|
||||
ServicioPerfilUsuario.avatares,
|
||||
contains('assets/avatars/capybara_12.png'),
|
||||
);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user