import 'package:flutter_test/flutter_test.dart'; import 'package:tm_app/data/services/model/feedback_response/feedback_response.dart'; void main() { group('FeedbackResponse Model Test', () { final mockJson = { 'meta': {'limit': 10, 'offset': 0, 'page': 1, 'pages': 5, 'total': 50}, 'data': { 'company_id': 'cmp123', 'created_at': 1710000000, 'customer_id': 'cus456', 'feedback_type': 'positive', 'id': 'fb789', 'tender_id': 'tnd111', 'tender': { 'success': true, 'message': 'ok', 'id': 'tnd111', 'tender_id': 'T-001', 'notice_publication_id': 'NP-99', 'publication_date': 1710001111, 'title': 'Sample Tender', 'description': 'A description of the tender', 'procurement_type_code': 'PROC1', 'procedure_code': 'PC-01', 'estimated_value': 50000, 'currency': 'USD', 'duration': '6 months', 'tender_deadline': 1710100000, 'submission_deadline': 1710200000, 'application_deadline': 1710300000, 'submission_url': 'https://example.com/submit', 'country_code': 'US', 'duration_unit': 'months', 'buyer_organization': {'name': 'Acme Corp'}, 'status': 'open', }, 'updated_at': 1710050000, }, 'error': {'message': null, 'code': null, 'details': null}, 'message': 'Success', 'success': true, }; test('fromJson creates valid FeedbackResponse instance', () { final response = FeedbackResponse.fromJson(mockJson); expect(response.success, true); expect(response.message, 'Success'); expect(response.meta?.limit, 10); expect(response.data?.feedbackType, 'positive'); expect(response.data?.tender?.buyerOrganization?.name, 'Acme Corp'); }); test('toJson converts model back to JSON correctly', () { final response = FeedbackResponse.fromJson({ 'success': true, 'message': 'Feedback retrieved successfully', 'data': { 'id': '458749877892354573', 'feedback_type': 'like', 'updated_at': 1759746927, 'created_at': 1759734023, 'tender_id': '8885737887b51b484', 'customer_id': '68d12cb1885171088a4baff5', 'company_id': '68c7fea825ff3fc682529856', 'tender': { 'id': '8885737887b51b484', 'notice_publication_id': '00532574-2025', 'publication_date': 1755122400000, 'title': 'Rámcová dohoda na výkon dozoru stavebníka na stavbách PK středního a menšího rozsahu 2025', 'description': 'Předmětem plnění veřejné zakázky ', 'procurement_type_code': 'services', 'procedure_code': 'open', 'estimated_value': 1200000000, 'currency': 'CZK', 'duration': '', 'duration_unit': '', 'tender_deadline': 1755727200000, 'submission_deadline': 1755468000000, 'country_code': 'CZE', 'buyer_organization': {'name': 'Ředitelství silnic a dálnic s. p.'}, 'status': 'active', }, 'company': {'id': '68c7fea825ff3fc682529856', 'name': 'Opplens'}, }, }); final json = Map.from(response.toJson()); final data = (json['data'] is Map) ? Map.from(json['data']) : (response.data?.toJson() ?? {}); final tender = (data['tender'] is Map) ? Map.from(data['tender']) : (response.data?.tender?.toJson() ?? {}); final buyerOrg = (tender['buyer_organization'] is Map) ? tender['buyer_organization'] as Map : (response.data?.tender?.buyerOrganization?.toJson() ?? {}); expect(json['success'], true); expect(json['message'], 'Feedback retrieved successfully'); expect( tender['title'], 'Rámcová dohoda na výkon dozoru stavebníka na stavbách PK středního a menšího rozsahu 2025', ); expect(buyerOrg['name'], 'Ředitelství silnic a dálnic s. p.'); }); test('equality and copyWith work as expected', () { final response = FeedbackResponse.fromJson(mockJson); final updated = response.copyWith(message: 'Updated'); expect(updated.message, 'Updated'); expect(updated != response, true); }); }); }