97 lines
2.7 KiB
Dart
97 lines
2.7 KiB
Dart
/// Tests unitaires pour GetCacheStats use case
|
|
library get_cache_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/settings/domain/repositories/system_config_repository.dart';
|
|
import 'package:unionflow_mobile_apps/features/settings/domain/usecases/get_cache_stats.dart';
|
|
import 'package:unionflow_mobile_apps/features/settings/data/models/cache_stats_model.dart';
|
|
|
|
@GenerateMocks([ISystemConfigRepository])
|
|
import 'get_cache_stats_test.mocks.dart';
|
|
|
|
void main() {
|
|
late GetCacheStats useCase;
|
|
late MockISystemConfigRepository mockRepository;
|
|
|
|
setUp(() {
|
|
mockRepository = MockISystemConfigRepository();
|
|
useCase = GetCacheStats(mockRepository);
|
|
});
|
|
|
|
group('GetCacheStats Use Case', () {
|
|
final tCacheStats = CacheStatsModel(
|
|
totalEntries: 1000,
|
|
hits: 850,
|
|
misses: 150,
|
|
hitRate: 0.85,
|
|
totalSizeBytes: 1024 * 1024 * 50, // 50 MB
|
|
);
|
|
|
|
test('should return cache statistics', () async {
|
|
// Arrange
|
|
when(mockRepository.getCacheStats()).thenAnswer((_) async => tCacheStats);
|
|
|
|
// Act
|
|
final result = await useCase();
|
|
|
|
// Assert
|
|
expect(result, equals(tCacheStats));
|
|
expect(result.totalEntries, equals(1000));
|
|
expect(result.hitRate, equals(0.85));
|
|
verify(mockRepository.getCacheStats());
|
|
verifyNoMoreInteractions(mockRepository);
|
|
});
|
|
|
|
test('should handle empty cache', () async {
|
|
// Arrange
|
|
final emptyCacheStats = CacheStatsModel(
|
|
totalEntries: 0,
|
|
hits: 0,
|
|
misses: 0,
|
|
hitRate: 0.0,
|
|
totalSizeBytes: 0,
|
|
);
|
|
when(mockRepository.getCacheStats())
|
|
.thenAnswer((_) async => emptyCacheStats);
|
|
|
|
// Act
|
|
final result = await useCase();
|
|
|
|
// Assert
|
|
expect(result.totalEntries, equals(0));
|
|
expect(result.hitRate, equals(0.0));
|
|
});
|
|
|
|
test('should handle low hit rate cache', () async {
|
|
// Arrange
|
|
final lowHitCacheStats = CacheStatsModel(
|
|
totalEntries: 100,
|
|
hits: 20,
|
|
misses: 80,
|
|
hitRate: 0.20,
|
|
totalSizeBytes: 1024 * 100,
|
|
);
|
|
when(mockRepository.getCacheStats())
|
|
.thenAnswer((_) async => lowHitCacheStats);
|
|
|
|
// Act
|
|
final result = await useCase();
|
|
|
|
// Assert
|
|
expect(result.hitRate, lessThan(0.5));
|
|
expect(result.misses!, greaterThan(result.hits!));
|
|
});
|
|
|
|
test('should throw exception when stats retrieval fails', () async {
|
|
// Arrange
|
|
when(mockRepository.getCacheStats())
|
|
.thenThrow(Exception('Stats unavailable'));
|
|
|
|
// Act & Assert
|
|
expect(() => useCase(), throwsException);
|
|
});
|
|
});
|
|
}
|