80 lines
2.3 KiB
Dart
80 lines
2.3 KiB
Dart
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'),
|
|
);
|
|
});
|
|
}
|