never give users discount unless they've seen the banner

This commit is contained in:
Matthew Piatetsky
2019-11-22 14:44:27 -05:00
parent 3f007b8cad
commit 51ea129267
3 changed files with 12 additions and 21 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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()