def course_create(request, semester_id): semester = get_object_or_404(Semester, id=semester_id) raise_permission_denied_if_archived(semester) course = Course(semester=semester) InlineContributionFormset = inlineformset_factory( Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1) form = CourseForm(request.POST or None, instance=course) formset = InlineContributionFormset(request.POST or None, instance=course, form_kwargs={'course': course}) if form.is_valid() and formset.is_valid(): form.save(user=request.user) formset.save() messages.success(request, _("Successfully created course.")) return redirect('staff:semester_view', semester_id) else: return render( request, "staff_course_form.html", dict(semester=semester, form=form, formset=formset, staff=True))
def helper_course_edit(request, semester, course): InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1) form = CourseForm(request.POST or None, instance=course) formset = InlineContributionFormset(request.POST or None, instance=course, form_kwargs={'course': course}) editable = course.can_staff_edit operation = request.POST.get('operation') if form.is_valid() and formset.is_valid(): if operation not in ('save', 'approve'): raise SuspiciousOperation("Invalid POST operation") if not course.can_staff_edit or course.is_archived: raise SuspiciousOperation("Modifying this course is not allowed.") if course.state in ['evaluated', 'reviewed'] and course.is_in_evaluation_period(): course.reopen_evaluation() form.save(user=request.user) formset.save() if operation == 'approve': # approve course course.staff_approve() course.save() messages.success(request, _("Successfully updated and approved course.")) else: messages.success(request, _("Successfully updated course.")) return custom_redirect('staff:semester_view', semester.id) else: sort_formset(request, formset) template_data = dict(semester=semester, form=form, formset=formset, staff=True, state=course.state, editable=editable) return render(request, "staff_course_form.html", template_data)
def test_voter_cannot_be_removed_from_course(self): student = mommy.make(UserProfile) course = mommy.make(Course, degrees=[mommy.make(Degree)], participants=[student], voters=[student]) course.general_contribution.questionnaires.set([mommy.make(Questionnaire)]) form_data = get_form_data_from_instance(CourseForm, course) form_data["participants"] = [] form = CourseForm(form_data, instance=course) self.assertFalse(form.is_valid()) self.assertIn('participants', form.errors) self.assertIn("Participants who already voted for the course can't be removed", form.errors['participants'][0])
def helper_test_course_form_same_name(self, CourseFormClass): courses = Course.objects.all() form_data = get_form_data_from_instance(CourseForm, courses[0]) form_data["vote_start_date"] = "02/1/2098" # needed to fix the form form_data["vote_end_date"] = "02/1/2099" # needed to fix the form form = CourseForm(form_data, instance=courses[0]) self.assertTrue(form.is_valid()) form_data['name_de'] = courses[1].name_de form = CourseForm(form_data, instance=courses[0]) self.assertFalse(form.is_valid())
def test_uniqueness_constraint_error_shown(self): """ Tests whether errors being caused by a uniqueness constraint are shown in the form """ courses = baker.make(Course, semester=baker.make(Semester), responsibles=[baker.make(UserProfile)], degrees=[baker.make(Degree)], _quantity=2) form_data = get_form_data_from_instance(CourseForm, courses[1]) form_data["name_de"] = courses[0].name_de form = CourseForm(form_data, instance=courses[1]) self.assertFalse(form.is_valid()) self.assertIn('name_de', form.errors) self.assertEqual(form.errors['name_de'], ['Course with this Semester and Name (german) already exists.'])
def test_uniqueness_constraint_error_shown(self): """ Tests whether errors being caused by a uniqueness constraint are shown in the form """ courses = mommy.make(Course, semester=mommy.make(Semester), responsibles=[mommy.make(UserProfile)], degrees=[mommy.make(Degree)], _quantity=2) form_data = get_form_data_from_instance(CourseForm, courses[1]) form_data["name_de"] = courses[0].name_de form = CourseForm(form_data, instance=courses[1]) self.assertFalse(form.is_valid()) self.assertIn('name_de', form.errors) self.assertEqual(form.errors['name_de'], ['Course with this Semester and Name (german) already exists.'])
def test_course_form_same_name(self): """ Test whether giving a course the same name as another course in the same semester in the course edit form is invalid. """ courses = mommy.make(Course, semester=mommy.make(Semester), responsibles=[mommy.make(UserProfile)], degrees=[mommy.make(Degree)], _quantity=2) form_data = get_form_data_from_instance(CourseForm, courses[0]) form = CourseForm(form_data, instance=courses[0]) self.assertTrue(form.is_valid()) form_data['name_de'] = courses[1].name_de form = CourseForm(form_data, instance=courses[0]) self.assertFalse(form.is_valid())
def test_uniqueness_constraint_error_shown(self): """ Tests whether errors being caused by a uniqueness constraint are shown in the form """ semester = mommy.make(Semester) course1 = mommy.make(Course, semester=semester) course2 = mommy.make(Course, semester=semester) form_data = get_form_data_from_instance(CourseForm, course2) form_data["name_de"] = course1.name_de form = CourseForm(form_data, instance=course2) self.assertFalse(form.is_valid()) self.assertIn('name_de', form.errors) self.assertEqual(form.errors['name_de'], ['Course with this Semester and Name (german) already exists.'])
def test_that_proxy_user_can_be_responsible(self): course = mommy.make(Course, semester=mommy.make(Semester), degrees=[mommy.make(Degree)]) proxy = mommy.make(UserProfile, is_proxy_user=True, is_active=True) form = CourseForm(instance=course) self.assertIn(proxy, form.fields['responsibles'].queryset)
def course_create(request, semester_id): semester = get_object_or_404(Semester, id=semester_id) course = Course(semester=semester) ContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1, exclude=('course',)) form = CourseForm(request.POST or None, instance=course) formset = ContributionFormset(request.POST or None, instance=course) if form.is_valid() and formset.is_valid(): form.save(user=request.user) formset.save() messages.success(request, _("Successfully created course.")) return redirect('evap.staff.views.semester_view', semester_id) else: return render(request, "staff_course_form.html", dict(semester=semester, form=form, formset=formset))
def course_create(request, semester_id): semester = get_object_or_404(Semester, id=semester_id) raise_permission_denied_if_archived(semester) course = Course(semester=semester) InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1) form = CourseForm(request.POST or None, instance=course) formset = InlineContributionFormset(request.POST or None, instance=course, form_kwargs={'course': course}) if form.is_valid() and formset.is_valid(): form.save(user=request.user) formset.save() messages.success(request, _("Successfully created course.")) return redirect('staff:semester_view', semester_id) else: return render(request, "staff_course_form.html", dict(semester=semester, form=form, formset=formset, staff=True, editable=True, state=""))
def helper_course_edit(request, semester, course): InlineContributionFormset = inlineformset_factory( Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1) form = CourseForm(request.POST or None, instance=course) formset = InlineContributionFormset(request.POST or None, instance=course, form_kwargs={'course': course}) operation = request.POST.get('operation') if form.is_valid() and formset.is_valid(): if operation not in ('save', 'approve'): raise SuspiciousOperation("Invalid POST operation") if course.state in ['evaluated', 'reviewed' ] and course.is_in_evaluation_period: course.reopen_evaluation() form.save(user=request.user) formset.save() if operation == 'approve': # approve course course.staff_approve() course.save() messages.success(request, _("Successfully updated and approved course.")) else: messages.success(request, _("Successfully updated course.")) return custom_redirect('staff:semester_view', semester.id) else: sort_formset(request, formset) template_data = dict(semester=semester, course=course, form=form, formset=formset, staff=True) return render(request, "staff_course_form.html", template_data)
def helper_course_edit(request, semester, course): InlineContributionFormset = inlineformset_factory( Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1, exclude=("course",) ) form = CourseForm(request.POST or None, instance=course) formset = InlineContributionFormset( request.POST or None, instance=course, queryset=course.contributions.exclude(contributor=None) ) if form.is_valid() and formset.is_valid(): if course.state in ["evaluated", "reviewed"] and course.is_in_evaluation_period: course.reopen_evaluation() form.save(user=request.user) formset.save() messages.success(request, _("Successfully updated course.")) return custom_redirect("staff:semester_view", semester.id) else: sort_formset(request, formset) template_data = dict(semester=semester, course=course, form=form, formset=formset, staff=True) return render(request, "staff_course_form.html", template_data)
def course_edit(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) ContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=ContributionForm, extra=1, exclude=('course',)) # check course state if not course.can_staff_edit(): messages.warning(request, _("Editing not possible in current state.")) return redirect('evap.staff.views.semester_view', semester_id) form = CourseForm(request.POST or None, instance=course) formset = ContributionFormset(request.POST or None, instance=course, queryset=course.contributions.exclude(contributor=None)) if form.is_valid() and formset.is_valid(): form.save(user=request.user) formset.save() messages.success(request, _("Successfully updated course.")) return custom_redirect('evap.staff.views.semester_view', semester_id, tab=get_tab(request)) else: template_data = dict(semester=semester, course=course, form=form, formset=formset, staff=True) return render(request, "staff_course_form.html", template_data)
def test_course_form_same_name(self): """ Test whether giving a course the same name as another course in the same semester in the course edit form is invalid. """ courses = baker.make(Course, semester=baker.make(Semester), responsibles=[baker.make(UserProfile)], degrees=[baker.make(Degree)], _quantity=2) form_data = get_form_data_from_instance(CourseForm, courses[0]) form = CourseForm(form_data, instance=courses[0]) self.assertTrue(form.is_valid()) form_data['name_de'] = courses[1].name_de form = CourseForm(form_data, instance=courses[0]) self.assertFalse(form.is_valid())
def test_staff_can_select_proxy_user(self): proxy_user = mommy.make(UserProfile, is_proxy_user=True) course = mommy.make(Course, semester=mommy.make(Semester)) form = CourseForm(instance=course) self.assertIn(proxy_user, form.fields['responsibles'].queryset)