diff --git a/lib/components/time_picker_input_field.dart b/lib/components/time_picker_input_field.dart index f2574e2..6a3b9ed 100644 --- a/lib/components/time_picker_input_field.dart +++ b/lib/components/time_picker_input_field.dart @@ -4,11 +4,11 @@ class TimePickerInputField extends StatefulWidget { const TimePickerInputField({ super.key, required this.initialTime, - required this.onTimeSelected, + required this.onTimeChanged, }); final TimeOfDay initialTime; - final Function(TimeOfDay) onTimeSelected; + final Function(TimeOfDay) onTimeChanged; @override State createState() => _TimePickerInputFieldState(); @@ -31,7 +31,7 @@ class _TimePickerInputFieldState extends State { if (context.mounted) { _timeController.text = _selectedTime!.format(context); } - widget.onTimeSelected(picked); + widget.onTimeChanged(picked); } } diff --git a/lib/record_input_screen.dart b/lib/record_input_screen.dart index 5c022bb..1713fda 100644 --- a/lib/record_input_screen.dart +++ b/lib/record_input_screen.dart @@ -108,7 +108,7 @@ class _RecordInputScreenState extends State { Expanded( child: TimePickerInputField( initialTime: _selectedTime, - onTimeSelected: (time) => _updateTime(time), + onTimeChanged: (time) => _updateTime(time), ), ), ], diff --git a/test/components/time_picker_input_field_test.dart b/test/components/time_picker_input_field_test.dart new file mode 100644 index 0000000..42defda --- /dev/null +++ b/test/components/time_picker_input_field_test.dart @@ -0,0 +1,57 @@ +import 'package:bp_pulse_log/components/time_picker_input_field.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('TimePickerInputField Widget Tests', () { + testWidgets( + 'TimePickerInputField displays a time and allows it to be changed.', + (WidgetTester tester) async { + TimeOfDay? selectedTime; + TimeOfDay initialTime = const TimeOfDay(hour: 10, minute: 30); + + await tester.pumpWidget( + MaterialApp( + title: 'TimePickerInputField Test', + home: Scaffold( + body: Center( + child: TimePickerInputField( + initialTime: initialTime, + onTimeChanged: (TimeOfDay value) { + selectedTime = value; + }, + ), + ), + ), + ), + ); + + // Verify that the initial date is displayed in the format MM-dd-yyyy + expect(find.text('10:30 AM'), findsExactly(1)); + expect( + find.widgetWithIcon(TextFormField, Icons.access_time), + findsOneWidget, + ); + expect(find.text('Time'), findsOneWidget); + + // Simulate tapping the calendar icon to open the date picker + await tester.tap(find.byIcon(Icons.access_time)); + await tester.pumpAndSettle(); + expect(find.byType(TimePickerDialog), findsOneWidget); + + // Simulate selecting the 'PM' button + await tester.tap(find.text('PM')); + await tester.pumpAndSettle(); + await tester.tap(find.text('OK')); + await tester.pumpAndSettle(); + + // Verify that the displayed date has been updated + expect(find.text('10:30 PM'), findsOneWidget); + + // Verify that the callback was called with the correct date + expect(selectedTime, isNotNull); + expect(selectedTime!, equals(const TimeOfDay(hour: 22, minute: 30))); + }, + ); + }); +}