feat: Send an LTI launch event for LTI Launches
This commit is contained in:
committed by
Farhaan Bukhsh
parent
e5184a07e5
commit
96ace718f4
@@ -10,6 +10,7 @@ from django.test import TestCase
|
||||
from django.test.client import RequestFactory
|
||||
from django.urls import reverse
|
||||
from opaque_keys.edx.locator import BlockUsageLocator, CourseLocator
|
||||
from openedx_events.learning.data import UserData, UserPersonalData, LtiProviderLaunchData, LtiProviderLaunchParamsData
|
||||
|
||||
from common.djangoapps.student.tests.factories import UserFactory
|
||||
from lms.djangoapps.courseware.testutils import RenderXBlockTestMixin
|
||||
@@ -96,15 +97,36 @@ class LtiLaunchTest(LtiTestMixin, TestCase):
|
||||
"""
|
||||
Tests for the lti_launch view
|
||||
"""
|
||||
@patch('lms.djangoapps.lti_provider.views.LTI_PROVIDER_LAUNCH_SUCCESS.send_event')
|
||||
@patch('lms.djangoapps.lti_provider.views.render_courseware')
|
||||
@patch('lms.djangoapps.lti_provider.views.authenticate_lti_user')
|
||||
def test_valid_launch(self, _authenticate, render):
|
||||
def test_valid_launch(self, _authenticate, render, lti_launch_success_send_event):
|
||||
"""
|
||||
Verifies that the LTI launch succeeds when passed a valid request.
|
||||
"""
|
||||
request = build_launch_request()
|
||||
views.lti_launch(request, str(COURSE_KEY), str(USAGE_KEY))
|
||||
render.assert_called_with(request, USAGE_KEY)
|
||||
lti_launch_success_send_event.assert_called_with(
|
||||
launch_data=LtiProviderLaunchData(
|
||||
user=UserData(
|
||||
id=request.user.id,
|
||||
is_active=request.user.is_active,
|
||||
pii=UserPersonalData(
|
||||
username=request.user.username,
|
||||
email=request.user.email,
|
||||
name=request.user.profile.name,
|
||||
)
|
||||
),
|
||||
course_key=COURSE_KEY,
|
||||
usage_key=USAGE_KEY,
|
||||
launch_params=LtiProviderLaunchParamsData(
|
||||
roles='Instructor,urn:lti:instrole:ims/lis/Administrator',
|
||||
context_id='lti_launch_context_id',
|
||||
user_id='LTI_User', extra_params={}
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@patch('lms.djangoapps.lti_provider.views.render_courseware')
|
||||
@patch('lms.djangoapps.lti_provider.views.store_outcome_parameters')
|
||||
|
||||
@@ -12,6 +12,8 @@ from django.views.decorators.csrf import csrf_exempt
|
||||
from common.djangoapps.edxmako.shortcuts import render_to_response
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey, UsageKey
|
||||
from openedx_events.learning.data import LtiProviderLaunchData, LtiProviderLaunchParamsData, UserData, UserPersonalData
|
||||
from openedx_events.learning.signals import LTI_PROVIDER_LAUNCH_SUCCESS
|
||||
|
||||
from common.djangoapps.util.views import add_p3p_header
|
||||
from lms.djangoapps.lti_provider.models import LtiConsumer
|
||||
@@ -107,6 +109,34 @@ def lti_launch(request, course_id, usage_id):
|
||||
# used earlier to verify the oauth signature.
|
||||
store_outcome_parameters(params, request.user, lti_consumer)
|
||||
|
||||
# Make a copy of params for the event signal, and remove sensitive oauth parameters.
|
||||
launch_params = params.copy()
|
||||
for key in list(launch_params.keys()):
|
||||
if key.startswith('oauth_'):
|
||||
launch_params.pop(key)
|
||||
|
||||
LTI_PROVIDER_LAUNCH_SUCCESS.send_event(
|
||||
launch_data=LtiProviderLaunchData(
|
||||
user=UserData(
|
||||
pii=UserPersonalData(
|
||||
username=request.user.username,
|
||||
email=request.user.email,
|
||||
name=request.user.profile.name,
|
||||
),
|
||||
id=request.user.id,
|
||||
is_active=request.user.is_active,
|
||||
),
|
||||
course_key=launch_params.pop("course_key"),
|
||||
usage_key=launch_params.pop("usage_key"),
|
||||
launch_params=LtiProviderLaunchParamsData(
|
||||
roles=launch_params.pop("roles"),
|
||||
context_id=launch_params.pop("context_id"),
|
||||
user_id=launch_params.pop("user_id"),
|
||||
extra_params={key: str(val) for key, val in launch_params.items()},
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
return render_courseware(request, params['usage_key'])
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user