fix : update local.properties path and improve null safety in chicken_local_imp.dart and chicken_repository_imp.dart; refactor profile view for better readability
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
import 'package:rasadyar_chicken/data/data_source/local/chicken_local_imp.dart';
|
||||
import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class MockHiveLocalStorage extends Mock implements HiveLocalStorage {}
|
||||
|
||||
void main() {
|
||||
late ChickenLocalDataSourceImp chickenLocalDataSource;
|
||||
late MockHiveLocalStorage mockHiveLocalStorage;
|
||||
|
||||
setUp(() {
|
||||
mockHiveLocalStorage = MockHiveLocalStorage();
|
||||
|
||||
// Register the mock in GetIt for dependency injection
|
||||
if (diCore.isRegistered<HiveLocalStorage>()) {
|
||||
diCore.unregister<HiveLocalStorage>();
|
||||
}
|
||||
diCore.registerSingleton<HiveLocalStorage>(mockHiveLocalStorage);
|
||||
|
||||
chickenLocalDataSource = ChickenLocalDataSourceImp();
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
// Clean up GetIt registration
|
||||
if (diCore.isRegistered<HiveLocalStorage>()) {
|
||||
diCore.unregister<HiveLocalStorage>();
|
||||
}
|
||||
});
|
||||
|
||||
group('ChickenLocalDataSourceImp', () {
|
||||
group('openBox', () {
|
||||
test('should call local openBox with correct box name', () async {
|
||||
// Arrange
|
||||
when(
|
||||
() => mockHiveLocalStorage.openBox<WidelyUsedLocalModel>(
|
||||
'Chicken_Widley_Box',
|
||||
),
|
||||
).thenAnswer((_) async {});
|
||||
|
||||
// Act
|
||||
await chickenLocalDataSource.openBox();
|
||||
|
||||
// Assert
|
||||
verify(
|
||||
() => mockHiveLocalStorage.openBox<WidelyUsedLocalModel>(
|
||||
'Chicken_Widley_Box',
|
||||
),
|
||||
).called(1);
|
||||
});
|
||||
});
|
||||
|
||||
group('initWidleyUsed', () {
|
||||
test('should initialize widely used items', () async {
|
||||
// Act
|
||||
await chickenLocalDataSource.initWidleyUsed();
|
||||
|
||||
// Assert
|
||||
// This method currently doesn't interact with the mock, but we can verify it completes
|
||||
expect(chickenLocalDataSource.initWidleyUsed, isA<Function>());
|
||||
});
|
||||
});
|
||||
|
||||
group('getAllWidely', () {
|
||||
test('should return first widely used model when data exists', () async {
|
||||
// Arrange
|
||||
final expectedModel = WidelyUsedLocalModel(hasInit: true, items: []);
|
||||
final mockData = [expectedModel];
|
||||
|
||||
when(
|
||||
() => mockHiveLocalStorage.readBox<WidelyUsedLocalModel>(
|
||||
boxName: 'Chicken_Widley_Box',
|
||||
),
|
||||
).thenReturn(mockData);
|
||||
|
||||
// Act
|
||||
final result = chickenLocalDataSource.getAllWidely();
|
||||
|
||||
// Assert
|
||||
expect(result, equals(expectedModel));
|
||||
verify(
|
||||
() => mockHiveLocalStorage.readBox<WidelyUsedLocalModel>(
|
||||
boxName: 'Chicken_Widley_Box',
|
||||
),
|
||||
).called(1);
|
||||
});
|
||||
|
||||
test('should return null when no data exists', () async {
|
||||
// Arrange
|
||||
when(
|
||||
() => mockHiveLocalStorage.readBox<WidelyUsedLocalModel>(
|
||||
boxName: 'Chicken_Widley_Box',
|
||||
),
|
||||
).thenReturn(null);
|
||||
|
||||
// Act
|
||||
final result = chickenLocalDataSource.getAllWidely();
|
||||
|
||||
// Assert
|
||||
expect(result, isNull);
|
||||
verify(
|
||||
() => mockHiveLocalStorage.readBox<WidelyUsedLocalModel>(
|
||||
boxName: 'Chicken_Widley_Box',
|
||||
),
|
||||
).called(1);
|
||||
});
|
||||
|
||||
test('should return null when empty list is returned', () async {
|
||||
// Arrange
|
||||
when(
|
||||
() => mockHiveLocalStorage.readBox<WidelyUsedLocalModel>(
|
||||
boxName: 'Chicken_Widley_Box',
|
||||
),
|
||||
).thenReturn([]);
|
||||
|
||||
// Act
|
||||
final result = chickenLocalDataSource.getAllWidely();
|
||||
|
||||
// Assert
|
||||
expect(result, isNull);
|
||||
verify(
|
||||
() => mockHiveLocalStorage.readBox<WidelyUsedLocalModel>(
|
||||
boxName: 'Chicken_Widley_Box',
|
||||
),
|
||||
).called(1);
|
||||
});
|
||||
|
||||
test('should return first item when multiple items exist', () async {
|
||||
// Arrange
|
||||
final firstModel = WidelyUsedLocalModel(hasInit: true, items: []);
|
||||
final secondModel = WidelyUsedLocalModel(hasInit: false, items: []);
|
||||
final mockData = [firstModel, secondModel];
|
||||
|
||||
when(
|
||||
() => mockHiveLocalStorage.readBox<WidelyUsedLocalModel>(
|
||||
boxName: 'Chicken_Widley_Box',
|
||||
),
|
||||
).thenReturn(mockData);
|
||||
|
||||
// Act
|
||||
final result = chickenLocalDataSource.getAllWidely();
|
||||
|
||||
// Assert
|
||||
expect(result, equals(firstModel));
|
||||
verify(
|
||||
() => mockHiveLocalStorage.readBox<WidelyUsedLocalModel>(
|
||||
boxName: 'Chicken_Widley_Box',
|
||||
),
|
||||
).called(1);
|
||||
});
|
||||
});
|
||||
|
||||
group('boxName', () {
|
||||
test('should have correct box name', () {
|
||||
// Assert
|
||||
expect(chickenLocalDataSource.boxName, equals('Chicken_Widley_Box'));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user