Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions packages/uni_app/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ import 'package:uni/controller/local_storage/preferences_controller.dart';
import 'package:uni/generated/l10n.dart';
import 'package:uni/model/entities/course_units/course_unit.dart';
import 'package:uni/model/entities/course_units/sheet.dart';
import 'package:uni/model/providers/mocks/mock_exam_provider.dart';
import 'package:uni/model/providers/mocks/mock_lecture_provider.dart';
import 'package:uni/model/providers/plausible/plausible_provider.dart';
import 'package:uni/model/providers/riverpod/exam_provider.dart';
import 'package:uni/model/providers/riverpod/lecture_provider.dart';
import 'package:uni/model/providers/riverpod/profile_provider.dart';
import 'package:uni/model/providers/riverpod/theme_provider.dart';
import 'package:uni/utils/navigation_items.dart';
Expand Down Expand Up @@ -110,6 +114,9 @@ Future<void> main() async {

const route = '/splash';

const useMockSchedule = bool.fromEnvironment('MOCK_SCHEDULE');
const useMockExams = bool.fromEnvironment('MOCK_EXAMS');

await SentryFlutter.init(
(options) {
options.dsn =
Expand All @@ -118,6 +125,11 @@ Future<void> main() async {
appRunner: () {
runApp(
ProviderScope(
overrides: [
if (useMockSchedule)
lectureProvider.overrideWith(MockLectureNotifier.new),
if (useMockExams) examProvider.overrideWith(MockExamNotifier.new),
],
child: PlausibleProvider(
plausible: plausible,
child: const Application(route),
Expand Down
63 changes: 63 additions & 0 deletions packages/uni_app/lib/model/providers/mocks/mock_exam_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import 'package:uni/model/entities/exam.dart';
import 'package:uni/model/providers/riverpod/exam_provider.dart';

class MockExamNotifier extends ExamNotifier {
@override
Future<List<Exam>?> build() async {
return _generateMockExams();
}

@override
Future<List<Exam>> loadFromStorage() async {
return _generateMockExams();
}

@override
Future<List<Exam>?> loadFromRemote() async {
return _generateMockExams();
}

List<Exam> _generateMockExams() {
final now = DateTime.now();
final monday = now.subtract(Duration(days: now.weekday - 1));
final exams = <Exam>[];

final subjects = ['ES', 'BD', 'SO', 'ME', 'RCOM'];
final subjectNames = [
'Engenharia de Software',
'Bases de Dados',
'Sistemas Operativos',
'Métodos Estatísticos',
'Redes de Computadores',
];

final examDays = [
monday.add(const Duration(days: 2)),
monday.add(const Duration(days: 4)),
monday.add(const Duration(days: 8)),
monday.add(const Duration(days: 10)),
monday.add(const Duration(days: 14)),
];

for (var i = 0; i < 5; i++) {
final examDay = examDays[i];
final start = DateTime(examDay.year, examDay.month, examDay.day, 14);
final finish = DateTime(examDay.year, examDay.month, examDay.day, 16, 30);

exams.add(
Exam(
'exam_mock_$i',
start,
finish,
subjects[i],
subjectNames[i],
['B112', 'B113'],
'EN',
'occurr_$i',
),
);
}

return exams;
}
}
122 changes: 122 additions & 0 deletions packages/uni_app/lib/model/providers/mocks/mock_lecture_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:uni/model/entities/lecture.dart';
import 'package:uni/model/providers/riverpod/lecture_provider.dart';

class MockLectureNotifier extends LectureNotifier {
@override
Future<List<Lecture>?> build() async {
return _generateMockLectures();
}

@override
Future<List<Lecture>> loadFromStorage() async {
return _generateMockLectures();
}

@override
Future<List<Lecture>?> loadFromRemote() async {
return _generateMockLectures();
}

List<Lecture> _generateMockLectures() {
final now = DateTime.now();
final monday = now.subtract(Duration(days: now.weekday - 1));
final lectures = <Lecture>[];

final subjects = ['ES', 'BD', 'SO', 'ME', 'RCOMP'];
final subjectNames = [
'Engenharia de Software',
'Bases de Dados',
'Sistemas Operativos',
'Métodos Estatísticos',
'Redes de Computadores',
];
final teachers = ['AAM', 'SN', 'JFS', 'HLC', 'RM'];
final teacherNames = [
'Ademar Aguiar',
'Sérgio Nunes',
'José Silva',
'Henrique Lopes Cardoso',
'Rui Maranhão',
];

for (var weekOffset = -1; weekOffset <= 4; weekOffset++) {
final baseMonday = monday.add(Duration(days: 7 * weekOffset));

for (var i = 0; i < 5; i++) {
final currentDay = baseMonday.add(Duration(days: i));
final subjectIdx = i % subjects.length;
final subjectIdx2 = (i + 1) % subjects.length;

final startTime1 = DateTime(
currentDay.year,
currentDay.month,
currentDay.day,
8,
30,
);
final endTime1 = DateTime(
currentDay.year,
currentDay.month,
currentDay.day,
10,
30,
);

final startTime2 = DateTime(
currentDay.year,
currentDay.month,
currentDay.day,
10,
30,
);
final endTime2 = DateTime(
currentDay.year,
currentDay.month,
currentDay.day,
12,
30,
);

lectures
..add(
Lecture(
subjects[subjectIdx],
subjectNames[subjectIdx],
'T',
startTime1,
endTime1,
'B112',
teachers[subjectIdx],
teacherNames[subjectIdx],
12345 + i,
'3LEIC01',
1000 + i + (weekOffset * 100),
),
)
..add(
Lecture(
subjects[subjectIdx2],
subjectNames[subjectIdx2],
'TP',
startTime2,
endTime2,
'B315',
teachers[subjectIdx2],
teacherNames[subjectIdx2],
23456 + i,
'3LEIC01',
2000 + i + (weekOffset * 100),
),
);
}
}

return lectures;
}
}

final mockLectureProvider =
AsyncNotifierProvider<LectureNotifier, List<Lecture>?>(
MockLectureNotifier.new,
);
Loading