refactor: remove unused local and remote data sources, models, and tests for chicken and poultry features to streamline codebase

This commit is contained in:
2025-12-08 16:10:34 +03:30
parent 890be0ded6
commit 455a5a5571
230 changed files with 2812 additions and 3471 deletions

View File

@@ -1,7 +1,7 @@
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_chicken/features/common/data/datasources/local/chicken_local_imp.dart';
import 'package:rasadyar_chicken/features/common/data/model/local/widely_used_local_model.dart';
import 'package:rasadyar_core/core.dart';
class MockHiveLocalStorage extends Mock implements HiveLocalStorage {}

View File

@@ -1,8 +1,8 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:rasadyar_chicken/data/data_source/remote/auth/auth_remote_imp.dart';
import 'package:rasadyar_chicken/data/models/response/user_info/user_info_model.dart';
import 'package:rasadyar_chicken/data/models/response/user_profile_model/user_profile_model.dart';
import 'package:rasadyar_chicken/features/common/data/datasources/remote/auth/auth_remote_imp.dart';
import 'package:rasadyar_chicken/features/common/data/model/response/user_info/user_info_model.dart';
import 'package:rasadyar_chicken/features/common/data/model/response/user_profile_model/user_profile_model.dart';
import 'package:rasadyar_core/core.dart';
class MockDioRemote extends Mock implements DioRemote {}

View File

@@ -1,5 +1,5 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:rasadyar_chicken/data/models/response/user_profile_model/user_profile_model.dart';
import 'package:rasadyar_chicken/features/common/data/model/response/user_profile_model/user_profile_model.dart';
void main() {
group('UserProfileModel', () {

View File

@@ -1,8 +1,8 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:rasadyar_chicken/data/data_source/remote/auth/auth_remote.dart';
import 'package:rasadyar_chicken/data/models/response/user_info/user_info_model.dart';
import 'package:rasadyar_chicken/data/models/response/user_profile_model/user_profile_model.dart';
import 'package:rasadyar_chicken/features/common/data/datasources/remote/auth/auth_remote.dart';
import 'package:rasadyar_chicken/features/common/data/model/response/user_info/user_info_model.dart';
import 'package:rasadyar_chicken/features/common/data/model/response/user_profile_model/user_profile_model.dart';
import 'package:rasadyar_chicken/data/repositories/auth/auth_repository_imp.dart';
class MockAuthRemoteDataSource extends Mock implements AuthRemoteDataSource {}

View File

@@ -1,145 +0,0 @@
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);
});
});
}

View File

@@ -1,8 +1,8 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:rasadyar_chicken/data/data_source/remote/auth/auth_remote.dart';
import 'package:rasadyar_chicken/data/models/response/user_info/user_info_model.dart';
import 'package:rasadyar_chicken/data/models/response/user_profile_model/user_profile_model.dart';
import 'package:rasadyar_chicken/features/common/data/datasources/remote/auth/auth_remote.dart';
import 'package:rasadyar_chicken/features/common/data/model/response/user_info/user_info_model.dart';
import 'package:rasadyar_chicken/features/common/data/model/response/user_profile_model/user_profile_model.dart';
import 'package:rasadyar_chicken/data/repositories/auth/auth_repository_imp.dart';
class MockAuthRemoteDataSource extends Mock implements AuthRemoteDataSource {}

View File

@@ -1,641 +0,0 @@
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/poultry_export/poultry_export.dart';
import 'package:rasadyar_chicken/data/models/request/kill_registration/kill_registration.dart';
import 'package:rasadyar_chicken/data/models/response/all_poultry/all_poultry.dart';
import 'package:rasadyar_chicken/data/models/response/approved_price/approved_price.dart';
import 'package:rasadyar_chicken/data/models/response/hatching/hatching_models.dart';
import 'package:rasadyar_chicken/data/models/response/hatching_report/hatching_report.dart';
import 'package:rasadyar_chicken/data/models/response/kill_house_poultry/kill_house_poultry.dart';
import 'package:rasadyar_chicken/data/models/response/kill_request_poultry/kill_request_poultry.dart';
import 'package:rasadyar_chicken/data/models/response/poultry_farm/poultry_farm.dart';
import 'package:rasadyar_chicken/data/models/response/poultry_hatching/poultry_hatching.dart';
import 'package:rasadyar_chicken/data/models/response/poultry_order/poultry_order.dart';
import 'package:rasadyar_chicken/data/models/response/poultry_science/home_poultry_science/home_poultry_science_model.dart';
import 'package:rasadyar_chicken/data/models/response/sell_for_freezing/sell_for_freezing.dart';
import 'package:rasadyar_chicken/data/repositories/poultry_science/poultry_science_repository_imp.dart';
import 'package:rasadyar_core/core.dart';
class MockPoultryScienceRemoteDataSource extends Mock
implements PoultryScienceRemoteDatasource {}
void main() {
late PoultryScienceRepositoryImp poultryScienceRepository;
late MockPoultryScienceRemoteDataSource mockRemote;
setUp(() {
mockRemote = MockPoultryScienceRemoteDataSource();
poultryScienceRepository = PoultryScienceRepositoryImp(mockRemote);
});
group('Poultry Science Integration Tests', () {
const token = 'test-token';
group('Complete Poultry Science Home Flow', () {
test('should complete full poultry science home workflow', () async {
// Arrange
const type = 'hatching';
final expectedHomeModel = HomePoultryScienceModel(
farmCount: 5,
hatchingCount: 1000,
hatchingQuantity: 500,
hatchingLeftOver: 200,
hatchingLosses: 50,
hatchingKilledQuantity: 250,
hatchingMaxAge: 45,
hatchingMinAge: 30,
);
final expectedHatching = [
HatchingModel(
id: 1,
key: 'hatching-1',
date: '2024-01-01',
quantity: 100,
state: 'active',
),
];
final expectedHatchingPagination = PaginationModel<HatchingModel>(
results: expectedHatching,
count: 1,
next: null,
previous: null,
);
// Mock the flow
when(
() => mockRemote.getHomePoultryScience(token: token, type: type),
).thenAnswer((_) async => expectedHomeModel);
when(
() => mockRemote.getHatchingPoultry(
token: token,
queryParameters: any(named: 'queryParameters'),
),
).thenAnswer((_) async => expectedHatchingPagination);
// Act - Step 1: Get home poultry science data
final homeModel = await poultryScienceRepository.getHomePoultry(
token: token,
type: type,
);
// Act - Step 2: Get hatching poultry data
final hatchingData = await poultryScienceRepository.getHatchingPoultry(
token: token,
queryParameters: {'page': '1', 'limit': '10'},
);
// Assert
expect(homeModel, equals(expectedHomeModel));
expect(hatchingData, equals(expectedHatchingPagination));
verify(
() => mockRemote.getHomePoultryScience(token: token, type: type),
).called(1);
verify(
() => mockRemote.getHatchingPoultry(
token: token,
queryParameters: any(named: 'queryParameters'),
),
).called(1);
});
});
group('Hatching Report Management Flow', () {
test('should complete hatching report management workflow', () async {
// Arrange
final queryParameters = {'page': '1', 'limit': '10'};
final expectedReports = [
HatchingReport(
id: 1,
key: 'report-1',
date: DateTime.parse('2024-01-01'),
state: 'completed',
),
];
final expectedPagination = PaginationModel<HatchingReport>(
results: expectedReports,
count: 1,
next: null,
previous: null,
);
final mockFormData = MockFormData();
// Mock the flow
when(
() => mockRemote.getPoultryScienceReport(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedPagination);
when(
() => mockRemote.submitPoultryScienceReport(
token: token,
data: mockFormData,
onSendProgress: any(named: 'onSendProgress'),
),
).thenAnswer((_) async {});
// Act - Step 1: Get hatching reports
final reports = await poultryScienceRepository.getHatchingPoultryReport(
token: token,
queryParameters: queryParameters,
);
// Act - Step 2: Submit new report
await poultryScienceRepository.submitPoultryScienceReport(
token: token,
data: mockFormData,
);
// Assert
expect(reports, equals(expectedPagination));
verify(
() => mockRemote.getPoultryScienceReport(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.submitPoultryScienceReport(
token: token,
data: mockFormData,
onSendProgress: any(named: 'onSendProgress'),
),
).called(1);
});
});
group('Poultry Farm Management Flow', () {
test('should complete poultry farm management workflow', () async {
// Arrange
final queryParameters = {'page': '1', 'limit': '10'};
final expectedFarms = [
PoultryFarm(
id: 1,
key: 'farm-1',
unitName: 'Farm 1',
totalCapacity: 1000,
cityName: 'Tehran',
),
];
final expectedPagination = PaginationModel<PoultryFarm>(
results: expectedFarms,
count: 1,
next: null,
previous: null,
);
// Mock the flow
when(
() => mockRemote.getPoultryScienceFarmList(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedPagination);
// Act
final farms = await poultryScienceRepository.getPoultryScienceFarmList(
token: token,
queryParameters: queryParameters,
);
// Assert
expect(farms, equals(expectedPagination));
verify(
() => mockRemote.getPoultryScienceFarmList(
token: token,
queryParameters: queryParameters,
),
).called(1);
});
});
group('Pricing and Market Data Flow', () {
test('should complete pricing and market data workflow', () async {
// Arrange
final queryParameters = {'date': '2024-01-01'};
final expectedApprovedPrice = ApprovedPrice(
approved: true,
lowestPrice: 45000.0,
highestPrice: 55000.0,
lowestWeight: 1.5,
highestWeight: 2.5,
);
final expectedSellForFreezing = SellForFreezing(permission: true);
final expectedPoultryExport = PoultryExport(
key: 'export-key',
allow: true,
limitationStatus: false,
limitation: 100.0,
);
// Mock the flow
when(
() => mockRemote.getApprovedPrice(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedApprovedPrice);
when(
() => mockRemote.getSellForFreezing(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedSellForFreezing);
when(
() => mockRemote.getPoultryExport(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedPoultryExport);
// Act - Step 1: Get approved price
final approvedPrice = await poultryScienceRepository.getApprovedPrice(
token: token,
queryParameters: queryParameters,
);
// Act - Step 2: Get sell for freezing data
final sellForFreezing = await poultryScienceRepository
.getSellForFreezing(token: token, queryParameters: queryParameters);
// Act - Step 3: Get poultry export data
final poultryExport = await poultryScienceRepository.getPoultryExport(
token: token,
queryParameters: queryParameters,
);
// Assert
expect(approvedPrice, equals(expectedApprovedPrice));
expect(sellForFreezing, equals(expectedSellForFreezing));
expect(poultryExport, equals(expectedPoultryExport));
verify(
() => mockRemote.getApprovedPrice(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.getSellForFreezing(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.getPoultryExport(
token: token,
queryParameters: queryParameters,
),
).called(1);
});
});
group('Kill Registration Flow', () {
test('should complete kill registration workflow', () async {
// Arrange
final queryParameters = {'page': '1', 'limit': '10'};
final expectedKillRequests = [
KillRequestPoultry(
key: 'kill-request-1',
unitName: 'Farm 1',
totalCapacity: 1000,
cityName: 'Tehran',
provinceName: 'Tehran',
),
];
final expectedKillHouses = [
KillHousePoultry(
name: 'Kill House 1',
killer: true,
fullname: 'Kill House Manager',
quantitySum: 500,
firstQuantity: 100,
poultryQuantitySum: 400,
killReqKey: 'killhouse-1',
),
];
final expectedPoultryHatching = [
PoultryHatching(
key: 'hatching-1',
quantity: 100,
losses: 5,
leftOver: 95,
killedQuantity: 50,
state: 'active',
date: '2024-01-01',
age: 30,
),
];
final killRegistrationRequest = KillRegistrationRequest(
killReqKey: 'registration-key',
operatorKey: 'operator-1',
poultryHatchingKey: 'hatching-1',
quantity: 100,
sendDate: '2024-01-01',
chickenBreed: 'Broiler',
indexWeight: 2.0,
losses: '5',
freezing: false,
export: false,
cash: true,
credit: false,
role: 'farmer',
poultryKey: 'poultry-1',
amount: 100000,
financialOperation: 'cash',
freeSaleInProvince: true,
confirmPoultryMobile: '09123456789',
);
// Mock the flow
when(
() => mockRemote.getUserPoultry(
token: token,
queryParameters: queryParameters,
),
).thenAnswer(
(_) async => expectedKillRequests.cast<KillRequestPoultry>(),
);
when(
() => mockRemote.getKillHouseList(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedKillHouses.cast<KillHousePoultry>());
when(
() => mockRemote.getPoultryHatching(
token: token,
queryParameters: queryParameters,
),
).thenAnswer(
(_) async => expectedPoultryHatching.cast<PoultryHatching>(),
);
when(
() => mockRemote.submitKillRegistration(
token: token,
request: killRegistrationRequest,
),
).thenAnswer((_) async {});
// Act - Step 1: Get user poultry
final killRequests = await poultryScienceRepository.getUserPoultry(
token: token,
queryParameters: queryParameters,
);
// Act - Step 2: Get kill house list
final killHouses = await poultryScienceRepository.getKillHouseList(
token: token,
queryParameters: queryParameters,
);
// Act - Step 3: Get poultry hatching
final poultryHatching = await poultryScienceRepository
.getPoultryHatching(token: token, queryParameters: queryParameters);
// Act - Step 4: Submit kill registration
await poultryScienceRepository.submitKillRegistration(
token: token,
request: killRegistrationRequest,
);
// Assert
expect(killRequests, equals(expectedKillRequests));
expect(killHouses, equals(expectedKillHouses));
expect(poultryHatching, equals(expectedPoultryHatching));
verify(
() => mockRemote.getUserPoultry(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.getKillHouseList(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.getPoultryHatching(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.submitKillRegistration(
token: token,
request: killRegistrationRequest,
),
).called(1);
});
});
group('Poultry Order Management Flow', () {
test('should complete poultry order management workflow', () async {
// Arrange
final queryParameters = {'page': '1', 'limit': '10'};
const orderId = 'order-1';
final expectedOrders = [
PoultryOrder(
key: 'order-1',
id: 1,
orderCode: 1001,
createDate: '2024-01-01',
sendDate: '2024-01-02',
quantity: 100,
firstQuantity: 100,
amount: 5000000.0,
finalState: 'pending',
provinceState: 'pending',
stateProcess: 'processing',
freeSaleInProvince: true,
freezing: false,
export: false,
market: true,
),
];
final expectedPagination = PaginationModel<PoultryOrder>(
count: 1,
next: null,
previous: null,
results: expectedOrders,
);
// Mock the flow
when(
() => mockRemote.getPoultryOderList(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedPagination);
when(
() => mockRemote.deletePoultryOder(token: token, orderId: orderId),
).thenAnswer((_) async {});
// Act - Step 1: Get poultry orders
final orders = await poultryScienceRepository.getPoultryOderList(
token: token,
queryParameters: queryParameters,
);
// Act - Step 2: Delete poultry order
await poultryScienceRepository.deletePoultryOder(
token: token,
orderId: orderId,
);
// Assert
expect(orders, equals(expectedPagination));
verify(
() => mockRemote.getPoultryOderList(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.deletePoultryOder(token: token, orderId: orderId),
).called(1);
});
});
group('All Poultry Data Flow', () {
test('should complete all poultry data retrieval workflow', () async {
// Arrange
final queryParameters = {'type': 'all'};
final expectedAllPoultry = [
AllPoultry(
key: 'poultry-1',
unitName: 'Poultry Farm 1',
lastHatchingRemainQuantity: 100,
provinceAllowSellFree: true,
),
];
// Mock the flow
when(
() => mockRemote.getAllPoultry(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedAllPoultry.cast<AllPoultry>());
// Act
final allPoultry = await poultryScienceRepository.getAllPoultry(
token: token,
queryParameters: queryParameters,
);
// Assert
expect(allPoultry, equals(expectedAllPoultry));
verify(
() => mockRemote.getAllPoultry(
token: token,
queryParameters: queryParameters,
),
).called(1);
});
});
group('Error Handling in Poultry Science Workflow', () {
test('should handle home poultry data retrieval failure', () async {
// Arrange
const type = 'hatching';
when(
() => mockRemote.getHomePoultryScience(token: token, type: type),
).thenAnswer((_) async => null);
// Act
final homeModel = await poultryScienceRepository.getHomePoultry(
token: token,
type: type,
);
// Assert
expect(homeModel, isNull);
verify(
() => mockRemote.getHomePoultryScience(token: token, type: type),
).called(1);
});
test('should handle kill registration submission failure', () async {
// Arrange
final killRegistrationRequest = KillRegistrationRequest(
killReqKey: 'registration-key',
operatorKey: 'operator-1',
poultryHatchingKey: 'hatching-1',
quantity: 100,
sendDate: '2024-01-01',
chickenBreed: 'Broiler',
indexWeight: 2.0,
losses: '5',
freezing: false,
export: false,
cash: true,
credit: false,
role: 'farmer',
poultryKey: 'poultry-1',
amount: 100000,
financialOperation: 'cash',
freeSaleInProvince: true,
confirmPoultryMobile: '09123456789',
);
when(
() => mockRemote.submitKillRegistration(
token: token,
request: killRegistrationRequest,
),
).thenThrow(Exception('Kill registration submission failed'));
// Act & Assert
expect(
() => poultryScienceRepository.submitKillRegistration(
token: token,
request: killRegistrationRequest,
),
throwsA(isA<Exception>()),
);
verify(
() => mockRemote.submitKillRegistration(
token: token,
request: killRegistrationRequest,
),
).called(1);
});
});
});
}
// Mock FormData class
class MockFormData extends Mock implements FormData {}

View File

@@ -1,456 +0,0 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:rasadyar_chicken/data/data_source/local/chicken_local.dart';
import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote.dart';
import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart';
import 'package:rasadyar_chicken/data/models/request/create_steward_free_bar/create_steward_free_bar.dart';
import 'package:rasadyar_chicken/data/models/response/allocated_made/allocated_made.dart';
import 'package:rasadyar_chicken/data/models/response/broadcast_price/broadcast_price.dart';
import 'package:rasadyar_chicken/data/models/response/guild_profile/guild_profile.dart';
import 'package:rasadyar_chicken/data/models/response/inventory/inventory_model.dart';
import 'package:rasadyar_chicken/data/models/response/kill_house_distribution_info/kill_house_distribution_info.dart';
import 'package:rasadyar_chicken/data/models/response/segmentation_model/segmentation_model.dart';
import 'package:rasadyar_chicken/data/models/response/steward_free_bar/steward_free_bar.dart';
import 'package:rasadyar_chicken/data/models/response/steward_free_bar_dashboard/steward_free_bar_dashboard.dart';
import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository_imp.dart';
import 'package:rasadyar_core/core.dart';
class MockChickenRemoteDatasource extends Mock
implements ChickenRemoteDatasource {}
class MockChickenLocalDataSource extends Mock
implements ChickenLocalDataSource {}
void main() {
late ChickenRepositoryImp chickenRepository;
late MockChickenRemoteDatasource mockRemote;
late MockChickenLocalDataSource mockLocal;
setUp(() {
mockRemote = MockChickenRemoteDatasource();
mockLocal = MockChickenLocalDataSource();
chickenRepository = ChickenRepositoryImp(
remote: mockRemote,
local: mockLocal,
);
});
group('Steward Workflow Integration Tests', () {
const token = 'test-token';
group('Complete Steward Dashboard Flow', () {
test('should complete full steward dashboard workflow', () async {
// Arrange
const startDate = '2024-01-01';
const endDate = '2024-01-31';
final expectedDashboard = StewardFreeBarDashboard(
totalBars: 1000,
totalQuantity: 800,
totalWeight: 200,
);
final expectedBroadcastPrice = BroadcastPrice(
active: true,
killHousePrice: 45000,
stewardPrice: 50000,
guildPrice: 55000,
);
final expectedProfile = GuildProfile(
key: 'profile-key',
guilds_name: 'Test Guild',
type_activity: 'Test Guild Type',
area_activity: 'Test Guild Type Description',
);
// Mock the flow
when(
() => mockRemote.getStewardDashboard(
token: token,
stratDate: startDate,
endDate: endDate,
),
).thenAnswer((_) async => expectedDashboard);
when(
() => mockRemote.getBroadcastPrice(token: token),
).thenAnswer((_) async => expectedBroadcastPrice);
when(
() => mockRemote.getProfile(token: token),
).thenAnswer((_) async => expectedProfile);
// Act - Step 1: Get steward dashboard
final dashboard = await chickenRepository.getStewardDashboard(
token: token,
stratDate: startDate,
endDate: endDate,
);
// Act - Step 2: Get broadcast price
final broadcastPrice = await chickenRepository.getBroadcastPrice(
token: token,
);
// Act - Step 3: Get profile
final profile = await chickenRepository.getProfile(token: token);
// Assert
expect(dashboard, equals(expectedDashboard));
expect(broadcastPrice, equals(expectedBroadcastPrice));
expect(profile, equals(expectedProfile));
verify(
() => mockRemote.getStewardDashboard(
token: token,
stratDate: startDate,
endDate: endDate,
),
).called(1);
verify(() => mockRemote.getBroadcastPrice(token: token)).called(1);
verify(() => mockRemote.getProfile(token: token)).called(1);
});
});
group('Inventory Management Flow', () {
test('should complete inventory management workflow', () async {
// Arrange
final expectedInventory = [
InventoryModel(
key: 'inventory-1',
name: 'Product 1',
totalCarcassesQuantity: 100,
),
InventoryModel(
key: 'inventory-2',
name: 'Product 2',
totalCarcassesQuantity: 200,
),
];
final expectedKillHouseInfo = KillHouseDistributionInfo(
stewardAllocationsWeight: 1000.0,
freeSalesWeight: 500.0,
);
// Mock the flow
when(
() => mockRemote.getInventory(
token: token,
cancelToken: any(named: 'cancelToken'),
),
).thenAnswer((_) async => expectedInventory);
when(
() => mockRemote.getKillHouseDistributionInfo(token: token),
).thenAnswer((_) async => expectedKillHouseInfo);
// Act - Step 1: Get inventory
final inventory = await chickenRepository.getInventory(token: token);
// Act - Step 2: Get kill house distribution info
final killHouseInfo = await chickenRepository
.getKillHouseDistributionInfo(token: token);
// Assert
expect(inventory, equals(expectedInventory));
expect(killHouseInfo, equals(expectedKillHouseInfo));
verify(
() => mockRemote.getInventory(
token: token,
cancelToken: any(named: 'cancelToken'),
),
).called(1);
verify(
() => mockRemote.getKillHouseDistributionInfo(token: token),
).called(1);
});
});
group('Allocation Management Flow', () {
test('should complete allocation management workflow', () async {
// Arrange
final queryParameters = {'page': '1', 'limit': '10'};
final expectedAllocations = [
AllocatedMadeModel(
key: 'allocation-1',
productName: 'Product 1',
numberOfCarcasses: 100,
),
];
final expectedPagination = PaginationModel<AllocatedMadeModel>(
results: expectedAllocations,
count: 1,
);
final allocationRequest = {
'allocationId': 'allocation-1',
'confirmed': true,
};
// Mock the flow
when(
() => mockRemote.getAllocatedMade(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedPagination);
when(
() => mockRemote.confirmAllocation(
token: token,
allocation: allocationRequest,
),
).thenAnswer((_) async {});
// Act - Step 1: Get allocated made
final allocations = await chickenRepository.getAllocatedMade(
token: token,
queryParameters: queryParameters,
);
// Act - Step 2: Confirm allocation
await chickenRepository.confirmAllocation(
token: token,
allocation: allocationRequest,
);
// Assert
expect(allocations, equals(expectedPagination));
verify(
() => mockRemote.getAllocatedMade(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.confirmAllocation(
token: token,
allocation: allocationRequest,
),
).called(1);
});
});
group('Steward Free Bar Management Flow', () {
test('should complete steward free bar management workflow', () async {
// Arrange
final queryParameters = {'page': '1', 'limit': '10'};
final expectedFreeBars = [
StewardFreeBar(
key: 'freebar-1',
killHouseName: 'Bar 1',
weightOfCarcasses: 500.0,
),
];
final expectedPagination = PaginationModel<StewardFreeBar>(
results: expectedFreeBars,
count: 1,
);
final createRequest = CreateStewardFreeBar(
key: 'new-freebar',
killHouseName: 'New Bar',
weightOfCarcasses: 300,
);
// Mock the flow
when(
() => mockRemote.getStewardPurchasesOutSideOfTheProvince(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedPagination);
when(
() => mockRemote.createStewardPurchasesOutSideOfTheProvince(
token: token,
body: createRequest,
),
).thenAnswer((_) async {});
// Act - Step 1: Get steward purchases outside province
final freeBars = await chickenRepository
.getStewardPurchasesOutSideOfTheProvince(
token: token,
queryParameters: queryParameters,
);
// Act - Step 2: Create new steward purchase
await chickenRepository.createStewardPurchasesOutSideOfTheProvince(
token: token,
body: createRequest,
);
// Assert
expect(freeBars, equals(expectedPagination));
verify(
() => mockRemote.getStewardPurchasesOutSideOfTheProvince(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.createStewardPurchasesOutSideOfTheProvince(
token: token,
body: createRequest,
),
).called(1);
});
});
group('Segmentation Management Flow', () {
test('should complete segmentation management workflow', () async {
// Arrange
final queryParameters = {'page': '1', 'limit': '10'};
final expectedSegments = [
SegmentationModel(
key: 'segment-1',
result: 'Segment 1',
quota: 'Description 1',
),
];
final expectedPagination = PaginationModel<SegmentationModel>(
results: expectedSegments,
count: 1,
);
final newSegment = SegmentationModel(
key: 'new-segment',
result: 'New Segment',
quota: 'New Description',
);
// Mock the flow
when(
() => mockRemote.getSegmentation(
token: token,
queryParameters: queryParameters,
),
).thenAnswer((_) async => expectedPagination);
when(
() => mockRemote.createSegmentation(token: token, model: newSegment),
).thenAnswer((_) async {});
// Act - Step 1: Get segmentation
final segments = await chickenRepository.getSegmentation(
token: token,
queryParameters: queryParameters,
);
// Act - Step 2: Create new segmentation
await chickenRepository.createSegmentation(
token: token,
model: newSegment,
);
// Assert
expect(segments, equals(expectedPagination));
verify(
() => mockRemote.getSegmentation(
token: token,
queryParameters: queryParameters,
),
).called(1);
verify(
() => mockRemote.createSegmentation(token: token, model: newSegment),
).called(1);
});
});
group('Local Data Integration', () {
test('should integrate local data with remote operations', () async {
// Arrange
final expectedWidelyUsed = WidelyUsedLocalModel(
hasInit: true,
items: [],
);
// Mock local data
when(() => mockLocal.getAllWidely()).thenReturn(expectedWidelyUsed);
// Act
final widelyUsed = chickenRepository.getAllWidely();
// Assert
expect(widelyUsed, equals(expectedWidelyUsed));
verify(() => mockLocal.getAllWidely()).called(1);
});
test('should initialize widely used data', () async {
// Arrange
when(() => mockLocal.initWidleyUsed()).thenAnswer((_) async {});
// Act
await chickenRepository.initWidleyUsed();
// Assert
verify(() => mockLocal.initWidleyUsed()).called(1);
});
});
group('Error Handling in Steward Workflow', () {
test('should handle inventory retrieval failure', () async {
// Arrange
when(
() => mockRemote.getInventory(
token: token,
cancelToken: any(named: 'cancelToken'),
),
).thenAnswer((_) async => null);
// Act
final inventory = await chickenRepository.getInventory(token: token);
// Assert
expect(inventory, isNull);
verify(
() => mockRemote.getInventory(
token: token,
cancelToken: any(named: 'cancelToken'),
),
).called(1);
});
test('should handle allocation confirmation failure', () async {
// Arrange
final allocationRequest = {
'allocationId': 'allocation-1',
'confirmed': true,
};
when(
() => mockRemote.confirmAllocation(
token: token,
allocation: allocationRequest,
),
).thenThrow(Exception('Allocation confirmation failed'));
// Act & Assert
expect(
() => chickenRepository.confirmAllocation(
token: token,
allocation: allocationRequest,
),
throwsA(isA<Exception>()),
);
verify(
() => mockRemote.confirmAllocation(
token: token,
allocation: allocationRequest,
),
).called(1);
});
});
});
}