From 23d75b691206e38865773daa65830414ed61087c Mon Sep 17 00:00:00 2001
From: Arunmozhi <arunmozhi@opencraft.com>
Date: Tue, 10 May 2022 18:25:19 +1000
Subject: [PATCH] refactor: replace user rebinding runtime function with
 service

The `rebind_noauth_module_to_user` function is deprecated in the core
edx-platform [1]. This is now replaced with a "rebind_user" service.
This commit brings this change to the LTI Consumer XBlock.

[1] - https://github.com/openedx/edx-platform/pull/30320/
---
 lti_consumer/lti_xblock.py                 |  5 +++--
 lti_consumer/tests/unit/test_lti_xblock.py | 11 ++++++++---
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/lti_consumer/lti_xblock.py b/lti_consumer/lti_xblock.py
index a3b1fef..3f60d03 100644
--- a/lti_consumer/lti_xblock.py
+++ b/lti_consumer/lti_xblock.py
@@ -161,6 +161,7 @@ class LaunchTarget:
 
 
 @XBlock.needs('i18n')
+@XBlock.needs('rebind_user')
 @XBlock.wants('user')
 @XBlock.wants('settings')
 @XBlock.wants('lti-configuration')
@@ -1332,7 +1333,7 @@ class LtiConsumerXBlock(StudioEditableXBlockMixin, XBlock):
         Returns:
             dict:  response to this request as dictated by the LtiConsumer
         """
-        self.runtime.rebind_noauth_module_to_user(self, user)
+        self.runtime.service(self, 'rebind_user').rebind_noauth_module_to_user(self, user)
         args = []
         if self.module_score:
             args.extend([self.module_score, self.score_comment])
@@ -1420,7 +1421,7 @@ class LtiConsumerXBlock(StudioEditableXBlockMixin, XBlock):
         else:
             scaled_score = None
 
-        self.runtime.rebind_noauth_module_to_user(self, user)
+        self.runtime.service(self, 'rebind_user').rebind_noauth_module_to_user(self, user)
 
         # have to publish for the progress page...
         self.runtime.publish(
diff --git a/lti_consumer/tests/unit/test_lti_xblock.py b/lti_consumer/tests/unit/test_lti_xblock.py
index 81178df..604f3ab 100644
--- a/lti_consumer/tests/unit/test_lti_xblock.py
+++ b/lti_consumer/tests/unit/test_lti_xblock.py
@@ -1074,10 +1074,12 @@ class TestResultServiceHandler(TestLtiConsumerXBlock):
         mock_runtime = self.xblock.runtime = Mock()
         mock_lti_consumer = Mock()
         mock_user = Mock()
+        mock_rebind_user_service = Mock()
+        mock_runtime.service.return_value = mock_rebind_user_service
 
         self.xblock._result_service_get(mock_lti_consumer, mock_user)  # pylint: disable=protected-access
 
-        mock_runtime.rebind_noauth_module_to_user.assert_called_with(self.xblock, mock_user)
+        mock_rebind_user_service.rebind_noauth_module_to_user.assert_called_with(self.xblock, mock_user)
         mock_lti_consumer.get_result.assert_called_with()
 
     @patch('lti_consumer.lti_xblock.LtiConsumerXBlock.module_score', PropertyMock(return_value=0.5))
@@ -1210,12 +1212,15 @@ class TestSetScore(TestLtiConsumerXBlock):
 
     def test_rebind_called(self):
         """
-        Test that `runtime.rebind_noauth_module_to_user` is called
+        Test that `rebind_noauth_module_to_user` service is called
         """
+        mock_rebind_user_service = Mock()
+        self.xblock.runtime.service = Mock()
+        self.xblock.runtime.service.return_value = mock_rebind_user_service
         user = Mock(user_id=FAKE_USER_ID)
         self.xblock.set_user_module_score(user, 0.92, 1.0, 'Great Job!')
 
-        self.xblock.runtime.rebind_noauth_module_to_user.assert_called_with(self.xblock, user)
+        mock_rebind_user_service.rebind_noauth_module_to_user.assert_called_with(self.xblock, user)
 
     def test_publish_grade_event_called(self):
         """
-- 
GitLab