111 lines
3.1 KiB
Dart
111 lines
3.1 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:jiffy/jiffy.dart';
|
|
import 'package:marianum_mobile/extensions/date_time.dart';
|
|
|
|
void main() {
|
|
setUpAll(() async {
|
|
// Jiffy needs locale data once before any formatting calls.
|
|
await Jiffy.setLocale('de');
|
|
});
|
|
|
|
group('IsSameDay', () {
|
|
test('isSameDay matches by year/month/day, ignoring time', () {
|
|
final a = DateTime(2026, 5, 8, 9, 30);
|
|
final b = DateTime(2026, 5, 8, 22, 0);
|
|
expect(a.isSameDay(b), isTrue);
|
|
});
|
|
|
|
test('isSameDay differs across midnight', () {
|
|
final a = DateTime(2026, 5, 8, 23, 59);
|
|
final b = DateTime(2026, 5, 9, 0, 0);
|
|
expect(a.isSameDay(b), isFalse);
|
|
});
|
|
|
|
test('isSameOrAfter is inclusive', () {
|
|
final a = DateTime(2026, 5, 8, 12);
|
|
final b = DateTime(2026, 5, 8, 12);
|
|
expect(a.isSameOrAfter(b), isTrue);
|
|
expect(a.add(const Duration(seconds: 1)).isSameOrAfter(b), isTrue);
|
|
expect(a.subtract(const Duration(seconds: 1)).isSameOrAfter(b), isFalse);
|
|
});
|
|
});
|
|
|
|
group('DateTimeFormatting', () {
|
|
final dt = DateTime(2026, 5, 8, 9, 7);
|
|
|
|
test('formatHm pads hours and minutes to two digits', () {
|
|
expect(dt.formatHm(), '09:07');
|
|
});
|
|
|
|
test('formatDate uses dd.MM.yyyy', () {
|
|
expect(dt.formatDate(), '08.05.2026');
|
|
});
|
|
|
|
test('formatDateTime combines date and time', () {
|
|
expect(dt.formatDateTime(), '08.05.2026 09:07');
|
|
});
|
|
|
|
test('formatDateShort drops the year', () {
|
|
expect(dt.formatDateShort(), '08.05.');
|
|
});
|
|
|
|
test('formatDateShortHm combines short date and time', () {
|
|
expect(dt.formatDateShortHm(), '08.05. 09:07');
|
|
});
|
|
|
|
test('timeRangeTo joins start and end with a hyphen', () {
|
|
final end = dt.add(const Duration(minutes: 45));
|
|
expect(dt.timeRangeTo(end), '09:07 - 09:52');
|
|
});
|
|
});
|
|
|
|
group('formatDateRelativeShort', () {
|
|
final now = DateTime(2026, 5, 9, 14, 0); // Saturday
|
|
|
|
test('today returns "Heute"', () {
|
|
expect(
|
|
DateTime(2026, 5, 9, 8, 0).formatDateRelativeShort(now: now),
|
|
'Heute',
|
|
);
|
|
});
|
|
|
|
test('yesterday returns "Gestern"', () {
|
|
expect(
|
|
DateTime(2026, 5, 8, 23, 30).formatDateRelativeShort(now: now),
|
|
'Gestern',
|
|
);
|
|
});
|
|
|
|
test('2 to 6 days ago returns the German weekday name', () {
|
|
// 2026-05-07 is a Thursday
|
|
expect(
|
|
DateTime(2026, 5, 7).formatDateRelativeShort(now: now),
|
|
'Donnerstag',
|
|
);
|
|
// 2026-05-03 is a Sunday (6 days before Saturday 9th)
|
|
expect(
|
|
DateTime(2026, 5, 3).formatDateRelativeShort(now: now),
|
|
'Sonntag',
|
|
);
|
|
});
|
|
|
|
test('7 days or more ago falls back to dd.MM.yyyy', () {
|
|
expect(
|
|
DateTime(2026, 5, 2).formatDateRelativeShort(now: now),
|
|
'02.05.2026',
|
|
);
|
|
expect(
|
|
DateTime(2026, 1, 1).formatDateRelativeShort(now: now),
|
|
'01.01.2026',
|
|
);
|
|
});
|
|
|
|
test('future dates fall back to dd.MM.yyyy', () {
|
|
expect(
|
|
DateTime(2026, 5, 10).formatDateRelativeShort(now: now),
|
|
'10.05.2026',
|
|
);
|
|
});
|
|
});
|
|
}
|