def _on_transaction_commit(): """If either are applicable, update/create combined final grade and generate program letter""" user = instance.user course = instance.course_run.course update_or_create_combined_final_grade(user, course) if created and not course.program.financial_aid_availability: generate_program_letter(instance.user, course.program)
def test_already_has_program_letter(self): """ Test scenario where a user already has a letter for the given program """ MicromastersProgramCommendation.objects.create(user=self.user, program=self.program) # should not raise an exception api.generate_program_letter(self.user, self.program) assert MicromastersProgramCommendation.objects.filter(user=self.user, program=self.program).count() == 1
def test_already_has_program_letter(self): """ Test scenario where a user already has a letter for the given program """ MicromastersProgramCommendation.objects.create(user=self.user, program=self.program) # should not raise an exception api.generate_program_letter(self.user, self.program) assert MicromastersProgramCommendation.objects.filter(user=self.user, program=self.program).count() == 1
def test_has_no_final_grade(self): """ Test that a user without the needed final grades will not have a letter generated """ self.program.financial_aid_availability = False self.program.save() letter_qset = MicromastersProgramCommendation.objects.filter(user=self.user, program=self.program) api.generate_program_letter(self.user, self.program) assert letter_qset.exists() is False
def test_has_no_final_grade(self): """ Test that a user without the needed final grades will not have a letter generated """ self.program.financial_aid_availability = False self.program.save() letter_qset = MicromastersProgramCommendation.objects.filter(user=self.user, program=self.program) api.generate_program_letter(self.user, self.program) assert letter_qset.exists() is False
def handle(self, *args, **kwargs): # pylint: disable=unused-argument programs = Program.objects.filter(live=True) for program in programs: if not program.has_frozen_grades_for_all_courses(): self.stdout.write( "Program '{}' has courses without frozen grades. Skipping program letter generation...".format( program.title) ) continue enrollments = ProgramEnrollment.objects.filter(program=program).select_related('user') for enrollment in enrollments: generate_program_letter(enrollment.user, program)
def handle(self, *args, **kwargs): # pylint: disable=unused-argument programs = Program.objects.filter(live=True, financial_aid_availability=False) for program in programs: if not program.has_frozen_grades_for_all_courses(): self.stdout.write( "Program '{}' has courses without frozen grades. Skipping program letter generation...".format( program.title) ) continue enrollments = ProgramEnrollment.objects.filter(program=program).select_related('user') for enrollment in enrollments: generate_program_letter(enrollment.user, program)
def test_with_fa_program(self): """ Test that letter won't be created if program is FA-enabled """ self.program.financial_aid_availability = True self.program.save() with mute_signals(post_save): MicromastersProgramCertificate.objects.create( user=self.user, program=self.program ) cert_qset = MicromastersProgramCommendation.objects.filter(user=self.user, program=self.program) assert cert_qset.exists() is False api.generate_program_letter(self.user, self.program) assert cert_qset.exists() is True
def test_with_fa_program(self): """ Test that letter won't be created if program is FA-enabled """ self.program.financial_aid_availability = True self.program.save() with mute_signals(post_save): FinalGradeFactory.create(user=self.user, course_run=self.run_1, passed=True, status='complete', grade=0.8) cert_qset = MicromastersProgramCommendation.objects.filter( user=self.user, program=self.program) assert cert_qset.exists() is False api.generate_program_letter(self.user, self.program) assert cert_qset.exists() is False
def test_successful_program_letter_generation(self): """ Test happy scenario """ self.program.financial_aid_availability = False self.program.save() with mute_signals(post_save): FinalGradeFactory.create(user=self.user, course_run=self.run_1, passed=True, status='complete', grade=0.8) cert_qset = MicromastersProgramCommendation.objects.filter( user=self.user, program=self.program) assert cert_qset.exists() is False api.generate_program_letter(self.user, self.program) assert cert_qset.exists() is True
def test_with_fa_program(self): """ Test that letter won't be created if program is FA-enabled """ self.program.financial_aid_availability = True self.program.save() with mute_signals(post_save): FinalGradeFactory.create( user=self.user, course_run=self.run_1, passed=True, status='complete', grade=0.8 ) cert_qset = MicromastersProgramCommendation.objects.filter(user=self.user, program=self.program) assert cert_qset.exists() is False api.generate_program_letter(self.user, self.program) assert cert_qset.exists() is False
def test_successful_program_letter_generation(self): """ Test happy scenario """ self.program.financial_aid_availability = False self.program.save() with mute_signals(post_save): FinalGradeFactory.create( user=self.user, course_run=self.run_1, passed=True, status='complete', grade=0.8 ) cert_qset = MicromastersProgramCommendation.objects.filter(user=self.user, program=self.program) assert cert_qset.exists() is False api.generate_program_letter(self.user, self.program) assert cert_qset.exists() is True