def test_has_passing_certificate_fa(self): """ Assert that has_passing_certificate is true if user has a cert even if has_paid is false for FA programs """ mmtrack = MMTrack( user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data ) key = self.crun_fa.edx_course_key assert mmtrack.has_passing_certificate(key) is False assert mmtrack.has_paid(key) is False cert_json = { "username": "******", "course_id": self.crun_fa.edx_course_key, "certificate_type": "verified", "status": "downloadable", "is_passing": True, "download_url": "http://www.example.com/demo.pdf", "grade": "0.98" } cached_edx_user_data = MagicMock( spec=CachedEdxUserData, enrollments=CachedEnrollment.deserialize_edx_data(self.enrollments_json), certificates=CachedCertificate.deserialize_edx_data(self.certificates_json + [cert_json]), current_grades=CachedCurrentGrade.deserialize_edx_data(self.current_grades_json), ) mmtrack = MMTrack( user=self.user, program=self.program_financial_aid, edx_user_data=cached_edx_user_data ) assert mmtrack.has_passing_certificate(key) is True assert mmtrack.has_paid(key) is False
def test_has_paid_fa_with_course_run_paid_on_mm(self): """ Test for has_paid is True for FA programs when the course has been paid on MicroMasters """ mmtrack = MMTrack(user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data) key = self.crun_fa.edx_course_key assert mmtrack.has_paid(key) is False self.pay_for_fa_course(key) mmtrack = MMTrack(user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data) assert mmtrack.has_paid(key) is True
def test_has_paid_fa_no_final_grade(self): """ Assert that has_paid works for FA programs in case there is no final grade """ mmtrack = MMTrack(user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data) key = self.crun_fa.edx_course_key assert mmtrack.has_paid(key) is False self.pay_for_fa_course(key) mmtrack = MMTrack(user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data) assert mmtrack.has_paid(key) is True
def has_object_permission(self, request, view, obj): """ Returns True if the user has permission to send a message to a course team. Args: request (Request): DRF request object view (View): DRF view object obj (Course): Course object Returns: boolean """ user = request.user program = obj.program # Make sure the user has an enrollment in the course's program if not ProgramEnrollment.objects.filter(user=user, program=program).exists(): return False # Make sure the user has paid for any course run for the given course edx_user_data = CachedEdxUserData(user) mmtrack = MMTrack(user, program, edx_user_data) course_run_keys = obj.courserun_set.values_list('edx_course_key', flat=True) return any([ mmtrack.has_paid(course_run_key) for course_run_key in course_run_keys ])
def test_has_paid_not_fa_with_final_grade(self): """ Assert that has_paid works for non-FA programs in case there is a final grade """ mmtrack = MMTrack( user=self.user, program=self.program, edx_user_data=self.cached_edx_user_data ) key = "course-v1:odl+FOO102+CR-FALL16" assert mmtrack.has_paid(key) is False course_run = self.cruns[-1] final_grade = FinalGradeFactory.create(user=self.user, course_run=course_run, course_run_paid_on_edx=True) assert mmtrack.has_paid(key) is True final_grade.course_run_paid_on_edx = False final_grade.save() assert mmtrack.has_paid(key) is False
def test_not_paid_fa_with_course_run_paid_on_edx(self): """ Test for has_paid is False for FA programs even in case there is a final grade with course_run_paid_on_edx=True """ mmtrack = MMTrack( user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data ) key = self.crun_fa.edx_course_key assert mmtrack.has_paid(key) is False final_grade = FinalGradeFactory.create(user=self.user, course_run=self.crun_fa, course_run_paid_on_edx=True) assert mmtrack.has_paid(key) is False final_grade.course_run_paid_on_edx = False final_grade.save() assert mmtrack.has_paid(key) is False
def test_has_paid_not_fa_no_final_grade(self): """ Assert that has_paid works for non-FA programs in case there is no final grade """ mmtrack = MMTrack(user=self.user, program=self.program, edx_user_data=self.cached_edx_user_data) key = "course-v1:edX+DemoX+Demo_Course" assert mmtrack.has_paid(key) is True
def test_has_paid_fa_with_course_run_paid_on_mm(self): """ Test for has_paid is True for FA programs when the course has been paid on MicroMasters """ mmtrack = MMTrack( user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data ) key = self.crun_fa.edx_course_key assert mmtrack.has_paid(key) is False self.pay_for_fa_course(key) mmtrack = MMTrack( user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data ) assert mmtrack.has_paid(key) is True
def test_has_paid_fa_no_final_grade(self): """ Assert that has_paid works for FA programs in case there is no final grade """ mmtrack = MMTrack( user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data ) key = self.crun_fa.edx_course_key assert mmtrack.has_paid(key) is False self.pay_for_fa_course(key) mmtrack = MMTrack( user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data ) assert mmtrack.has_paid(key) is True
def test_has_paid_for_entire_course(self): """ Tests that the .has_paid method returns true if any of the course runs in the course have been paid for """ self.pay_for_fa_course(self.crun_fa.edx_course_key) mmtrack = MMTrack(user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data) assert mmtrack.has_paid(self.crun_fa2.edx_course_key) is True
def test_has_paid_not_fa_no_final_grade(self): """ Assert that has_paid works for non-FA programs in case there is no final grade """ mmtrack = MMTrack( user=self.user, program=self.program, edx_user_data=self.cached_edx_user_data ) key = "course-v1:edX+DemoX+Demo_Course" assert mmtrack.has_paid(key) is True
def test_has_paid_for_entire_course(self): """ Tests that the .has_paid method returns true if any of the course runs in the course have been paid for """ self.pay_for_fa_course(self.crun_fa.edx_course_key) mmtrack = MMTrack( user=self.user, program=self.program_financial_aid, edx_user_data=self.cached_edx_user_data ) assert mmtrack.has_paid(self.crun_fa2.edx_course_key) is True
def has_object_permission(self, request, view, obj): """ Returns True if the user has permission to send a message to a course team. Args: request (Request): DRF request object view (View): DRF view object obj (Course): Course object Returns: boolean """ user = request.user program = obj.program # Make sure the user has an enrollment in the course's program if not ProgramEnrollment.objects.filter(user=user, program=program).exists(): return False # Make sure the user has paid for any course run for the given course edx_user_data = CachedEdxUserData(user) mmtrack = MMTrack( user, program, edx_user_data ) course_run_keys = obj.courserun_set.values_list('edx_course_key', flat=True) return any([mmtrack.has_paid(course_run_key) for course_run_key in course_run_keys])