feat: create braze alias and event (#29612)
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
Tests for /save/course/ API.
|
||||
"""
|
||||
|
||||
from unittest.mock import patch, MagicMock
|
||||
|
||||
import ddt
|
||||
from django.conf import settings
|
||||
@@ -37,6 +38,7 @@ class SaveForLaterApiViewTest(ThirdPartyAuthTestMixin, APITestCase):
|
||||
self.course_key = CourseKey.from_string(self.course_id)
|
||||
CourseOverviewFactory.create(id=self.course_key)
|
||||
|
||||
@patch('lms.djangoapps.save_for_later.api.v1.views.BrazeClient', MagicMock())
|
||||
def test_save_course_using_email(self):
|
||||
"""
|
||||
Test successfully email sent
|
||||
|
||||
@@ -2,27 +2,23 @@
|
||||
Save for later views
|
||||
"""
|
||||
|
||||
|
||||
from datetime import datetime
|
||||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.contrib.sites.models import Site
|
||||
from ratelimit.decorators import ratelimit
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from django.db import transaction
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from edx_ace import ace
|
||||
from edx_ace.recipient import Recipient
|
||||
from braze.client import BrazeClient
|
||||
from eventtracking import tracker
|
||||
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from openedx.core.djangoapps.user_api.accounts.api import get_email_validation_error
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from openedx.core.djangoapps.ace_common.template_context import get_base_template_context
|
||||
|
||||
from lms.djangoapps.save_for_later.message_types import SaveForLater
|
||||
from lms.djangoapps.save_for_later.models import SavedCourse
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -84,28 +80,43 @@ class SaveForLaterApiView(APIView):
|
||||
except CourseOverview.DoesNotExist:
|
||||
return Response({'error_code': 'course-not-found'}, status=404)
|
||||
|
||||
site = Site.objects.get_current()
|
||||
message_context = get_base_template_context(site)
|
||||
message_context.update({
|
||||
'course_image_url': course_overview.course_image_url,
|
||||
'partner_image_url': org_img_url,
|
||||
'enroll_course_url': '/register?course_id={course_key}&enrollment_action=enroll&email_opt_in=false&'
|
||||
'save_for_later=true'.format(course_key=course_key),
|
||||
'view_course_url': marketing_url + '?save_for_later=true' if marketing_url else '#',
|
||||
'course_key': course_key,
|
||||
'display_name': course_overview.display_name,
|
||||
'short_description': course_overview.short_description,
|
||||
'lms_url': configuration_helpers.get_value('LMS_ROOT_URL', settings.LMS_ROOT_URL),
|
||||
'from_address': configuration_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL),
|
||||
})
|
||||
lms_url = configuration_helpers.get_value('LMS_ROOT_URL', settings.LMS_ROOT_URL)
|
||||
event_properties = {
|
||||
'time': datetime.now().isoformat(),
|
||||
'name': 'user.send.save.for.later.email',
|
||||
'properties': {
|
||||
'course_image_url': '{base_url}{image_path}'.format(
|
||||
base_url=lms_url, image_path=course_overview.course_image_url
|
||||
),
|
||||
'partner_image_url': '{base_url}{image_path}'.format(base_url=lms_url, image_path=org_img_url),
|
||||
'enroll_course_url': '{base_url}/register?course_id={course_id}&enrollment_action=enroll&email_opt_in='
|
||||
'false&save_for_later=true'.format(base_url=lms_url, course_id=course_key),
|
||||
'view_course_url': marketing_url + '?save_for_later=true' if marketing_url else '#',
|
||||
'display_name': course_overview.display_name,
|
||||
'short_description': course_overview.short_description,
|
||||
}
|
||||
}
|
||||
|
||||
msg = SaveForLater().personalize(
|
||||
recipient=Recipient(lms_user_id=0, email_address=email),
|
||||
language=settings.LANGUAGE_CODE,
|
||||
user_context=message_context,
|
||||
braze_client = BrazeClient(
|
||||
api_key=configuration_helpers.get_value('BRAZE_API_KEY'),
|
||||
api_url=configuration_helpers.get_value('BRAZE_API_URL'),
|
||||
app_id=configuration_helpers.get_value('BRAZE_APP_ID'),
|
||||
)
|
||||
|
||||
try:
|
||||
ace.send(msg)
|
||||
external_id = braze_client.get_braze_external_id(email)
|
||||
if external_id:
|
||||
event_properties.update({'external_id': external_id})
|
||||
else:
|
||||
braze_client.create_braze_alias(emails=[email], alias_label='save_for_later')
|
||||
event_properties.update({
|
||||
'user_alias': {
|
||||
'alias_label': 'save_for_later',
|
||||
'alias_name': email,
|
||||
},
|
||||
})
|
||||
|
||||
braze_client.track_user(events=[event_properties])
|
||||
tracker.emit(
|
||||
USER_SENT_EMAIL_SAVE_FOR_LATER,
|
||||
{
|
||||
|
||||
@@ -72,6 +72,7 @@ done-xblock
|
||||
edx-ace
|
||||
edx-api-doc-tools
|
||||
edx-auth-backends # Allow Studio to use LMS SSO
|
||||
edx-braze-client
|
||||
edx-bulk-grades # LMS REST API for managing bulk grading operations
|
||||
edx-ccx-keys
|
||||
edx-celeryutils
|
||||
|
||||
@@ -396,6 +396,8 @@ edx-api-doc-tools==1.5.0
|
||||
# via -r requirements/edx/base.in
|
||||
edx-auth-backends==4.0.1
|
||||
# via -r requirements/edx/base.in
|
||||
edx-braze-client==0.1.0
|
||||
# via -r requirements/edx/base.in
|
||||
edx-bulk-grades==0.9.2
|
||||
# via
|
||||
# -r requirements/edx/base.in
|
||||
|
||||
@@ -502,6 +502,8 @@ edx-api-doc-tools==1.5.0
|
||||
# via -r requirements/edx/testing.txt
|
||||
edx-auth-backends==4.0.1
|
||||
# via -r requirements/edx/testing.txt
|
||||
edx-braze-client==0.1.0
|
||||
# via -r requirements/edx/testing.txt
|
||||
edx-bulk-grades==0.9.2
|
||||
# via
|
||||
# -r requirements/edx/testing.txt
|
||||
|
||||
@@ -484,6 +484,8 @@ edx-api-doc-tools==1.5.0
|
||||
# via -r requirements/edx/base.txt
|
||||
edx-auth-backends==4.0.1
|
||||
# via -r requirements/edx/base.txt
|
||||
edx-braze-client==0.1.0
|
||||
# via -r requirements/edx/base.txt
|
||||
edx-bulk-grades==0.9.2
|
||||
# via
|
||||
# -r requirements/edx/base.txt
|
||||
|
||||
Reference in New Issue
Block a user