From 620d155dc3998e97b951b7854ab4ad004b3be589 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 13 Nov 2025 00:21:19 +0700 Subject: [PATCH] TF-4146 Should handle time for email view --- .../domain/extensions/datetime_extension.dart | 4 +- .../extensions/date_time_extension_test.dart | 85 +++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 core/test/domain/extensions/date_time_extension_test.dart diff --git a/core/lib/domain/extensions/datetime_extension.dart b/core/lib/domain/extensions/datetime_extension.dart index ad709e8d2..ccce421b7 100644 --- a/core/lib/domain/extensions/datetime_extension.dart +++ b/core/lib/domain/extensions/datetime_extension.dart @@ -51,9 +51,9 @@ extension DateTimeNullableExtension on DateTime? { String toPatternForEmailView() { if (this?.isThisYear() == true) { - return 'dd MMM, HH:mm a'; + return 'dd MMM, hh:mm a'; } else { - return 'dd MMM yyyy, HH:mm a'; + return 'dd MMM yyyy, hh:mm a'; } } diff --git a/core/test/domain/extensions/date_time_extension_test.dart b/core/test/domain/extensions/date_time_extension_test.dart new file mode 100644 index 000000000..4c2b96c5f --- /dev/null +++ b/core/test/domain/extensions/date_time_extension_test.dart @@ -0,0 +1,85 @@ +import 'package:core/domain/extensions/datetime_extension.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:intl/intl.dart'; + +void main() { + group('DateTimeExtension → toPatternForEmailView', () { + test('should return pattern without year when date is in current year', () { + // Arrange + final now = DateTime.now(); + final date = DateTime(now.year, 5, 10, 17, 30); + + // Act + final pattern = date.toPatternForEmailView(); + final formatted = DateFormat(pattern, 'en_US').format(date); + + // Assert + expect(pattern, 'dd MMM, hh:mm a'); + expect( + formatted.contains('${date.year}'), + isFalse, + reason: 'Should not include year when in the current year', + ); + }); + + test('should return pattern with year when date is not in current year', + () { + // Arrange + final now = DateTime.now(); + final date = DateTime(now.year - 1, 12, 25, 8, 45); + + // Act + final pattern = date.toPatternForEmailView(); + final formatted = DateFormat(pattern, 'en_US').format(date); + + // Assert + expect(pattern, 'dd MMM yyyy, hh:mm a'); + expect( + formatted.contains('${date.year}'), + isTrue, + reason: 'Should include year when not in current year', + ); + }); + + test('should return pattern with year when date is null', () { + // Arrange + DateTime? date; + + // Act & Assert + expect( + date.toPatternForEmailView(), + 'dd MMM yyyy, hh:mm a', + reason: 'Null date should return default pattern with year', + ); + }); + + test('should correctly display 12-hour format with AM/PM (no 24h time)', + () { + // Arrange + final now = DateTime.now(); + final date = DateTime(now.year, 11, 13, 17, 0); // 17:00 = 5:00 PM + + // Act + final pattern = date.toPatternForEmailView(); + final formatted = DateFormat(pattern, 'en_US').format(date); + + // Assert + expect(pattern, 'dd MMM, hh:mm a'); + expect( + formatted.contains('17:'), + isFalse, + reason: 'Should not show 24-hour format like 17:00', + ); + expect( + formatted.toLowerCase().contains('pm'), + isTrue, + reason: 'Should contain AM/PM indicator', + ); + expect( + formatted.contains('05:'), + isTrue, + reason: 'Should display 12-hour format (05:00 PM)', + ); + }); + }); +}