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