Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/components/time_picker_input_field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<TimePickerInputField> createState() => _TimePickerInputFieldState();
Expand All @@ -31,7 +31,7 @@ class _TimePickerInputFieldState extends State<TimePickerInputField> {
if (context.mounted) {
_timeController.text = _selectedTime!.format(context);
}
widget.onTimeSelected(picked);
widget.onTimeChanged(picked);
}
}

Expand Down
2 changes: 1 addition & 1 deletion lib/record_input_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class _RecordInputScreenState extends State<RecordInputScreen> {
Expanded(
child: TimePickerInputField(
initialTime: _selectedTime,
onTimeSelected: (time) => _updateTime(time),
onTimeChanged: (time) => _updateTime(time),
),
),
],
Expand Down
57 changes: 57 additions & 0 deletions test/components/time_picker_input_field_test.dart
Original file line number Diff line number Diff line change
@@ -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)));
},
);
});
}