75 lines
2.2 KiB
Dart
75 lines
2.2 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:marianum_mobile/api/marianumconnect/queries/timetable_get_week/timetable_get_week_response.dart';
|
|
import 'package:marianum_mobile/extensions/date_time.dart';
|
|
import 'package:marianum_mobile/state/app/modules/timetable/bloc/week_cache.dart';
|
|
|
|
TimetableGetWeekResponse _week(DateTime monday, {String room = 'A101'}) =>
|
|
TimetableGetWeekResponse(
|
|
from: monday,
|
|
until: monday.addDays(4),
|
|
entries: [
|
|
McTimetableEntry(
|
|
id: 1,
|
|
date: monday,
|
|
startTime: DateTime(1970, 1, 1, 8),
|
|
endTime: DateTime(1970, 1, 1, 9),
|
|
subjects: const ['ma'],
|
|
teachers: const [],
|
|
rooms: [room],
|
|
classNames: const [],
|
|
lessonType: 'LESSON',
|
|
status: 'REGULAR',
|
|
substitutionText: null,
|
|
lessonText: null,
|
|
infoText: null,
|
|
),
|
|
],
|
|
);
|
|
|
|
void main() {
|
|
final monday = DateTime(2026, 9, 21);
|
|
|
|
test('returns null when the stored week has identical content', () {
|
|
final cache = {monday.weekKey(): _week(monday)};
|
|
final result = mergeWeekIntoCache(
|
|
cache,
|
|
monday,
|
|
_week(monday),
|
|
viewedWeekStart: monday,
|
|
now: monday,
|
|
);
|
|
expect(result, isNull);
|
|
});
|
|
|
|
test('stores changed content', () {
|
|
final cache = {monday.weekKey(): _week(monday)};
|
|
final changed = _week(monday, room: 'B202');
|
|
final result = mergeWeekIntoCache(
|
|
cache,
|
|
monday,
|
|
changed,
|
|
viewedWeekStart: monday,
|
|
now: monday,
|
|
);
|
|
expect(result![monday.weekKey()], same(changed));
|
|
});
|
|
|
|
test('drops weeks far from both the viewed week and today', () {
|
|
final far = monday.addDays(7 * (kWeekCacheRadius + 3));
|
|
final nearToday = monday.addDays(-7 * kWeekCacheRadius);
|
|
final viewed = monday.addDays(7 * (kWeekCacheRadius * 3));
|
|
final cache = {
|
|
far.weekKey(): _week(far),
|
|
nearToday.weekKey(): _week(nearToday),
|
|
};
|
|
final result = mergeWeekIntoCache(
|
|
cache,
|
|
viewed,
|
|
_week(viewed),
|
|
viewedWeekStart: viewed,
|
|
now: monday.addDays(2),
|
|
);
|
|
expect(result!.keys, {nearToday.weekKey(), viewed.weekKey()});
|
|
});
|
|
}
|