Commit 3d37635f by Marko Jevtic

[LEARNER-314] Determine client/learner eligibility

parent 7e368e10
......@@ -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):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment