Files

184 lines
5.5 KiB
Dart
Raw Permalink Normal View History

2026-09-21 16:33:51 -04:00
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');
});
});
}