def test_validate_program_and_course_mode_invalid(self):
     course_mode = "audit"
     self.catalog_api.get_program_by_uuid.side_effect = fake_catalog_api.get_program_by_uuid
     self.catalog_api.get_common_course_modes.side_effect = fake_catalog_api.get_common_course_modes
     program_uuid = FAKE_PROGRAM_RESPONSE2.get("uuid")
     form = self._make_bound_form("*****@*****.**", program=program_uuid, course_mode=course_mode)
     assert not form.is_valid()
     assert form.errors == {
         "__all__": [ValidationMessages.COURSE_MODE_NOT_AVAILABLE.format(
             mode=course_mode, program_title=FAKE_PROGRAM_RESPONSE2.get("title"), modes=", ".join({"professional"})
         )]
     }
 def test_validate_program_and_course_mode_valid(self):
     course_mode = "professional"
     self.catalog_api.get_program_by_uuid.side_effect = fake_catalog_api.get_program_by_uuid
     self.catalog_api.get_common_course_modes.side_effect = fake_catalog_api.get_common_course_modes
     program_uuid = FAKE_PROGRAM_RESPONSE2.get("uuid")
     form = self._make_bound_form("*****@*****.**", program=program_uuid, course_mode=course_mode)
     assert form.is_valid()
     assert form.cleaned_data[form.Fields.PROGRAM] == FAKE_PROGRAM_RESPONSE2
 def test_clean_program_http_error(self, exception):
     course_mode = "professional"
     self.catalog_api.get_program_by_uuid.side_effect = exception
     program_uuid = FAKE_PROGRAM_RESPONSE2.get("uuid")
     form = self._make_bound_form("*****@*****.**", program=program_uuid, course_mode=course_mode)
     assert not form.is_valid()
     assert form.errors == {
         form.Fields.PROGRAM: [ValidationMessages.INVALID_PROGRAM_ID.format(program_id=program_uuid)]
     }
    def test_clean_both_course_and_program_passed(self, enrollment_client):
        instance = enrollment_client.return_value
        instance.get_course_details.side_effect = fake_enrollment_api.get_course_details
        self.catalog_api.get_program_by_uuid.side_effect = fake_catalog_api.get_program_by_uuid
        self.catalog_api.get_common_course_modes.return_value = {"audit"}

        program_id = FAKE_PROGRAM_RESPONSE2.get("uuid")
        course_id = "course-v1:edX+DemoX+Demo_Course"

        form = self._make_bound_form(
            "*****@*****.**", program=program_id, course=course_id, course_mode="audit"
        )

        assert not form.is_valid()
        assert form.errors == {
            "__all__": [ValidationMessages.COURSE_AND_PROGRAM_ERROR]
        }