Merge pull request #30439 from openedx/saleem-latif/ENT-5796

Enterprise learner with enabled learner portal should be redirect to B2B course about page.
This commit is contained in:
Saleem Latif
2022-05-25 12:36:02 +05:00
committed by GitHub
4 changed files with 34 additions and 8 deletions

View File

@@ -20,6 +20,7 @@ from lms.djangoapps.grades.models import PersistentCourseGrade
from openedx.core.constants import COURSE_PUBLISHED
from openedx.core.djangoapps.catalog.utils import get_programs
from openedx.core.djangoapps.programs.utils import ProgramProgressMeter
from openedx.features.enterprise_support.api import get_enterprise_learner_data_from_db
User = get_user_model()
@@ -84,10 +85,10 @@ class Command(BaseCommand):
Returns: Suggested program and course_run dicts
"""
for program in programs_progress:
for not_started_courses in program['not_started']:
for course_run in not_started_courses['course_runs']:
for not_started_course in program['not_started']:
for course_run in not_started_course['course_runs']:
if self.valid_course_run(course_run) and course_run['key'] != completed_course_id:
return program, course_run
return program, course_run, not_started_course
return None, None
def sort_programs(self, programs):
@@ -124,17 +125,28 @@ class Command(BaseCommand):
if program['uuid'] == program_progress['uuid']:
return program
def emit_event(self, user, program, suggested_course_run, completed_course_run):
def emit_event(self, user, program, suggested_course_run, suggested_course, completed_course_run):
"""
Emit the Segment event which will be used by Braze to send the email
"""
learner_data = get_enterprise_learner_data_from_db(user)
enterprise_customer = learner_data[0]['enterprise_customer'] if learner_data else None
if enterprise_customer and enterprise_customer['enable_learner_portal']:
# If user is an enterprise learner then we want to redirect to B2B course landing page on learner portal.
recommended_course_url = urljoin(
settings.ENTERPRISE_LEARNER_PORTAL_BASE_URL,
'/'.join([enterprise_customer['slug'], 'course', suggested_course['key']]),
)
else:
recommended_course_url = urljoin(settings.MKTG_URLS.get('ROOT'), suggested_course_run['marketing_url'])
event_properties = {
'COURSE_ONE_NAME': completed_course_run['title'],
'PROGRAM_TYPE': program['type'],
'PROGRAM_TITLE': program['title'],
'COURSE_TWO_NAME': suggested_course_run['title'],
'COURSE_TWO_SHORT_DESCRIPTION': suggested_course_run['short_description'],
'COURSE_TWO_LINK': urljoin(settings.MKTG_URLS.get('ROOT'), suggested_course_run['marketing_url']),
'COURSE_TWO_LINK': recommended_course_url,
'COURSE_TWO_IMAGE_LINK': suggested_course_run['image'].get('src'),
}
segment.track(user.id, 'edx.bi.program.course-enrollment.nudge', event_properties)
@@ -177,14 +189,16 @@ class Command(BaseCommand):
for user in users:
meter = ProgramProgressMeter(site=site, user=user, include_course_entitlements=False)
programs_progress = meter.progress(programs=course_linked_programs, count_only=False)
suggested_program_progress, suggested_course_run = self.get_course_run_to_suggest(
suggested_program_progress, suggested_course_run, suggested_course = self.get_course_run_to_suggest(
programs_progress, completed_course_id
)
if suggested_course_run:
if suggested_course_run and suggested_course:
suggested_program = self.get_program(course_linked_programs, suggested_program_progress)
completed_course_run = self.get_course_run(suggested_program, completed_course_id)
if should_commit:
self.emit_event(user, suggested_program, suggested_course_run, completed_course_run)
self.emit_event(
user, suggested_program, suggested_course_run, suggested_course, completed_course_run,
)
email_sent_records.append(
f'User: {user.username}, Completed Course: {completed_course_id}, '
f'Suggested Course: {suggested_course_run["key"]}'

View File

@@ -7,12 +7,14 @@ from unittest.mock import patch
import ddt
from django.core.management import call_command
from django.test import TestCase
from django.test.utils import override_settings
from django.utils import timezone
from testfixtures import LogCapture
from common.djangoapps.student.tests.factories import UserFactory
from lms.djangoapps.grades.models import PersistentCourseGrade
from openedx.core.djangoapps.catalog.tests.factories import CourseFactory, CourseRunFactory, ProgramFactory
from openedx.features.enterprise_support.tests.factories import EnterpriseCustomerUserFactory
LOG_PATH = 'lms.djangoapps.program_enrollments.management.commands.send_program_course_nudge_email'
@@ -33,6 +35,10 @@ class TestSendProgramCourseNudgeEmailCommand(TestCase):
self.user_1 = UserFactory()
self.user_2 = UserFactory()
self.enterprise_customer_user = EnterpriseCustomerUserFactory.create(
user_id=self.user_1.id, enterprise_customer__enable_learner_portal=True
)
self.enrolled_course_run = CourseRunFactory()
self.course_run_1 = CourseRunFactory()
self.course_run_2 = CourseRunFactory()
@@ -73,6 +79,7 @@ class TestSendProgramCourseNudgeEmailCommand(TestCase):
)
@patch('common.djangoapps.student.models.segment.track')
@patch('lms.djangoapps.program_enrollments.management.commands.send_program_course_nudge_email.get_programs')
@override_settings(FEATURES=dict(ENABLE_ENTERPRISE_INTEGRATION=True))
def test_email_send(self, add_no_commit, get_programs_mock, mock_track):
"""
Test Segment fired as expected.

View File

@@ -484,6 +484,10 @@ ECOMMERCE_PUBLIC_URL_ROOT = None
ENTERPRISE_API_URL = 'http://enterprise.example.com/enterprise/api/v1/'
ENTERPRISE_CONSENT_API_URL = 'http://enterprise.example.com/consent/api/v1/'
########################## ENTERPRISE LEARNER PORTAL ##############################
ENTERPRISE_LEARNER_PORTAL_NETLOC = 'example.com:8734'
ENTERPRISE_LEARNER_PORTAL_BASE_URL = 'http://' + ENTERPRISE_LEARNER_PORTAL_NETLOC
ACTIVATION_EMAIL_FROM_ADDRESS = 'test_activate@edx.org'
TEMPLATES[0]['OPTIONS']['debug'] = True

View File

@@ -42,6 +42,7 @@ class EnterpriseCustomerFactory(factory.django.DjangoModelFactory):
site = factory.SubFactory(SiteFactory)
enable_data_sharing_consent = True
enforce_data_sharing_consent = EnterpriseCustomer.AT_ENROLLMENT
enable_learner_portal = False
class EnterpriseCustomerUserFactory(factory.django.DjangoModelFactory):