Merge pull request #22389 from edx/try_to_fix_remove_discount_from_track_selection
never give users discount unless they've seen the banner
This commit is contained in:
@@ -36,7 +36,7 @@ from lms.djangoapps.courseware.tests.factories import (
|
|||||||
)
|
)
|
||||||
from lms.djangoapps.discussion.django_comment_client.tests.factories import RoleFactory
|
from lms.djangoapps.discussion.django_comment_client.tests.factories import RoleFactory
|
||||||
from openedx.features.discounts.applicability import get_discount_expiration_date
|
from openedx.features.discounts.applicability import get_discount_expiration_date
|
||||||
from openedx.features.discounts.utils import format_strikeout_price
|
from openedx.features.discounts.utils import format_strikeout_price, REV1008_EXPERIMENT_ID
|
||||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||||
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
from openedx.core.djangoapps.dark_lang.models import DarkLangConfig
|
||||||
from openedx.core.djangoapps.django_comment_common.models import (
|
from openedx.core.djangoapps.django_comment_common.models import (
|
||||||
@@ -431,6 +431,10 @@ class TestCourseHomePageAccess(CourseHomePageTestCase):
|
|||||||
can_receive_discount_mock.return_value = applicability
|
can_receive_discount_mock.return_value = applicability
|
||||||
discount_percentage_mock.return_value = percentage
|
discount_percentage_mock.return_value = percentage
|
||||||
user = self.create_user_for_course(self.course, CourseUserType.ENROLLED)
|
user = self.create_user_for_course(self.course, CourseUserType.ENROLLED)
|
||||||
|
now_time = datetime.now(tz=UTC).strftime(u"%Y-%m-%d %H:%M:%S%z")
|
||||||
|
ExperimentData.objects.create(
|
||||||
|
user=user, experiment_id=REV1008_EXPERIMENT_ID, key=str(self.course), value=now_time
|
||||||
|
)
|
||||||
self.client.login(username=user.username, password=self.TEST_PASSWORD)
|
self.client.login(username=user.username, password=self.TEST_PASSWORD)
|
||||||
url = course_home_url(self.course)
|
url = course_home_url(self.course)
|
||||||
response = self.client.get(url)
|
response = self.client.get(url)
|
||||||
|
|||||||
@@ -69,26 +69,7 @@ def get_discount_expiration_date(user, course):
|
|||||||
saw_banner = ExperimentData.objects.get(user=user, experiment_id=REV1008_EXPERIMENT_ID, key=str(course))
|
saw_banner = ExperimentData.objects.get(user=user, experiment_id=REV1008_EXPERIMENT_ID, key=str(course))
|
||||||
time_limit_start = parse_datetime(saw_banner.value)
|
time_limit_start = parse_datetime(saw_banner.value)
|
||||||
except ExperimentData.DoesNotExist:
|
except ExperimentData.DoesNotExist:
|
||||||
pass
|
return None
|
||||||
|
|
||||||
if not time_limit_start:
|
|
||||||
enrollment = course_enrollment.first()
|
|
||||||
try:
|
|
||||||
# Content availability date is equivalent to max(enrollment date, course start date)
|
|
||||||
# for most people. Using the schedule date will provide flexibility to deal with
|
|
||||||
# more complex business rules in the future.
|
|
||||||
content_availability_date = enrollment.schedule.start
|
|
||||||
# We have anecdotally observed a case where the schedule.start was
|
|
||||||
# equal to the course start, but should have been equal to the enrollment start
|
|
||||||
# https://openedx.atlassian.net/browse/PROD-58
|
|
||||||
# This section is meant to address that case
|
|
||||||
if enrollment.created and course.start:
|
|
||||||
if (content_availability_date.date() == course.start.date() and
|
|
||||||
course.start < enrollment.created < timezone.now()):
|
|
||||||
content_availability_date = enrollment.created
|
|
||||||
except CourseEnrollment.schedule.RelatedObjectDoesNotExist:
|
|
||||||
content_availability_date = max(enrollment.created, course.start)
|
|
||||||
time_limit_start = content_availability_date
|
|
||||||
|
|
||||||
discount_expiration_date = time_limit_start + timedelta(weeks=1)
|
discount_expiration_date = time_limit_start + timedelta(weeks=1)
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,11 @@ from course_modes.models import CourseMode
|
|||||||
from course_modes.tests.factories import CourseModeFactory
|
from course_modes.tests.factories import CourseModeFactory
|
||||||
from enterprise.models import EnterpriseCustomer, EnterpriseCustomerUser
|
from enterprise.models import EnterpriseCustomer, EnterpriseCustomerUser
|
||||||
from entitlements.tests.factories import CourseEntitlementFactory
|
from entitlements.tests.factories import CourseEntitlementFactory
|
||||||
|
from experiments.models import ExperimentData
|
||||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||||
from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag
|
from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag
|
||||||
from openedx.features.discounts.models import DiscountRestrictionConfig
|
from openedx.features.discounts.models import DiscountRestrictionConfig
|
||||||
|
from openedx.features.discounts.utils import REV1008_EXPERIMENT_ID
|
||||||
from student.tests.factories import CourseEnrollmentFactory, UserFactory
|
from student.tests.factories import CourseEnrollmentFactory, UserFactory
|
||||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||||
from xmodule.modulestore.tests.factories import CourseFactory
|
from xmodule.modulestore.tests.factories import CourseFactory
|
||||||
@@ -38,6 +40,10 @@ class TestApplicability(ModuleStoreTestCase):
|
|||||||
self.user = UserFactory.create()
|
self.user = UserFactory.create()
|
||||||
self.course = CourseFactory.create(run='test', display_name='test')
|
self.course = CourseFactory.create(run='test', display_name='test')
|
||||||
CourseModeFactory.create(course_id=self.course.id, mode_slug='verified')
|
CourseModeFactory.create(course_id=self.course.id, mode_slug='verified')
|
||||||
|
now_time = datetime.now(tz=pytz.UTC).strftime(u"%Y-%m-%d %H:%M:%S%z")
|
||||||
|
ExperimentData.objects.create(
|
||||||
|
user=self.user, experiment_id=REV1008_EXPERIMENT_ID, key=str(self.course), value=now_time
|
||||||
|
)
|
||||||
|
|
||||||
holdback_patcher = patch('openedx.features.discounts.applicability._is_in_holdback', return_value=False)
|
holdback_patcher = patch('openedx.features.discounts.applicability._is_in_holdback', return_value=False)
|
||||||
self.mock_holdback = holdback_patcher.start()
|
self.mock_holdback = holdback_patcher.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user