@@ -1009,6 +1009,27 @@ def test_get_end_assessment_claims(self):
10091009
10101010 self .assertEqual (expected_get_end_assessment_claims , actual_get_end_assessment_claims )
10111011
1012+ def test_assessment_control_claims (self ):
1013+ """
1014+ Ensure the correct claims are returned for the assessment control service.
1015+ """
1016+ self .lti_consumer .set_proctoring_data (
1017+ attempt_number = "attempt_number" ,
1018+ session_data = "session_data" ,
1019+ start_assessment_url = "start_assessment_url" ,
1020+ assessment_control_url = "assessment_control_url" ,
1021+ assessment_control_actions = ["flagRequest" , "terminateRequest" ],
1022+ )
1023+ proctoring_acs_claims = self .lti_consumer .get_assessment_control_claim ()
1024+
1025+ expected_acs_claims = {
1026+ "https://purl.imsglobal.org/spec/lti-ap/claim/acs" : {
1027+ "assessment_control_url" : "assessment_control_url" ,
1028+ "actions" : ["flagRequest" , "terminateRequest" ],
1029+ },
1030+ }
1031+ self .assertDictEqual (proctoring_acs_claims , expected_acs_claims )
1032+
10121033 @ddt .data ("LtiStartProctoring" , "LtiEndAssessment" )
10131034 @patch ('lti_consumer.lti_1p3.consumer.get_data_from_cache' )
10141035 def test_generate_launch_request (self , message_type , mock_get_data_from_cache ):
@@ -1045,6 +1066,36 @@ def test_generate_launch_request(self, message_type, mock_get_data_from_cache):
10451066 for claim in expected_claims .items ():
10461067 self .assertIn (claim , decoded_token_claims )
10471068
1069+ @patch ('lti_consumer.lti_1p3.consumer.get_data_from_cache' )
1070+ def test_enable_assessment_control (self , mock_get_data_from_cache ):
1071+ """
1072+ Ensure that the correct claims are included in LTI launch messages with an ACS url set.
1073+ """
1074+
1075+ mock_launch_data = self .get_launch_data (message_type = "LtiStartProctoring" )
1076+ mock_get_data_from_cache .return_value = mock_launch_data
1077+ self ._setup_proctoring ()
1078+
1079+ self .lti_consumer .set_proctoring_data (
1080+ attempt_number = "attempt_number" ,
1081+ session_data = "session_data" ,
1082+ start_assessment_url = "start_assessment_url" ,
1083+ assessment_control_url = "assessment_control_url" ,
1084+ assessment_control_actions = ["flagRequest" , "terminateRequest" ],
1085+ )
1086+
1087+ token = self .lti_consumer .generate_launch_request (
1088+ self .preflight_response ,
1089+ )['id_token' ]
1090+
1091+ decoded_token = self .lti_consumer .key_handler .validate_and_decode (token )
1092+ expected_claims = self .lti_consumer .get_start_proctoring_claims ()
1093+ expected_claims .update (self .lti_consumer .get_assessment_control_claim ())
1094+
1095+ decoded_token_claims = decoded_token .items ()
1096+ for claim in expected_claims .items ():
1097+ self .assertIn (claim , decoded_token_claims )
1098+
10481099 @patch ('lti_consumer.lti_1p3.consumer.get_data_from_cache' )
10491100 def test_generate_launch_request_invalid_message (self , mock_get_data_from_cache ):
10501101 """
0 commit comments