test: add unit tests for poultry repository and searchable dropdown functionalities

- Introduced tests for `PoultryScienceRepositoryImp` to validate delegated remote calls.
- Added comprehensive tests for `SearchableDropdownLogic` covering selection, overlay, and search logic.
- Enhanced `SearchableDropdown` widget tests for multi-select, label building, and overlay management.
This commit is contained in:
2025-11-16 15:40:21 +03:30
parent 716a7ed259
commit a66c8b69ca
16 changed files with 812 additions and 304 deletions

View File

@@ -323,7 +323,7 @@ void main() {
).thenAnswer((_) async => mockResponse);
// Act
await authRemoteDataSource.submitUserInfo(userInfo);
await authRemoteDataSource.stewardAppLogin(token: 'test-token', queryParameters: userInfo);
// Assert
verify(

View File

@@ -146,45 +146,6 @@ void main() {
});
});
group('submitUserInfo', () {
test(
'should call remote submitUserInfo with correct parameters',
() async {
// Arrange
const phone = '09123456789';
const deviceName = 'Test Device';
final expectedData = {'mobile': phone, 'device_name': deviceName};
when(
() => mockAuthRemote.submitUserInfo(any()),
).thenAnswer((_) async {});
// Act
await authRepository.submitUserInfo(
phone: phone,
deviceName: deviceName,
);
// Assert
verify(() => mockAuthRemote.submitUserInfo(expectedData)).called(1);
},
);
test('should call remote submitUserInfo without device name', () async {
// Arrange
const phone = '09123456789';
final expectedData = {'mobile': phone, 'device_name': null};
when(
() => mockAuthRemote.submitUserInfo(any()),
).thenAnswer((_) async {});
// Act
await authRepository.submitUserInfo(phone: phone);
// Assert
verify(() => mockAuthRemote.submitUserInfo(expectedData)).called(1);
});
});
// submitUserInfo removed from API; covered by stewardAppLogin at remote layer
});
}

View File

@@ -0,0 +1,145 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:rasadyar_chicken/data/data_source/remote/poultry_science/poultry_science_remote.dart';
import 'package:rasadyar_chicken/data/models/request/kill_registration/kill_registration.dart';
import 'package:rasadyar_chicken/data/repositories/poultry_science/poultry_science_repository_imp.dart';
import 'package:rasadyar_core/core.dart';
class _MockRemote extends Mock implements PoultryScienceRemoteDatasource {}
void main() {
setUpAll(() {
registerFallbackValue(FormData());
registerFallbackValue(const KillRegistrationRequest());
registerFallbackValue(<String, dynamic>{});
});
group('PoultryScienceRepositoryImp', () {
late _MockRemote remote;
late PoultryScienceRepositoryImp repo;
setUp(() {
remote = _MockRemote();
repo = PoultryScienceRepositoryImp(remote);
});
test('getHomePoultry delegates', () async {
when(() => remote.getHomePoultryScience(token: any(named: 'token'), type: any(named: 'type')))
.thenAnswer((_) async => null);
final res = await repo.getHomePoultry(token: 't', type: 'x');
expect(res, null);
verify(() => remote.getHomePoultryScience(token: 't', type: 'x')).called(1);
});
test('getHatchingPoultry delegates', () async {
when(() => remote.getHatchingPoultry(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getHatchingPoultry(token: 't', queryParameters: {'a': 1});
expect(res, null);
verify(() => remote.getHatchingPoultry(token: 't', queryParameters: {'a': 1})).called(1);
});
test('submitPoultryScienceReport delegates', () async {
when(() => remote.submitPoultryScienceReport(token: any(named: 'token'), data: any(named: 'data'), onSendProgress: any(named: 'onSendProgress')))
.thenAnswer((_) async {});
await repo.submitPoultryScienceReport(token: 't', data: FormData());
verify(() => remote.submitPoultryScienceReport(token: 't', data: any(named: 'data'), onSendProgress: any(named: 'onSendProgress'))).called(1);
});
test('getHatchingPoultryReport delegates', () async {
when(() => remote.getPoultryScienceReport(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getHatchingPoultryReport(token: 't', queryParameters: {'q': 1});
expect(res, null);
verify(() => remote.getPoultryScienceReport(token: 't', queryParameters: {'q': 1})).called(1);
});
test('getPoultryScienceFarmList delegates', () async {
when(() => remote.getPoultryScienceFarmList(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getPoultryScienceFarmList(token: 't', queryParameters: {'p': 1});
expect(res, null);
verify(() => remote.getPoultryScienceFarmList(token: 't', queryParameters: {'p': 1})).called(1);
});
test('getApprovedPrice delegates', () async {
when(() => remote.getApprovedPrice(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getApprovedPrice(token: 't', queryParameters: {'a': 1});
expect(res, null);
verify(() => remote.getApprovedPrice(token: 't', queryParameters: {'a': 1})).called(1);
});
test('getAllPoultry delegates', () async {
when(() => remote.getAllPoultry(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getAllPoultry(token: 't', queryParameters: {'a': 1});
expect(res, null);
verify(() => remote.getAllPoultry(token: 't', queryParameters: {'a': 1})).called(1);
});
test('getSellForFreezing delegates', () async {
when(() => remote.getSellForFreezing(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getSellForFreezing(token: 't', queryParameters: {'a': 1});
expect(res, null);
verify(() => remote.getSellForFreezing(token: 't', queryParameters: {'a': 1})).called(1);
});
test('getPoultryExport delegates', () async {
when(() => remote.getPoultryExport(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getPoultryExport(token: 't', queryParameters: {'a': 1});
expect(res, null);
verify(() => remote.getPoultryExport(token: 't', queryParameters: {'a': 1})).called(1);
});
test('getUserPoultry delegates', () async {
when(() => remote.getUserPoultry(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getUserPoultry(token: 't', queryParameters: {'a': 1});
expect(res, null);
verify(() => remote.getUserPoultry(token: 't', queryParameters: {'a': 1})).called(1);
});
test('getPoultryHatching delegates', () async {
when(() => remote.getPoultryHatching(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getPoultryHatching(token: 't', queryParameters: {'a': 1});
expect(res, null);
verify(() => remote.getPoultryHatching(token: 't', queryParameters: {'a': 1})).called(1);
});
test('getKillHouseList delegates', () async {
when(() => remote.getKillHouseList(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getKillHouseList(token: 't', queryParameters: {'a': 1});
expect(res, null);
verify(() => remote.getKillHouseList(token: 't', queryParameters: {'a': 1})).called(1);
});
test('submitKillRegistration delegates', () async {
when(() => remote.submitKillRegistration(token: any(named: 'token'), request: any(named: 'request')))
.thenAnswer((_) async {});
await repo.submitKillRegistration(token: 't', request: const KillRegistrationRequest());
verify(() => remote.submitKillRegistration(token: 't', request: any(named: 'request'))).called(1);
});
test('getPoultryOderList delegates', () async {
when(() => remote.getPoultryOderList(token: any(named: 'token'), queryParameters: any(named: 'queryParameters')))
.thenAnswer((_) async => null);
final res = await repo.getPoultryOderList(token: 't', queryParameters: {'a': 1});
expect(res, null);
verify(() => remote.getPoultryOderList(token: 't', queryParameters: {'a': 1})).called(1);
});
test('deletePoultryOder delegates', () async {
when(() => remote.deletePoultryOder(token: any(named: 'token'), orderId: any(named: 'orderId')))
.thenAnswer((_) async {});
await repo.deletePoultryOder(token: 't', orderId: 'id');
verify(() => remote.deletePoultryOder(token: 't', orderId: 'id')).called(1);
});
});
}