TF-2502 Write unit test for all day event
This commit is contained in:
@@ -272,21 +272,53 @@ extension CalendarEventExtension on CalendarEvent {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
String get dateTimeEventAsString {
|
bool get isAllDayEvent {
|
||||||
if (startUtcDate != null && endUtcDate != null) {
|
if (startUtcDate != null && endUtcDate != null) {
|
||||||
final startHour = startUtcDate!.value.hour;
|
final startDateValue = startUtcDate!.value;
|
||||||
final startMinute = startUtcDate!.value.minute;
|
final endDateValue = endUtcDate!.value;
|
||||||
final endHour = endUtcDate!.value.hour;
|
|
||||||
final endMinute = endUtcDate!.value.minute;
|
final eventDurationInHours = startDateValue.difference(endDateValue).inHours;
|
||||||
log('CalendarEventExtension::endDate: $endUtcDate');
|
|
||||||
if (startHour == 0 && startMinute == 0 && endHour == 0 && endMinute == 0 && !DateUtils.isSameDay(localStartDate, localEndDate)) {
|
final startHour = startDateValue.hour;
|
||||||
final timeZoneOffset = DateTime.now().timeZoneOffset.inHours;
|
final startMinute = startDateValue.minute;
|
||||||
final timeZoneOffsetAsString = timeZoneOffset >= 0 ? '+$timeZoneOffset' : '$timeZoneOffset';
|
final startSecond = startDateValue.second;
|
||||||
final timeStart = formatDate(AppUtils.getCurrentDateLocale(), startUtcDate!.value);
|
|
||||||
final timeEnd = formatDate(AppUtils.getCurrentDateLocale(), endUtcDate!.value);
|
final endHour = endDateValue.hour;
|
||||||
return '$timeStart - $timeEnd (GMT$timeZoneOffsetAsString)';
|
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) {
|
if (localStartDate != null && localEndDate != null) {
|
||||||
final timeStart = formatDateTime(localStartDate!);
|
final timeStart = formatDateTime(localStartDate!);
|
||||||
final timeEnd = DateUtils.isSameDay(localStartDate, localEndDate)
|
final timeEnd = DateUtils.isSameDay(localStartDate, localEndDate)
|
||||||
|
|||||||
+44
@@ -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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user