def test_has_paid_for_any_in_program(self): """ Assert that has_paid_for_any_in_program returns True if any CourseRun associated with a Program has been paid for. """ new_program = ProgramFactory.create() new_course_runs = CourseRunFactory.create_batch(2, course__program=new_program) mmtrack = MMTrack( user=self.user, program=new_program, edx_user_data=self.cached_edx_user_data ) assert mmtrack.has_paid_for_any_in_program() is False fg = FinalGradeFactory.create(user=self.user, course_run=new_course_runs[0], course_run_paid_on_edx=True) assert mmtrack.has_paid_for_any_in_program() is True fg.delete() FinalGradeFactory.create(user=self.user, course_run=new_course_runs[1], course_run_paid_on_edx=True) assert mmtrack.has_paid_for_any_in_program() is True
def test_has_paid_for_any_in_program(self): """ Assert that has_paid_for_any_in_program returns True if any CourseRun associated with a Program has been paid for. """ new_program = ProgramFactory.create() new_course_runs = CourseRunFactory.create_batch(2, course__program=new_program) mmtrack = MMTrack( user=self.user, program=new_program, edx_user_data=self.cached_edx_user_data ) assert mmtrack.has_paid_for_any_in_program() is False fg = FinalGradeFactory.create(user=self.user, course_run=new_course_runs[0], course_run_paid_on_edx=True) assert mmtrack.has_paid_for_any_in_program() is True fg.delete() FinalGradeFactory.create(user=self.user, course_run=new_course_runs[1], course_run_paid_on_edx=True) assert mmtrack.has_paid_for_any_in_program() is True
def has_object_permission(self, request, view, obj): """ Returns True if the user has the permission to message a specific learner. Args: request (Request): DRF request object view (View): DRF view object obj (Profile): Recipient Profile object Returns: boolean """ if not obj.email_optin: return False sender_user = request.user recipient_enrolled_program_ids = obj.user.programenrollment_set.values_list('program', flat=True) # If the sender is a staff/instructor in any of the recipients enrolled programs, the # sender has permission if sender_user.role_set.filter( role__in=[Staff.ROLE_ID, Instructor.ROLE_ID], program__id__in=recipient_enrolled_program_ids ).exists(): return True # If the sender has paid for any course run in any of the recipient's enrolled programs, the # sender has permission matching_program_enrollments = ( sender_user.programenrollment_set .filter(program__id__in=recipient_enrolled_program_ids) .select_related('program').all() ) edx_user_data = CachedEdxUserData(sender_user) for program_enrollment in matching_program_enrollments: mmtrack = MMTrack( sender_user, program_enrollment.program, edx_user_data ) if mmtrack.has_paid_for_any_in_program(): return True return False
def has_object_permission(self, request, view, obj): """ Returns True if the user has the permission to message a specific learner. Args: request (Request): DRF request object view (View): DRF view object obj (Profile): Recipient Profile object Returns: boolean """ if not obj.email_optin: return False sender_user = request.user recipient_enrolled_program_ids = obj.user.programenrollment_set.values_list( 'program', flat=True) # If the sender is a staff/instructor in any of the recipients enrolled programs, the # sender has permission if sender_user.role_set.filter( role__in=[Staff.ROLE_ID, Instructor.ROLE_ID], program__id__in=recipient_enrolled_program_ids).exists(): return True # If the sender has paid for any course run in any of the recipient's enrolled programs, the # sender has permission matching_program_enrollments = ( sender_user.programenrollment_set.filter( program__id__in=recipient_enrolled_program_ids).select_related( 'program').all()) edx_user_data = CachedEdxUserData(sender_user) for program_enrollment in matching_program_enrollments: mmtrack = MMTrack(sender_user, program_enrollment.program, edx_user_data) if mmtrack.has_paid_for_any_in_program(): return True return False