Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
3d37635f
Commit
3d37635f
authored
Apr 18, 2017
by
Marko Jevtic
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[LEARNER-314] Determine client/learner eligibility
parent
7e368e10
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
41 additions
and
4 deletions
+41
-4
openedx/core/djangoapps/catalog/tests/factories.py
+4
-2
openedx/core/djangoapps/programs/tests/test_utils.py
+28
-1
openedx/core/djangoapps/programs/utils.py
+9
-1
No files found.
openedx/core/djangoapps/catalog/tests/factories.py
View file @
3d37635f
...
...
@@ -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'
...
...
openedx/core/djangoapps/programs/tests/test_utils.py
View file @
3d37635f
...
...
@@ -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'
])
openedx/core/djangoapps/programs/utils.py
View file @
3d37635f
...
...
@@ -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
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment