From 51ea129267e5ba26cd845230d04aa745ec2efb5c Mon Sep 17 00:00:00 2001 From: Matthew Piatetsky Date: Fri, 22 Nov 2019 14:44:27 -0500 Subject: [PATCH] never give users discount unless they've seen the banner --- .../tests/views/test_course_home.py | 6 +++++- openedx/features/discounts/applicability.py | 21 +------------------ .../discounts/tests/test_applicability.py | 6 ++++++ 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/openedx/features/course_experience/tests/views/test_course_home.py b/openedx/features/course_experience/tests/views/test_course_home.py index d8dbb3103a..5ccc1bd6e5 100644 --- a/openedx/features/course_experience/tests/views/test_course_home.py +++ b/openedx/features/course_experience/tests/views/test_course_home.py @@ -36,7 +36,7 @@ from lms.djangoapps.courseware.tests.factories import ( ) 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.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.dark_lang.models import DarkLangConfig from openedx.core.djangoapps.django_comment_common.models import ( @@ -431,6 +431,10 @@ class TestCourseHomePageAccess(CourseHomePageTestCase): can_receive_discount_mock.return_value = applicability discount_percentage_mock.return_value = percentage 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) url = course_home_url(self.course) response = self.client.get(url) diff --git a/openedx/features/discounts/applicability.py b/openedx/features/discounts/applicability.py index d191979e01..e35eadddbb 100644 --- a/openedx/features/discounts/applicability.py +++ b/openedx/features/discounts/applicability.py @@ -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)) time_limit_start = parse_datetime(saw_banner.value) except ExperimentData.DoesNotExist: - pass - - 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 + return None discount_expiration_date = time_limit_start + timedelta(weeks=1) diff --git a/openedx/features/discounts/tests/test_applicability.py b/openedx/features/discounts/tests/test_applicability.py index 258e2a1548..13a340f3f1 100644 --- a/openedx/features/discounts/tests/test_applicability.py +++ b/openedx/features/discounts/tests/test_applicability.py @@ -15,9 +15,11 @@ from course_modes.models import CourseMode from course_modes.tests.factories import CourseModeFactory from enterprise.models import EnterpriseCustomer, EnterpriseCustomerUser 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.waffle_utils.testutils import override_waffle_flag from openedx.features.discounts.models import DiscountRestrictionConfig +from openedx.features.discounts.utils import REV1008_EXPERIMENT_ID from student.tests.factories import CourseEnrollmentFactory, UserFactory from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.factories import CourseFactory @@ -38,6 +40,10 @@ class TestApplicability(ModuleStoreTestCase): self.user = UserFactory.create() self.course = CourseFactory.create(run='test', display_name='test') 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) self.mock_holdback = holdback_patcher.start()