86ed7bc665
- Updated the `Lot`, `Organization`, and `OrganizationAddress` models to enhance data mapping for tender details. - Revised the `TenderData` model to include additional fields reflecting the API response structure. - Improved UI components across desktop, mobile, and tablet views by commenting out unused sections for future use. - Added new string constants for lot details in the tender information section. - Enhanced unit tests to cover new model fields and ensure resilience to partial API payloads.
207 lines
6.3 KiB
Dart
207 lines
6.3 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:tm_app/data/services/model/feedback_data/feedback_data.dart';
|
|
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
|
|
import 'package:tm_app/data/services/model/organization/organization.dart';
|
|
|
|
void main() {
|
|
group('FeedbackData Tests', () {
|
|
test('fromJson should parse JSON correctly', () {
|
|
final json = {
|
|
'company_id': 'COMP123',
|
|
'created_at': 1700000000,
|
|
'customer_id': 'CUST456',
|
|
'feedback_type': 'positive',
|
|
'id': 'FB001',
|
|
'tender_id': 'TND789',
|
|
'updated_at': 1750000000,
|
|
'tender': {
|
|
'success': true,
|
|
'message': 'ok',
|
|
'id': 'TND789',
|
|
'tender_id': 'TND789',
|
|
'notice_publication_id': 'NP123',
|
|
'publication_date': 1700000000,
|
|
'title': 'New Tender',
|
|
'description': 'Tender description',
|
|
'procurement_type_code': 'PT001',
|
|
'procedure_code': 'PRC001',
|
|
'estimated_value': 1000000,
|
|
'currency': 'USD',
|
|
'duration': '12',
|
|
'tender_deadline': 1710000000,
|
|
'submission_deadline': 1710000000,
|
|
'application_deadline': 1710000000,
|
|
'submission_url': 'https://example.com',
|
|
'country_code': 'IR',
|
|
'duration_unit': 'month',
|
|
'buyer_organization': {
|
|
'id': 'ORG001',
|
|
'name': 'Buyer Org',
|
|
},
|
|
'status': 'active',
|
|
},
|
|
};
|
|
|
|
final feedback = FeedbackData.fromJson(json);
|
|
|
|
expect(feedback.companyId, 'COMP123');
|
|
expect(feedback.feedbackType, 'positive');
|
|
expect(feedback.tender?.id, 'TND789');
|
|
expect(feedback.tender?.title, 'New Tender');
|
|
expect(feedback.tender?.buyerOrganization?.name, 'Buyer Org');
|
|
});
|
|
|
|
test('toJson should return valid JSON map', () {
|
|
final tender = const TenderData(
|
|
success: true,
|
|
message: 'ok',
|
|
id: 'TND123',
|
|
tenderId: 'TND123',
|
|
noticePublicationId: 'NP123',
|
|
noticeTypeCode: 'cn-standard',
|
|
formType: 'competition',
|
|
noticeLanguageCode: 'ENG',
|
|
issueDate: 1700000000,
|
|
issueTime: 1700000000,
|
|
publicationDate: 1700000000,
|
|
title: 'Tender Title',
|
|
description: 'Some description',
|
|
procurementTypeCode: 'PROC001',
|
|
procedureCode: 'PROCEDURE1',
|
|
estimatedValue: 500000,
|
|
currency: 'USD',
|
|
duration: '6',
|
|
tenderDeadline: 1710000000,
|
|
submissionDeadline: 1715000000,
|
|
applicationDeadline: 1712000000,
|
|
submissionUrl: 'https://example.com',
|
|
countryCode: 'IR',
|
|
durationUnit: 'month',
|
|
buyerOrganization: Organization(
|
|
name: 'Test Organization',
|
|
companyId: 'ORG001',
|
|
address: null,
|
|
),
|
|
lots: null,
|
|
officialLanguages: null,
|
|
status: 'active',
|
|
);
|
|
|
|
final feedback = FeedbackData(
|
|
companyId: 'COMP001',
|
|
createdAt: 1700000000,
|
|
customerId: 'CUST001',
|
|
feedbackType: 'negative',
|
|
id: 'FB001',
|
|
tenderId: 'TND123',
|
|
tender: tender,
|
|
updatedAt: 1750000000,
|
|
);
|
|
|
|
final json = feedback.toJson();
|
|
|
|
expect(json['company_id'], 'COMP001');
|
|
expect(json['feedback_type'], 'negative');
|
|
|
|
final tenderJson = (json['tender'] as TenderData).toJson();
|
|
expect(tenderJson['id'], 'TND123');
|
|
expect(tenderJson['title'], 'Tender Title');
|
|
expect((tenderJson['buyer_organization'] as Organization).toJson()['name'], 'Test Organization');
|
|
});
|
|
|
|
test('copyWith should modify specific fields only', () {
|
|
final feedback = const FeedbackData(
|
|
companyId: 'COMP001',
|
|
createdAt: 1700000000,
|
|
customerId: 'CUST001',
|
|
feedbackType: 'neutral',
|
|
id: 'FB001',
|
|
tenderId: 'TND001',
|
|
tender: TenderData(
|
|
success: false,
|
|
message: 'fail',
|
|
id: 'TND001',
|
|
tenderId: 'TND001',
|
|
noticePublicationId: 'NP1',
|
|
noticeTypeCode: 'cn-standard',
|
|
formType: 'competition',
|
|
noticeLanguageCode: 'ENG',
|
|
issueDate: 1700000000,
|
|
issueTime: 1700000000,
|
|
publicationDate: 1700000000,
|
|
title: 'Old Tender',
|
|
description: 'Old desc',
|
|
procurementTypeCode: 'PT001',
|
|
procedureCode: 'PC001',
|
|
estimatedValue: 10000,
|
|
currency: 'USD',
|
|
duration: '3',
|
|
tenderDeadline: 1710000000,
|
|
submissionDeadline: 1715000000,
|
|
applicationDeadline: 1712000000,
|
|
submissionUrl: 'https://example.com',
|
|
countryCode: 'IR',
|
|
durationUnit: 'month',
|
|
buyerOrganization: Organization(
|
|
name: 'Old Org',
|
|
companyId: 'ORG001',
|
|
address: null,
|
|
),
|
|
lots: null,
|
|
officialLanguages: null,
|
|
status: 'inactive',
|
|
),
|
|
updatedAt: 1750000000,
|
|
);
|
|
|
|
final updated = feedback.copyWith(feedbackType: 'positive');
|
|
|
|
expect(updated.feedbackType, 'positive');
|
|
expect(updated.companyId, 'COMP001');
|
|
expect(updated.tender?.title, 'Old Tender');
|
|
});
|
|
|
|
test('fromJson handles null fields safely', () {
|
|
final json = {
|
|
'company_id': null,
|
|
'created_at': null,
|
|
'customer_id': null,
|
|
'feedback_type': null,
|
|
'id': null,
|
|
'tender_id': null,
|
|
'tender': null,
|
|
'updated_at': null,
|
|
};
|
|
|
|
final feedback = FeedbackData.fromJson(json);
|
|
|
|
expect(feedback.companyId, isNull);
|
|
expect(feedback.tender, isNull);
|
|
expect(feedback.feedbackType, isNull);
|
|
});
|
|
|
|
test('fromJson -> toJson round-trip should preserve data', () {
|
|
final json = {
|
|
'company_id': 'C1',
|
|
'feedback_type': 'positive',
|
|
'tender': {
|
|
'id': 'T1',
|
|
'title': 'Tender 1',
|
|
'success': true,
|
|
'buyer_organization': {
|
|
'id': 'O1',
|
|
'name': 'Org 1',
|
|
},
|
|
},
|
|
};
|
|
|
|
final feedback = FeedbackData.fromJson(json);
|
|
final output = feedback.toJson();
|
|
|
|
expect(output['company_id'], 'C1');
|
|
final tenderJson = (output['tender'] as TenderData).toJson();
|
|
expect(tenderJson['title'], 'Tender 1');
|
|
expect((tenderJson['buyer_organization'] as Organization).toJson() ['name'], 'Org 1');
|
|
});
|
|
});
|
|
} |