[LEARNER-314] Determine client/learner eligibility
This commit is contained in:
@@ -82,15 +82,16 @@ class SeatFactory(DictFactoryBase):
|
||||
|
||||
|
||||
class CourseRunFactory(DictFactoryBase):
|
||||
eligible_for_financial_aid = True
|
||||
end = factory.LazyFunction(generate_zulu_datetime)
|
||||
enrollment_end = factory.LazyFunction(generate_zulu_datetime)
|
||||
enrollment_start = factory.LazyFunction(generate_zulu_datetime)
|
||||
image = ImageFactory()
|
||||
is_enrolled = False
|
||||
key = factory.LazyFunction(generate_course_run_key)
|
||||
marketing_url = factory.Faker('url')
|
||||
eligible_for_financial_aid = True
|
||||
seats = factory.LazyFunction(partial(generate_instances, SeatFactory))
|
||||
pacing_type = 'self_paced'
|
||||
seats = factory.LazyFunction(partial(generate_instances, SeatFactory))
|
||||
short_description = factory.Faker('sentence')
|
||||
start = factory.LazyFunction(generate_zulu_datetime)
|
||||
title = factory.Faker('catch_phrase')
|
||||
@@ -112,6 +113,7 @@ class ProgramFactory(DictFactoryBase):
|
||||
banner_image = factory.LazyFunction(generate_sized_stdimage)
|
||||
card_image_url = factory.Faker('image_url')
|
||||
courses = factory.LazyFunction(partial(generate_instances, CourseFactory))
|
||||
is_program_eligible_for_one_click_purchase = True
|
||||
marketing_slug = factory.Faker('slug')
|
||||
marketing_url = factory.Faker('url')
|
||||
status = 'active'
|
||||
|
||||
@@ -766,7 +766,7 @@ class TestProgramMarketingDataExtender(ModuleStoreTestCase):
|
||||
courses=[self._create_course(self.course_price) for __ in range(self.number_of_courses)]
|
||||
)
|
||||
|
||||
def _create_course(self, course_price):
|
||||
def _create_course(self, course_price, is_enrolled=False):
|
||||
"""
|
||||
Creates the course in mongo and update it with the instructor data.
|
||||
Also creates catalog course with respect to course run.
|
||||
@@ -781,6 +781,7 @@ class TestProgramMarketingDataExtender(ModuleStoreTestCase):
|
||||
course = self.update_course(course, self.user.id)
|
||||
|
||||
course_run = CourseRunFactory(
|
||||
is_enrolled=is_enrolled,
|
||||
key=unicode(course.id),
|
||||
seats=[SeatFactory(price=course_price)]
|
||||
)
|
||||
@@ -811,3 +812,29 @@ class TestProgramMarketingDataExtender(ModuleStoreTestCase):
|
||||
data = ProgramMarketingDataExtender(self.program, self.user).extend()
|
||||
|
||||
self.assertEqual(data['courses'][0]['course_runs'][0]['can_enroll'], can_enroll)
|
||||
|
||||
def test_learner_eligibility_for_one_click_purchase(self):
|
||||
"""
|
||||
Learner should be eligible for one click purchase if:
|
||||
- program is eligible for one click purchase
|
||||
- learner is not enrolled in any of the course runs associated with the program
|
||||
"""
|
||||
data = ProgramMarketingDataExtender(self.program, self.user).extend()
|
||||
self.assertTrue(data['is_learner_eligible_for_one_click_purchase'])
|
||||
|
||||
courses = [self._create_course(self.course_price)]
|
||||
|
||||
program = ProgramFactory(
|
||||
courses=courses,
|
||||
is_program_eligible_for_one_click_purchase=False
|
||||
)
|
||||
data = ProgramMarketingDataExtender(program, self.user).extend()
|
||||
self.assertFalse(data['is_learner_eligible_for_one_click_purchase'])
|
||||
|
||||
courses.append(self._create_course(self.course_price, is_enrolled=True))
|
||||
program2 = ProgramFactory(
|
||||
courses=courses,
|
||||
is_program_eligible_for_one_click_purchase=True
|
||||
)
|
||||
data = ProgramMarketingDataExtender(program2, self.user).extend()
|
||||
self.assertFalse(data['is_learner_eligible_for_one_click_purchase'])
|
||||
|
||||
@@ -504,19 +504,27 @@ class ProgramMarketingDataExtender(ProgramDataExtender):
|
||||
uuid=self.data['uuid']
|
||||
)
|
||||
program_instructors = cache.get(cache_key)
|
||||
is_learner_eligible_for_one_click_purchase = self.data['is_program_eligible_for_one_click_purchase']
|
||||
|
||||
for course in self.data['courses']:
|
||||
self._execute('_collect_course', course)
|
||||
if not program_instructors:
|
||||
for course_run in course['course_runs']:
|
||||
self._execute('_collect_instructors', course_run)
|
||||
if is_learner_eligible_for_one_click_purchase:
|
||||
is_learner_eligible_for_one_click_purchase = not any(
|
||||
course_run['is_enrolled'] for course_run in course['course_runs']
|
||||
)
|
||||
|
||||
if not program_instructors:
|
||||
# We cache the program instructors list to avoid repeated modulestore queries
|
||||
program_instructors = self.instructors.values()
|
||||
cache.set(cache_key, program_instructors, 3600)
|
||||
|
||||
self.data['instructors'] = program_instructors
|
||||
self.data.update({
|
||||
'instructors': program_instructors,
|
||||
'is_learner_eligible_for_one_click_purchase': is_learner_eligible_for_one_click_purchase,
|
||||
})
|
||||
|
||||
@classmethod
|
||||
def _handlers(cls, prefix):
|
||||
|
||||
Reference in New Issue
Block a user