def test_changelog(self): term = Term.objects.get(value=42) course = Course.objects.get(term=term, crn=1234) course.status = 0 course.save() instructor = Instructor.objects.create(first_name="Bill", last_name="Gates", rmp_score=1.0, rmp_link="http://microsoft.com") course.instructor = instructor course.save() versions = CourseVersion.objects.find(course) changes = create_changelog(versions[0], versions[len(versions) - 1], True) self.assertEqual(3, len(changes)) expected = [ 'Status changed from Open to Closed', 'Instructor changed from Instructor, Joe to Gates, Bill', 'Meeting Time changed from none to MW, 10:00 AM - 11:15 AM, F, 10:00 AM - 10:50 AM' ] self.assertEqual(expected, changes)
def course(request, term, crn): try: term = Term.objects.get(value=term) course = Course.objects.get(term=term, crn=crn) except Course.DoesNotExist: raise Http404("Course does not exist") materials = Material.objects.filter(term=term, course_crn=course.crn) user = request.user authenticated = user.is_authenticated() context = { 'course': course, 'term': term, 'authenticated': authenticated, 'user': user, 'materials': materials, 'suggestion_form': InstructorSuggestionForm(), } version_list = CourseVersion.objects.find(course) if len(version_list) > 1: versions = OrderedDict() for i in range(0, len(version_list)-1): new_version = version_list[i] old_version = version_list[i+1] changelog = create_changelog(old_version, new_version) if changelog: versions[new_version] = changelog context['changes'] = versions if request.method == 'POST': if authenticated: form = InstructorSuggestionForm(request.POST) if form.is_valid(): email_address = form.cleaned_data['email_address'] rmp_link = form.cleaned_data['rmp_link'] if email_address or rmp_link: suggestion = InstructorSuggestion(instructor=course.instructor, user=user, email_address=email_address, rmp_link=rmp_link) suggestion.save() # Send mail subject = "Instructor suggestion created" message = "{} created a new suggestion for {}: {}, {}".format(request.user.username, course.instructor, email_address, rmp_link) mail_admins(subject, message) context['suggestion_message'] = "Thanks! Your suggestion has been submitted and is awaiting approval." else: return HttpResponse('Unauthorized', 401) primary = course.primary_meeting_time secondary = course.secondary_meeting_times if primary: context['primary_meeting_time'] = primary if secondary: context['secondary_meeting_times'] = secondary exam = exam_for_course(course) exam_sources = ExamSource.objects.filter(term=term) if exam: context['exam'] = exam if len(exam_sources) == 1: context['exam_source'] = exam_sources[0] return render(request, 'course/course.html', context)