def test_student_exceeds_the_35_limit(self): """Bolek will try to sign up to "Gotowanie" and "Szydełkowanie" before 35 points limit abolition. He should be successful with "Gotowanie", which costs exactly 35 ECTS, but not with the second enrollment. """ with patch(RECORDS_DATETIME, mock_datetime(2011, 10, 1, 12)): self.assertTrue( Record.enqueue_student(self.bolek, self.cooking_lecture_group)) self.assertTrue( Record.objects.filter(student=self.bolek, group=self.cooking_lecture_group, status=RecordStatus.ENROLLED).exists()) self.assertEqual( Record.student_points_in_semester(self.bolek, self.semester), 35) with patch(RECORDS_DATETIME, mock_datetime(2011, 10, 1, 12, 5)): # He should be able to join the queue. self.assertTrue( Record.enqueue_student(self.bolek, self.knitting_lecture_group)) # His enrollment with "Gotowanie" should still exist. self.assertTrue( Record.objects.filter(student=self.bolek, group=self.cooking_lecture_group, status=RecordStatus.ENROLLED).exists()) # His record with "Szydełkowanie" should be removed. self.assertFalse( Record.objects.filter(student=self.bolek, group=self.knitting_lecture_group, status=RecordStatus.ENROLLED).exists()) self.assertTrue( Record.objects.filter(student=self.bolek, group=self.knitting_lecture_group, status=RecordStatus.REMOVED).exists()) self.assertEqual( Record.student_points_in_semester(self.bolek, self.semester), 35)
def my_profile(request): """User profile page. The profile page displays user settings (e-mail address, notifications). If he is a student, his opening times will be displayed. If the user is an employee, the page allows him to modify his public information (office, consultations). """ semester = Semester.objects.get_next() data = { 'semester': semester, } if BaseUser.is_employee(request.user): data.update({ 'consultations': request.user.employee.consultations, 'room': request.user.employee.room, 'homepage': request.user.employee.homepage, 'title': request.user.employee.title, }) if semester and BaseUser.is_student(request.user): student: Student = request.user.student groups_opening_times = GroupOpeningTimes.objects.filter( student_id=student.pk, group__course__semester_id=semester.pk).select_related( 'group', 'group__course', 'group__teacher', 'group__teacher__user').prefetch_related( 'group__term', 'group__term__classrooms') groups_times = [] got: GroupOpeningTimes for got in groups_opening_times: group: Group = got.group group.opening_time = got.time groups_times.append(group) t0_time_obj = T0Times.objects.filter(student_id=student.pk, semester_id=semester.pk) try: t0_time = t0_time_obj.get().time except T0Times.DoesNotExist: t0_time = None grade_info = StudentGraded.objects.filter( student=student).select_related('semester').order_by( '-semester__records_opening') semesters_participated_in_grade = [x.semester for x in grade_info] current_semester_ects = Record.student_points_in_semester( student, semester) data.update({ 't0_time': t0_time, 'groups_times': groups_times, 'semesters_participated_in_grade': semesters_participated_in_grade, 'current_semester_ects': current_semester_ects, }) notifications_form = create_form(request) data.update({ 'form': notifications_form, }) return render(request, 'users/my_profile.html', data)