Files
Client/test/view/marianum_dates/event_formatter_test.dart
T

110 lines
3.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter_test/flutter_test.dart';
import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/state/app/modules/marianum_dates/bloc/marianum_dates_state.dart';
import 'package:marianum_mobile/view/pages/marianum_dates/data/event_formatter.dart';
MarianumDate _event({
required DateTime start,
required DateTime end,
bool isAllDay = false,
}) =>
MarianumDate(
uid: 't',
title: 't',
description: null,
start: start,
end: end,
isAllDay: isAllDay,
);
void main() {
setUpAll(() async {
await Jiffy.setLocale('de');
});
group('EventFormatter.trailingLabel', () {
test('all-day events show "Ganztägig"', () {
final e = _event(
start: DateTime(2026, 5, 8),
end: DateTime(2026, 5, 9),
isAllDay: true,
);
expect(EventFormatter.trailingLabel(e), 'Ganztägig');
});
test('zero-length same-day event shows a single time', () {
final at = DateTime(2026, 5, 8, 9, 30);
final e = _event(start: at, end: at);
expect(EventFormatter.trailingLabel(e), '09:30');
});
test('same-day event shows time range', () {
final e = _event(
start: DateTime(2026, 5, 8, 9),
end: DateTime(2026, 5, 8, 10, 30),
);
expect(EventFormatter.trailingLabel(e), '09:0010:30');
});
test('multi-day event shows date+time on both sides', () {
final e = _event(
start: DateTime(2026, 5, 8, 9),
end: DateTime(2026, 5, 9, 11),
);
expect(EventFormatter.trailingLabel(e), '08.05. 09:0009.05. 11:00');
});
});
group('EventFormatter.longRange', () {
test('all-day single-day collapses inclusive end to start date', () {
// ICS-style all-day: end is exclusive (next midnight). Display drops it.
final e = _event(
start: DateTime(2026, 5, 8),
end: DateTime(2026, 5, 9),
isAllDay: true,
);
expect(EventFormatter.longRange(e), '08.05.2026 · Ganztägig');
});
test('all-day multi-day shows inclusive end (one day before exclusive end)', () {
final e = _event(
start: DateTime(2026, 5, 8),
end: DateTime(2026, 5, 11), // exclusive → display "until 10.05."
isAllDay: true,
);
expect(EventFormatter.longRange(e), '08.05.2026 10.05.2026 · Ganztägig');
});
test('all-day event whose end equals start (degenerate) renders as single day', () {
final e = _event(
start: DateTime(2026, 5, 8),
end: DateTime(2026, 5, 8),
isAllDay: true,
);
expect(EventFormatter.longRange(e), '08.05.2026 · Ganztägig');
});
test('zero-length same-day timed event shows single time', () {
final at = DateTime(2026, 5, 8, 9, 30);
final e = _event(start: at, end: at);
expect(EventFormatter.longRange(e), '08.05.2026 · 09:30');
});
test('same-day timed event shows date · range', () {
final e = _event(
start: DateTime(2026, 5, 8, 9),
end: DateTime(2026, 5, 8, 10, 30),
);
expect(EventFormatter.longRange(e), '08.05.2026 · 09:00 10:30');
});
test('multi-day timed event shows full datetimes on both sides', () {
final e = _event(
start: DateTime(2026, 5, 8, 9),
end: DateTime(2026, 5, 9, 11),
);
expect(EventFormatter.longRange(e), '08.05.2026 09:00 09.05.2026 11:00');
});
});
}