merged develop
This commit is contained in:
@@ -114,4 +114,47 @@ void main() {
|
||||
expect(hidden, {Modules.talk, Modules.files});
|
||||
});
|
||||
});
|
||||
|
||||
group('applyTeacherDefaults', () {
|
||||
test('hides the absence report once for teachers', () {
|
||||
final settings = settingsWith(Modules.values);
|
||||
|
||||
expect(AppModule.applyTeacherDefaults(settings, isTeacher: true), isTrue);
|
||||
expect(settings.hiddenModules, [Modules.absenceReport]);
|
||||
expect(settings.teacherDefaultsApplied, isTrue);
|
||||
});
|
||||
|
||||
test('keeps a module the teacher re-enabled afterwards', () {
|
||||
final settings = settingsWith(Modules.values);
|
||||
AppModule.applyTeacherDefaults(settings, isTeacher: true);
|
||||
settings.hiddenModules.remove(Modules.absenceReport);
|
||||
|
||||
expect(
|
||||
AppModule.applyTeacherDefaults(settings, isTeacher: true),
|
||||
isFalse,
|
||||
);
|
||||
expect(settings.hiddenModules, isEmpty);
|
||||
});
|
||||
|
||||
test('leaves non-teachers untouched', () {
|
||||
final settings = settingsWith(Modules.values);
|
||||
|
||||
expect(
|
||||
AppModule.applyTeacherDefaults(settings, isTeacher: false),
|
||||
isFalse,
|
||||
);
|
||||
expect(settings.hiddenModules, isEmpty);
|
||||
expect(settings.teacherDefaultsApplied, isFalse);
|
||||
});
|
||||
|
||||
test('does not duplicate an already hidden module', () {
|
||||
final settings = ModulesSettings(
|
||||
moduleOrder: Modules.values,
|
||||
hiddenModules: [Modules.absenceReport, Modules.files],
|
||||
);
|
||||
AppModule.applyTeacherDefaults(settings, isTeacher: true);
|
||||
|
||||
expect(settings.hiddenModules, [Modules.absenceReport, Modules.files]);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:marianum_mobile/api/marianumconnect/queries/timetable_get_rooms/timetable_get_rooms_response.dart';
|
||||
import 'package:marianum_mobile/state/app/modules/timetable/bloc/timetable_state.dart';
|
||||
|
||||
TimetableGetRoomsResponse _rooms(String name) => TimetableGetRoomsResponse(
|
||||
result: [McRoom(id: 1, shortName: name, longName: name)],
|
||||
);
|
||||
|
||||
void main() {
|
||||
final base = TimetableState(
|
||||
startDate: DateTime(2026, 9, 21),
|
||||
endDate: DateTime(2026, 9, 25),
|
||||
rooms: _rooms('A101'),
|
||||
dataVersion: 3,
|
||||
);
|
||||
|
||||
test('returns the same state when the content is unchanged', () {
|
||||
expect(base.withReferenceData(rooms: _rooms('A101')), same(base));
|
||||
});
|
||||
|
||||
test('bumps dataVersion and takes the new value when content changed', () {
|
||||
final next = _rooms('B202');
|
||||
final result = base.withReferenceData(rooms: next);
|
||||
expect(result.rooms, same(next));
|
||||
expect(result.dataVersion, 4);
|
||||
});
|
||||
|
||||
test('keeps unchanged instances when only another field changed', () {
|
||||
final result = base.withReferenceData(rooms: _rooms('A101'));
|
||||
expect(result.rooms, same(base.rooms));
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
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()});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user