def test_runtime_debug_false(self, mock_log_auth_header): """ Test `log_authorization_header` is not called when runtime.debug is False """ self.xblock.runtime.debug = False self.xblock.result_service_handler(make_request('', 'GET')) assert not mock_log_auth_header.called
def test_parse_suffix_raises_error(self, mock_parse_suffix): """ Test 404 response returned when the user id cannot be parsed from the request path suffix """ mock_parse_suffix.side_effect = LtiError() response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 404)
def test_bad_request_method(self, mock_parse_suffix): """ Test 404 response returned when the request contains an unsupported method """ mock_parse_suffix.return_value = FAKE_USER_ID response = self.xblock.result_service_handler(make_request('', 'POST')) self.assertEqual(response.status_code, 404)
def test_bad_request_method(self, mock_parse_suffix): """ Test 404 response returned when the request contains an unsupported method """ mock_parse_suffix.return_value = FAKE_USER_ID response = self.xblock.result_service_handler(make_request('', 'POST')) self.assertEqual(response.status_code, 404)
def test_parse_suffix_raises_error(self, mock_parse_suffix): """ Test 404 response returned when the user id cannot be parsed from the request path suffix """ mock_parse_suffix.side_effect = LtiError() response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 404)
def test_runtime_debug_false(self, mock_log_auth_header): """ Test `log_authorization_header` is not called when runtime.debug is False """ self.xblock.runtime.debug = False self.xblock.result_service_handler(make_request('', 'GET')) assert not mock_log_auth_header.called
def test_verify_headers_raises_error(self, mock_parse_suffix, mock_verify_result_headers): """ Test 401 response returned when `verify_result_headers` raises LtiError """ mock_parse_suffix.return_value = FAKE_USER_ID mock_verify_result_headers.side_effect = LtiError() response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 401)
def test_verify_result_headers_valid(self): """ Test True is returned if request is valid """ request = make_request('') request.environ['CONTENT_TYPE'] = LtiConsumer.CONTENT_TYPE_RESULT_JSON response = self.lti_consumer.verify_result_headers(request) self.assertTrue(response)
def test_bad_user_id(self, mock_parse_suffix): """ Test 404 response returned when a user cannot be found """ mock_parse_suffix.return_value = FAKE_USER_ID self.xblock.runtime.get_real_user.return_value = None response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 404)
def test_verify_result_headers_verify_content_type_false(self): """ Test content type check skipped if `verify_content_type` is False """ request = make_request('') request.environ['CONTENT_TYPE'] = LtiConsumer.CONTENT_TYPE_RESULT_JSON response = self.lti_consumer.verify_result_headers(request, False) self.assertTrue(response)
def test_verify_result_headers_valid(self): """ Test True is returned if request is valid """ request = make_request('') request.environ['CONTENT_TYPE'] = LtiConsumer.CONTENT_TYPE_RESULT_JSON response = self.lti_consumer.verify_result_headers(request) self.assertTrue(response)
def test_verify_result_headers_verify_content_type_false(self): """ Test content type check skipped if `verify_content_type` is False """ request = make_request('') request.environ['CONTENT_TYPE'] = LtiConsumer.CONTENT_TYPE_RESULT_JSON response = self.lti_consumer.verify_result_headers(request, False) self.assertTrue(response)
def test_bad_user_id(self, mock_parse_suffix): """ Test 404 response returned when a user cannot be found """ mock_parse_suffix.return_value = FAKE_USER_ID self.xblock.runtime.get_real_user.return_value = None response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 404)
def test_verify_result_headers_verify_content_type_true(self, mock_log): """ Test wrong content type raises exception if `verify_content_type` is True """ request = make_request('') with self.assertRaises(LtiError): self.lti_consumer.verify_result_headers(request) self.assertTrue(mock_log.called)
def test_get_result_raises_error(self, mock_parse_suffix, mock_get_result): """ Test 404 response returned when the LtiConsumer result service handler methods raise an exception """ mock_parse_suffix.return_value = FAKE_USER_ID mock_get_result.side_effect = LtiError() response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 404)
def test_unsupported_action(self): """ Test unsupported action returns unsupported response """ request = make_request('') response = self.outcome_servce.handle_request(request) self.assertIn('unsupported', response) self.assertIn('Target does not support the requested operation.', response)
def test_unsupported_action(self): """ Test unsupported action returns unsupported response """ request = make_request('') response = self.outcome_servce.handle_request(request) self.assertIn('unsupported', response) self.assertIn('Target does not support the requested operation.', response)
def test_verify_result_headers_verify_content_type_true(self, mock_log): """ Test wrong content type raises exception if `verify_content_type` is True """ request = make_request('') with self.assertRaises(LtiError): self.lti_consumer.verify_result_headers(request) self.assertTrue(mock_log.called)
def test_verify_headers_raises_error(self, mock_parse_suffix, mock_verify_result_headers): """ Test 401 response returned when `verify_result_headers` raises LtiError """ mock_parse_suffix.return_value = FAKE_USER_ID mock_verify_result_headers.side_effect = LtiError() response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 401)
def test_get_result_raises_error(self, mock_parse_suffix, mock_get_result): """ Test 404 response returned when the LtiConsumer result service handler methods raise an exception """ mock_parse_suffix.return_value = FAKE_USER_ID mock_get_result.side_effect = LtiError() response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 404)
def test_handle_request_called(self, mock_get_signed_lti_parameters): """ Test LtiConsumer.get_signed_lti_parameters is called and a 200 HTML response is returned """ request = make_request('', 'GET') response = self.xblock.lti_launch_handler(request) assert mock_get_signed_lti_parameters.called self.assertEqual(response.status_code, 200) self.assertEqual(response.content_type, 'text/html')
def test_handle_request_called(self, mock_handle_request): """ Test OutcomeService.handle_request is called and a 200 XML response is returned """ request = make_request('', 'POST') response = self.xblock.outcome_service_handler(request) assert mock_handle_request.called self.assertEqual(response.status_code, 200) self.assertEqual(response.content_type, 'application/xml')
def test_runtime_debug_true(self, mock_lti_provider_key_secret, mock_log_auth_header): """ Test `log_authorization_header` is called when runtime.debug is True """ mock_lti_provider_key_secret.__get__ = Mock(return_value=(self.lti_provider_key, self.lti_provider_secret)) self.xblock.runtime.debug = True request = make_request('', 'GET') self.xblock.result_service_handler(request) mock_log_auth_header.assert_called_with(request, self.lti_provider_key, self.lti_provider_secret)
def test_user_not_found(self): """ Test user not found returns failure response """ request = make_request('') self.xblock.runtime.get_real_user.return_value = None response = self.outcome_servce.handle_request(request) self.assertIn('failure', response) self.assertIn('User not found', response)
def test_xml_parse_lti_error(self, mock_parse): """ Test XML parsing LtiError returns failure response """ request = make_request('') mock_parse.side_effect = LtiError response = self.outcome_servce.handle_request(request) self.assertIn('failure', response) self.assertIn('Request body XML parsing error', response)
def test_grade_past_due(self): """ Test late grade returns failure response """ request = make_request('') self.xblock.accept_grades_past_due = False response = self.outcome_servce.handle_request(request) self.assertIn('failure', response) self.assertIn('Grade is past due', response)
def test_delete_result_called(self, mock_parse_suffix, mock_delete_result): """ Test 200 response and LtiConsumer.delete_result is called on a DELETE request """ mock_parse_suffix.return_value = FAKE_USER_ID mock_delete_result.return_value = {} response = self.xblock.result_service_handler(make_request('', 'DELETE')) assert mock_delete_result.called self.assertEqual(response.status_code, 200)
def test_verify_result_headers_value_error(self, mock_log): """ Test exception raised if request header verification raises error """ request = make_request('') request.environ['CONTENT_TYPE'] = LtiConsumer.CONTENT_TYPE_RESULT_JSON with self.assertRaises(LtiError): self.lti_consumer.verify_result_headers(request) self.assertTrue(mock_log.called)
def test_accept_grades_past_due_false_and_is_past_due_true(self, mock_is_past_due): """ Test 404 response returned when `accept_grades_past_due` is False and `is_past_due` is True """ mock_is_past_due.__get__ = Mock(return_value=True) self.xblock.accept_grades_past_due = False response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 404)
def test_verify_result_headers_value_error(self, mock_log): """ Test exception raised if request header verification raises error """ request = make_request('') request.environ['CONTENT_TYPE'] = LtiConsumer.CONTENT_TYPE_RESULT_JSON with self.assertRaises(LtiError): self.lti_consumer.verify_result_headers(request) self.assertTrue(mock_log.called)
def test_xml_parse_lti_error(self, mock_parse): """ Test XML parsing LtiError returns failure response """ request = make_request('') mock_parse.side_effect = LtiError response = self.outcome_servce.handle_request(request) self.assertIn('failure', response) self.assertIn('Request body XML parsing error', response)
def test_put_result_called(self, mock_parse_suffix, mock_put_result): """ Test 200 response and LtiConsumer.put_result is called on a PUT request """ mock_parse_suffix.return_value = FAKE_USER_ID mock_put_result.return_value = {} response = self.xblock.result_service_handler(make_request('', 'PUT')) assert mock_put_result.called self.assertEqual(response.status_code, 200)
def test_handle_request_called(self, mock_handle_request): """ Test OutcomeService.handle_request is called and a 200 XML response is returned """ request = make_request('', 'POST') response = self.xblock.outcome_service_handler(request) assert mock_handle_request.called self.assertEqual(response.status_code, 200) self.assertEqual(response.content_type, 'application/xml')
def test_user_not_found(self): """ Test user not found returns failure response """ request = make_request('') self.xblock.runtime.get_real_user.return_value = None response = self.outcome_servce.handle_request(request) self.assertIn('failure', response) self.assertIn('User not found', response)
def test_accept_grades_past_due_false_and_is_past_due_true(self, mock_is_past_due): """ Test 404 response returned when `accept_grades_past_due` is False and `is_past_due` is True """ mock_is_past_due.__get__ = Mock(return_value=True) self.xblock.accept_grades_past_due = False response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 404)
def test_handle_request_called(self, mock_get_signed_lti_parameters): """ Test LtiConsumer.get_signed_lti_parameters is called and a 200 HTML response is returned """ request = make_request('', 'GET') response = self.xblock.lti_launch_handler(request) assert mock_get_signed_lti_parameters.called self.assertEqual(response.status_code, 200) self.assertEqual(response.content_type, 'text/html')
def test_runtime_debug_true(self, mock_lti_provider_key_secret, mock_log_auth_header): """ Test `log_authorization_header` is called when runtime.debug is True """ mock_lti_provider_key_secret.__get__ = Mock(return_value=(self.lti_provider_key, self.lti_provider_secret)) self.xblock.runtime.debug = True request = make_request('', 'GET') self.xblock.result_service_handler(request) mock_log_auth_header.assert_called_with(request, self.lti_provider_key, self.lti_provider_secret)
def test_grade_past_due(self): """ Test late grade returns failure response """ request = make_request('') self.xblock.accept_grades_past_due = False response = self.outcome_servce.handle_request(request) self.assertIn('failure', response) self.assertIn('Grade is past due', response)
def test_invalid_signature(self, mock_verify): """ Test invalid oauth signature returns failure response """ request = make_request('') mock_verify.side_effect = ValueError self.assertIn('failure', self.outcome_servce.handle_request(request)) mock_verify.side_effect = LtiError self.assertIn('failure', self.outcome_servce.handle_request(request))
def test_accept_grades_past_due_true_and_is_past_due_true(self, mock_is_past_due, mock_parse_suffix, mock_get_result): """ Test 200 response returned when `accept_grades_past_due` is True and `is_past_due` is True """ mock_is_past_due.__get__ = Mock(return_value=True) mock_parse_suffix.return_value = FAKE_USER_ID mock_get_result.return_value = {} response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 200)
def test_accept_grades_past_due_true_and_is_past_due_true( self, mock_is_past_due, mock_parse_suffix, mock_get_result): """ Test 200 response returned when `accept_grades_past_due` is True and `is_past_due` is True """ mock_is_past_due.__get__ = Mock(return_value=True) mock_parse_suffix.return_value = FAKE_USER_ID mock_get_result.return_value = {} response = self.xblock.result_service_handler(make_request('', 'GET')) self.assertEqual(response.status_code, 200)
def test_invalid_signature(self, mock_verify): """ Test invalid oauth signature returns failure response """ request = make_request('') mock_verify.side_effect = ValueError self.assertIn('failure', self.outcome_servce.handle_request(request)) mock_verify.side_effect = LtiError self.assertIn('failure', self.outcome_servce.handle_request(request))
def test_lti_error_not_raises_type_error(self, mock_parse): """ Test XML parsing LtiError exception doesn't raise TypeError exception while escaping the request body. """ request = make_request('test_string') mock_parse.side_effect = LtiError response = self.outcome_servce.handle_request(request) self.assertNotIn('TypeError', response) self.assertNotIn('a bytes-like object is required', response) self.assertIn('Request body XML parsing error', response)
def test_verify_result_headers_no_outcome_service_url(self, mock_log): """ Test exception raised if no outcome_service_url is set """ request = make_request('') request.environ[ 'CONTENT_TYPE'] = LtiConsumer1p1.CONTENT_TYPE_RESULT_JSON with self.assertRaises(ValueError): self.lti_consumer.verify_result_headers(request) assert mock_log.error.called
def test_verify_result_headers_value_error(self, mock_log): """ Test exception raised if request header verification raises error """ request = make_request('') request.environ[ 'CONTENT_TYPE'] = LtiConsumer1p1.CONTENT_TYPE_RESULT_JSON self.lti_consumer.set_outcome_service_url('outcome_service_url') with self.assertRaises(Lti1p1Error): self.lti_consumer.verify_result_headers(request) assert mock_log.error.called
def test_handle_replace_result_success(self): """ Test replace result request returns with success indicator """ request = make_request('') values = { 'code': 'success', 'description': 'Score for is now 0.5', 'msg_id': '', 'response': '<replaceResultResponse/>' } self.assertEqual( self.outcome_servce.handle_request(request).strip(), RESPONSE_BODY_TEMPLATE.format(**values).strip())
def test_handle_replace_result_success(self): """ Test replace result request returns with success indicator """ request = make_request('') values = { 'code': 'success', 'description': 'Score for is now 0.5', 'msg_id': '', 'response': '<replaceResultResponse/>' } self.assertEqual( self.outcome_servce.handle_request(request).strip(), RESPONSE_BODY_TEMPLATE.format(**values).strip() )
def test_valid_signature(self): """ Test True is returned when the request signature is valid """ self.assertTrue( verify_oauth_body_signature(make_request(''), 'test', 'secret'))
def test_log_auth_header(self, mock_log): """ Test that log.debug is called """ log_authorization_header(make_request(''), 'test', 'secret') self.assertTrue(mock_log.debug.called)
def test_missing_oauth_body_hash(self): """ Test exception is raised when the request signature is missing oauth_body_hash """ with self.assertRaises(LtiError): verify_oauth_body_signature(make_request(''), 'test', 'secret')
def test_missing_oauth_body_hash(self): """ Test exception is raised when the request signature is missing oauth_body_hash """ with self.assertRaises(LtiError): verify_oauth_body_signature(make_request(''), 'test', 'secret')
def test_invalid_signature(self): """ Test exception is raised when the request signature is invalid """ with self.assertRaises(Lti1p1Error): verify_oauth_body_signature(make_request(''), 'test', 'secret')
def test_log_auth_header(self, mock_log): """ Test that log.debug is called """ log_authorization_header(make_request(''), 'test', 'secret') self.assertTrue(mock_log.debug.called)
def test_valid_signature(self): """ Test True is returned when the request signature is valid """ self.assertTrue(verify_oauth_body_signature(make_request(''), 'test', 'secret'))