refactor: remove unused local and remote data sources, models, and tests for chicken and poultry features to streamline codebase
This commit is contained in:
@@ -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 {}
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
@@ -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', () {
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
@@ -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 {}
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user