184 lines
5.5 KiB
Dart
184 lines
5.5 KiB
Dart
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');
|
|
});
|
|
});
|
|
}
|