import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:hidalyx_drluiscastro/features/dashboard/data/models/patient_summary_model.dart'; import 'package:hidalyx_drluiscastro/features/dashboard/presentation/widgets/today_appointments_card.dart'; void main() { group('Sala de Espera (Waiting Room) Logic Tests', () { test('PatientSummaryModel correctly handles waiting room status and helpers', () { const p1 = PatientSummaryModel( id: 1, nombre: 'Carlos', apellido: 'Santana', cedula: '001-1234567-8', telefono: '809-555-0101', fecReg: '21/09/2026', fecProxCita: '21/09/2026', seguro: 'Senasa', motCons: 'Dolor lumbar', estadoEspera: 'no_presente', ); expect(p1.isNoPresente, isTrue); expect(p1.isEnEspera, isFalse); expect(p1.isEnConsulta, isFalse); expect(p1.isAtendido, isFalse); expect(p1.estadoEsperaLabel, 'No Presente'); final pEnEspera = p1.copyWith(estadoEspera: 'en_espera'); expect(pEnEspera.isEnEspera, isTrue); expect(pEnEspera.isNoPresente, isFalse); expect(pEnEspera.estadoEsperaLabel, 'En Sala de Espera'); final pEnConsulta = p1.copyWith(estadoEspera: 'en_consulta'); expect(pEnConsulta.isEnConsulta, isTrue); expect(pEnConsulta.estadoEsperaLabel, 'En Consulta'); final pAtendido = p1.copyWith(estadoEspera: 'atendido'); expect(pAtendido.isAtendido, isTrue); expect(pAtendido.estadoEsperaLabel, 'Atendido'); }); test('PatientSummaryModel serialization includes estado_espera', () { final json = { 'id': 42, 'nombre': 'Elena', 'apellido': 'Gomez', 'cedula': '001-9999999-9', 'telefono': '809-555-9999', 'fec_reg': '21/09/2026', 'fec_proxcita': '21/09/2026', 'seguro': 'Humano', 'mot_cons': 'Evaluación general', 'estado_espera': 'en_espera', }; final model = PatientSummaryModel.fromJson(json); expect(model.id, 42); expect(model.estadoEspera, 'en_espera'); expect(model.isEnEspera, isTrue); final outJson = model.toJson(); expect(outJson['estado_espera'], 'en_espera'); }); }); group('TodayAppointmentsCard Waiting Room UI Tests', () { testWidgets('renders "Llegó" button for secretary when patient is not present', (tester) async { const patient = PatientSummaryModel( id: 10, nombre: 'Mario', apellido: 'Bros', cedula: '001-0000000-1', telefono: '809-111-2222', fecReg: '21/09/2026', fecProxCita: '21/09/2026', seguro: 'Universal', motCons: 'Revisión', estadoEspera: 'no_presente', ); String? triggeredStatus; await tester.pumpWidget( MaterialApp( home: Scaffold( body: TodayAppointmentsCard( appointments: const [patient], isSecretary: true, onStatusChange: (p, newStatus) async { triggeredStatus = newStatus; }, ), ), ), ); expect(find.text('Llegó'), findsOneWidget); expect(find.text('Mario Bros'), findsOneWidget); await tester.tap(find.text('Llegó')); await tester.pump(); expect(triggeredStatus, 'en_espera'); }); testWidgets('renders "En Espera" badge and Doctor action "Atender"', (tester) async { const patient = PatientSummaryModel( id: 11, nombre: 'Luigi', apellido: 'Verde', cedula: '001-0000000-2', telefono: '809-111-3333', fecReg: '21/09/2026', fecProxCita: '21/09/2026', seguro: 'Palic', motCons: 'Control', estadoEspera: 'en_espera', ); PatientSummaryModel? selectedPatient; String? updatedStatus; await tester.pumpWidget( MaterialApp( home: Scaffold( body: TodayAppointmentsCard( appointments: const [patient], isSecretary: false, // Doctor onPatientTap: (p) => selectedPatient = p, onStatusChange: (p, status) async => updatedStatus = status, ), ), ), ); expect(find.text('En Espera'), findsOneWidget); expect(find.text('Atender'), findsOneWidget); await tester.tap(find.text('Atender')); await tester.pump(); expect(updatedStatus, 'en_consulta'); expect(selectedPatient?.id, 11); }); testWidgets('renders "En Consulta" badge and Doctor action "Finalizar"', (tester) async { const patient = PatientSummaryModel( id: 12, nombre: 'Peach', apellido: 'Toadstool', cedula: '001-0000000-3', telefono: '809-111-4444', fecReg: '21/09/2026', fecProxCita: '21/09/2026', seguro: 'Universal', motCons: 'Consulta en proceso', estadoEspera: 'en_consulta', ); String? updatedStatus; await tester.pumpWidget( MaterialApp( home: Scaffold( body: TodayAppointmentsCard( appointments: const [patient], isSecretary: false, // Doctor onStatusChange: (p, status) async => updatedStatus = status, ), ), ), ); expect(find.text('En Consulta'), findsOneWidget); expect(find.text('Finalizar'), findsOneWidget); await tester.tap(find.text('Finalizar')); await tester.pump(); expect(updatedStatus, 'atendido'); }); }); }