Files
unionflow-mobile-apps/test/features/members/domain/usecases/get_member_stats_test.dart
dahoud d094d6db9c Initial commit: unionflow-mobile-apps
Application Flutter complète (sans build artifacts).

Signed-off-by: lions dev Team
2026-03-15 16:30:08 +00:00

112 lines
3.1 KiB
Dart

/// Tests unitaires pour GetMemberStats use case
library get_member_stats_test;
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:unionflow_mobile_apps/features/members/domain/repositories/membre_repository.dart';
import 'package:unionflow_mobile_apps/features/members/domain/usecases/get_member_stats.dart';
@GenerateMocks([IMembreRepository])
import 'get_member_stats_test.mocks.dart';
void main() {
late GetMemberStats useCase;
late MockIMembreRepository mockRepository;
setUp(() {
mockRepository = MockIMembreRepository();
useCase = GetMemberStats(mockRepository);
});
group('GetMemberStats Use Case', () {
final tMemberStats = {
'totalMembres': 250,
'membresActifs': 180,
'membresInactifs': 50,
'membresSuspendus': 15,
'membresEnAttente': 5,
'repartitionGenre': {
'hommes': 130,
'femmes': 115,
'autre': 5,
},
'nouveauxMembresMois': 12,
'tauxActivation': 0.72,
'agesMoyens': {
'global': 42.5,
'hommes': 44.2,
'femmes': 40.8,
},
};
test('should return comprehensive member statistics', () async {
// Arrange
when(mockRepository.getMembresStats())
.thenAnswer((_) async => tMemberStats);
// Act
final result = await useCase();
// Assert
expect(result, equals(tMemberStats));
expect(result['totalMembres'], equals(250));
expect(result['membresActifs'], equals(180));
expect(result['tauxActivation'], equals(0.72));
verify(mockRepository.getMembresStats());
verifyNoMoreInteractions(mockRepository);
});
test('should return gender distribution statistics', () async {
// Arrange
when(mockRepository.getMembresStats())
.thenAnswer((_) async => tMemberStats);
// Act
final result = await useCase();
// Assert
final repartition = result['repartitionGenre'] as Map<String, dynamic>;
expect(repartition['hommes'], equals(130));
expect(repartition['femmes'], equals(115));
expect(repartition['autre'], equals(5));
});
test('should return empty stats when no members exist', () async {
// Arrange
final emptyStats = {
'totalMembres': 0,
'membresActifs': 0,
'membresInactifs': 0,
'membresSuspendus': 0,
'membresEnAttente': 0,
'repartitionGenre': {
'hommes': 0,
'femmes': 0,
'autre': 0,
},
'nouveauxMembresMois': 0,
'tauxActivation': 0.0,
};
when(mockRepository.getMembresStats())
.thenAnswer((_) async => emptyStats);
// Act
final result = await useCase();
// Assert
expect(result['totalMembres'], equals(0));
expect(result['tauxActivation'], equals(0.0));
});
test('should throw exception when stats retrieval fails', () async {
// Arrange
when(mockRepository.getMembresStats())
.thenThrow(Exception('Erreur serveur'));
// Act & Assert
expect(() => useCase(), throwsException);
});
});
}