TF-2502 Write unit test for all day event

This commit is contained in:
hieubt
2024-02-04 00:55:22 +07:00
committed by Dat H. Pham
parent b2f81142c4
commit 903440e37d
2 changed files with 89 additions and 13 deletions
@@ -272,21 +272,53 @@ extension CalendarEventExtension on CalendarEvent {
);
}
String get dateTimeEventAsString {
bool get isAllDayEvent {
if (startUtcDate != null && endUtcDate != null) {
final startHour = startUtcDate!.value.hour;
final startMinute = startUtcDate!.value.minute;
final endHour = endUtcDate!.value.hour;
final endMinute = endUtcDate!.value.minute;
log('CalendarEventExtension::endDate: $endUtcDate');
if (startHour == 0 && startMinute == 0 && endHour == 0 && endMinute == 0 && !DateUtils.isSameDay(localStartDate, localEndDate)) {
final timeZoneOffset = DateTime.now().timeZoneOffset.inHours;
final timeZoneOffsetAsString = timeZoneOffset >= 0 ? '+$timeZoneOffset' : '$timeZoneOffset';
final timeStart = formatDate(AppUtils.getCurrentDateLocale(), startUtcDate!.value);
final timeEnd = formatDate(AppUtils.getCurrentDateLocale(), endUtcDate!.value);
return '$timeStart - $timeEnd (GMT$timeZoneOffsetAsString)';
}
final startDateValue = startUtcDate!.value;
final endDateValue = endUtcDate!.value;
final eventDurationInHours = startDateValue.difference(endDateValue).inHours;
final startHour = startDateValue.hour;
final startMinute = startDateValue.minute;
final startSecond = startDateValue.second;
final endHour = endDateValue.hour;
final endMinute = endDateValue.minute;
final endSecond = endDateValue.second;
return startHour == 0
&& startMinute == 0
&& startSecond == 0
&& endHour == 0
&& endMinute == 0
&& endSecond == 0
&& eventDurationInHours % 24 == 0;
}
return false;
}
String dateTimeStringForAllDayEvent(DateTime startDate, DateTime endDate) {
final timeZoneOffset = DateTime.now().timeZoneOffset.inHours;
final timeZoneOffsetAsString = timeZoneOffset >= 0 ? '+$timeZoneOffset' : '$timeZoneOffset';
final dateStart = formatDate(AppUtils.getCurrentDateLocale(), startDate);
final endDateToDisplay = endDate.subtract(const Duration(days: 1));
final dateEnd = formatDate(AppUtils.getCurrentDateLocale(), endDateToDisplay);
if (DateUtils.isSameDay(startDate, endDateToDisplay)) {
return '$dateStart (GMT$timeZoneOffsetAsString)';
} else {
return '$dateStart - $dateEnd (GMT$timeZoneOffsetAsString)';
}
}
String get dateTimeEventAsString {
if (isAllDayEvent) {
return dateTimeStringForAllDayEvent(startUtcDate!.value, endUtcDate!.value);
}
if (localStartDate != null && localEndDate != null) {
final timeStart = formatDateTime(localStartDate!);
final timeEnd = DateUtils.isSameDay(localStartDate, localEndDate)
@@ -0,0 +1,44 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart';
import 'package:tmail_ui_user/features/email/presentation/extensions/calendar_event_extension.dart';
void main() {
group('calendar event extension test', () {
test('dateTimeEventAsString should return string with format start date - end date (timezone offset) and date formatted as DD, MM dd, YYYY for all-day event for many days', () {
const expectedFormattedDateString = 'Sunday, October 10, 2021 - Sunday, October 24, 2021 (GMT+0)';
final startDate = DateTime(2021, 10, 10, 00, 00, 00, 00, 00);
final endDate = DateTime(2021, 10, 25, 00, 00, 00, 00, 00);
final calendarEvent = CalendarEvent(
startDate: startDate,
endDate: endDate,
startUtcDate: UTCDate(startDate),
endUtcDate: UTCDate(endDate),
);
final formattedDateString = calendarEvent.dateTimeEventAsString;
expect(formattedDateString, expectedFormattedDateString);
});
test('dateTimeEventAsString should return string with format date (timezone offset) and date formatted as DD, MM dd, YYYY for all-day event for one day', () {
const expectedFormattedDateString = 'Sunday, October 10, 2021 (GMT+0)';
final startDate = DateTime(2021, 10, 10, 00, 00, 00, 00, 00);
final endDate = DateTime(2021, 10, 11, 00, 00, 00, 00, 00);
final calendarEvent = CalendarEvent(
startDate: startDate,
endDate: endDate,
startUtcDate: UTCDate(startDate),
endUtcDate: UTCDate(endDate),
);
final formattedDateString = calendarEvent.dateTimeEventAsString;
expect(formattedDateString, expectedFormattedDateString);
});
});
}