first commit
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
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');
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user