diff --git a/lib/features/base/mixin/date_range_picker_mixin.dart b/lib/features/base/mixin/date_range_picker_mixin.dart index 78ff97a84..10f746f81 100644 --- a/lib/features/base/mixin/date_range_picker_mixin.dart +++ b/lib/features/base/mixin/date_range_picker_mixin.dart @@ -1,5 +1,6 @@ import 'package:core/presentation/utils/app_toast.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_date_range_picker/material_date_range_picker_dialog.dart'; import 'package:get/get.dart'; @@ -64,8 +65,20 @@ mixin DateRangePickerMixin { AppLocalizations.of(context).toastMessageErrorWhenSelectDateIsInValid); return; } - + log('DateRangePickerMixin::_handleSelectDateRangeResult:BEFORE:: StartDate = $startDate | EndDate = $endDate'); + final tupleDate = validateDateRange(startDate: startDate, endDate: endDate); + log('DateRangePickerMixin::_handleSelectDateRangeResult:AFTER:: StartDate = ${tupleDate.startDate} | EndDate = ${tupleDate.endDate}'); popBack(); - onCallbackAction?.call(startDate, endDate); + onCallbackAction?.call(tupleDate.startDate, tupleDate.endDate); + } + + ({DateTime? startDate, DateTime? endDate}) validateDateRange({ + required DateTime? startDate, + required DateTime? endDate + }) { + final newStartDate = startDate?.copyWith(hour: 0, minute: 0); + final newEndDate = endDate?.copyWith(hour: 23, minute: 59); + log('DateRangePickerMixin::validateDateRange: newStartDate = $newStartDate | newEndDate = $newEndDate'); + return (startDate: newStartDate, endDate: newEndDate); } } \ No newline at end of file diff --git a/test/features/base/mixin/date_range_picker_mixin_test.dart b/test/features/base/mixin/date_range_picker_mixin_test.dart new file mode 100644 index 000000000..71303fe81 --- /dev/null +++ b/test/features/base/mixin/date_range_picker_mixin_test.dart @@ -0,0 +1,56 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:tmail_ui_user/features/base/mixin/date_range_picker_mixin.dart'; + +class DateRangePickerMixinTest with DateRangePickerMixin {} + +void main() { + final dateRangePickerMixinTest = DateRangePickerMixinTest(); + + group('DateRangePickerMixin::validateDateRange::', () { + test('should set startDate to midnight and endDate to 23:59', () { + // Arrange + final DateTime startDate = DateTime(2024, 8, 30, 12, 30); + final DateTime endDate = DateTime(2024, 8, 31, 15, 45); + + // Act + final result = dateRangePickerMixinTest.validateDateRange(startDate: startDate, endDate: endDate); + + // Assert + expect(result.startDate, DateTime(2024, 8, 30, 0, 0)); + expect(result.endDate, DateTime(2024, 8, 31, 23, 59)); + }); + + test('should return null startDate and endDate if null input', () { + // Act + final result = dateRangePickerMixinTest.validateDateRange(startDate: null, endDate: null); + + // Assert + expect(result.startDate, isNull); + expect(result.endDate, isNull); + }); + + test('should set startDate to midnight and keep endDate null if only startDate is provided', () { + // Arrange + final DateTime startDate = DateTime(2024, 8, 30, 12, 30); + + // Act + final result = dateRangePickerMixinTest.validateDateRange(startDate: startDate, endDate: null); + + // Assert + expect(result.startDate, DateTime(2024, 8, 30, 0, 0)); + expect(result.endDate, isNull); + }); + + test('should set endDate to 23:59 and keep startDate null if only endDate is provided', () { + // Arrange + final DateTime endDate = DateTime(2024, 8, 31, 15, 45); + + // Act + final result = dateRangePickerMixinTest.validateDateRange(startDate: null, endDate: endDate); + + // Assert + expect(result.startDate, isNull); + expect(result.endDate, DateTime(2024, 8, 31, 23, 59)); + }); + }); +} \ No newline at end of file