Files
tm_app/test/model/home_response_test.dart
2025-10-06 16:26:53 +03:30

97 lines
3.0 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart';
void main() {
group('HomeResponseModel Tests', () {
final mockJson = {
'partnership': 'Yes',
'selfApply': 'No',
'contracting': 'In Progress',
'tender_submitted': '3',
'approved_tenders': '2',
'tender_value': '150000',
'thunder_status': 'active',
'your_tenders': [
{
'success': true,
'message': 'Tender retrieved',
'profile_match': 0.95,
'data': {
'id': 'tnd_001',
'title': 'Bridge Construction Project',
'country_code': 'US',
},
'error': null,
},
],
};
test('fromJson creates valid HomeResponseModel instance', () {
final response = HomeResponseModel.fromJson(mockJson);
expect(response.partnership, 'Yes');
expect(response.selfApply, 'No');
expect(response.contracting, 'In Progress');
expect(response.tenderSubmitted, '3');
expect(response.approvedTenders, '2');
expect(response.tenderValue, '150000');
expect(response.thunderStatus, 'active');
final tender = response.yourTenders?.first;
expect(tender?.success, isTrue);
expect(tender?.message, 'Tender retrieved');
expect(tender?.profileMatch, 0.95);
expect(tender?.data?.id, 'tnd_001');
expect(tender?.data?.title, 'Bridge Construction Project');
});
test('toJson converts model back to JSON correctly', () {
final response = HomeResponseModel.fromJson(mockJson);
final json = response.toJson();
expect(json['partnership'], 'Yes');
expect(json['selfApply'], 'No');
expect(json['tender_submitted'], '3');
final tenders = response.yourTenders ?? [];
expect(tenders.length, 1);
final tender = tenders.first;
final tenderJson = tender.toJson();
expect(tenderJson['success'], true);
expect(tenderJson['message'], 'Tender retrieved');
final tenderData =
(tenderJson['data'] is Map)
? tenderJson['data'] as Map<String, dynamic>
: tender.data?.toJson();
expect(tenderData?['id'], 'tnd_001');
expect(tenderData?['title'], 'Bridge Construction Project');
});
test('copyWith correctly updates fields', () {
final response = HomeResponseModel.fromJson(mockJson);
final updated = response.copyWith(
partnership: 'No',
tenderValue: '999999',
);
expect(updated.partnership, 'No');
expect(updated.tenderValue, '999999');
expect(updated.selfApply, equals('No'));
});
test('equality operator works correctly', () {
final res1 = HomeResponseModel.fromJson(mockJson);
final res2 = HomeResponseModel.fromJson(mockJson);
final res3 = res1.copyWith(partnership: 'Different');
expect(res1, equals(res2));
expect(res1.hashCode, equals(res2.hashCode));
expect(res1, isNot(equals(res3)));
});
});
}