def profiling_fraud_score(user: User, body: serializers.UserProfilingFraudRequest) -> None: handler = user_profiling.UserProfilingClient() try: profiling_infos = handler.get_user_profiling_fraud_data( session_id=body.session_id, user_id=user.id, user_email=user.email, birth_date=user.dateOfBirth.date() if user.dateOfBirth else None, phone_number=user.phoneNumber, workflow_type=user_profiling.WorkflowType.BENEFICIARY_VALIDATION, # depends on loadbalancer configuration ip_address=request.headers.get("X-Forwarded-For"), line_of_business=user_profiling.LineOfBusiness.B2C, # Insert request unique identifier transaction_id=get_or_set_correlation_id(), agent_type=user_profiling.AgentType.AGENT_MOBILE, ) except user_profiling.BaseUserProfilingException: logger.exception("Error while retrieving user profiling infos", exc_info=True) else: logger.info("Success when profiling user: returned userdata %r", profiling_infos.dict()) fraud_api.on_user_profiling_result(user, profiling_infos)
def test_get_profiling_data(requests_mock): matcher = requests_mock.register_uri( "POST", settings.USER_PROFILING_URL, json=user_profiling_fixtures.CORRECT_RESPONSE, status_code=200 ) handler = user_profiling.UserProfilingClient() profiling_data = handler.get_user_profiling_fraud_data( session_id="fake-session-id", user_id="fake-user-id", user_email="*****@*****.**", birth_date=datetime.date(1999, 6, 5), phone_number="+33712345678", workflow_type=user_profiling.WorkflowType.BENEFICIARY_VALIDATION, ip_address="127.0.0.1", line_of_business=user_profiling.LineOfBusiness.B2B, transaction_id="random-transaction-id", agent_type=user_profiling.AgentType.AGENT_MOBILE, ) assert isinstance(profiling_data, fraud_models.UserProfilingFraudData) assert profiling_data.account_email_result == user_profiling_fixtures.CORRECT_RESPONSE["account_email_result"] assert profiling_data.account_email_score == int(user_profiling_fixtures.CORRECT_RESPONSE["account_email_score"]) assert ( profiling_data.account_telephone_result == user_profiling_fixtures.CORRECT_RESPONSE["account_telephone_result"] ) assert profiling_data.account_telephone_score == int( user_profiling_fixtures.CORRECT_RESPONSE["account_telephone_score"] ) assert profiling_data.bb_bot_rating == user_profiling_fixtures.CORRECT_RESPONSE["bb_bot_rating"] assert profiling_data.bb_bot_score == float(user_profiling_fixtures.CORRECT_RESPONSE["bb_bot_score"]) assert profiling_data.bb_fraud_rating == user_profiling_fixtures.CORRECT_RESPONSE["bb_fraud_rating"] assert profiling_data.bb_fraud_score == float(user_profiling_fixtures.CORRECT_RESPONSE["bb_fraud_score"]) assert profiling_data.digital_id_result == user_profiling_fixtures.CORRECT_RESPONSE["digital_id_result"] assert profiling_data.digital_id_trust_score == float( user_profiling_fixtures.CORRECT_RESPONSE["digital_id_trust_score"] ) assert ( profiling_data.digital_id_trust_score_rating == user_profiling_fixtures.CORRECT_RESPONSE["digital_id_trust_score_rating"] ) assert profiling_data.digital_id_confidence == int( user_profiling_fixtures.CORRECT_RESPONSE["digital_id_confidence"] ) assert ( profiling_data.digital_id_confidence_rating == user_profiling_fixtures.CORRECT_RESPONSE["digital_id_confidence_rating"] ) assert matcher.call_count == 1 request_body = matcher.last_request.json() assert request_body["session_id"] == "fake-session-id" assert request_body["account_email"] == "*****@*****.**" assert request_body["customer_event_type"] == user_profiling.WorkflowType.BENEFICIARY_VALIDATION.value assert request_body["line_of_business"] == user_profiling.LineOfBusiness.B2B.value assert request_body["condition_attrib_5"] == user_profiling.AgentType.AGENT_MOBILE.value
def test_get_profiling_data_error(requests_mock): requests_mock.register_uri("POST", settings.USER_PROFILING_URL, json={}, status_code=500) handler = user_profiling.UserProfilingClient() with pytest.raises(user_profiling.UserProfilingHTTPError): handler.get_user_profiling_fraud_data( session_id="fake-session-id", user_id="fake-user-id", user_email="*****@*****.**", birth_date=datetime.date(1999, 6, 5), phone_number="+33712345678", workflow_type=user_profiling.WorkflowType.BENEFICIARY_VALIDATION, ip_address="127.0.0.1", line_of_business=user_profiling.LineOfBusiness.B2B, transaction_id="random-transaction-id", agent_type=user_profiling.AgentType.AGENT_MOBILE, )
def test_get_profiling_data_date_of_birth_empty(requests_mock): matcher = requests_mock.register_uri( "POST", settings.USER_PROFILING_URL, json=user_profiling_fixtures.CORRECT_RESPONSE, status_code=200 ) handler = user_profiling.UserProfilingClient() handler.get_user_profiling_fraud_data( session_id="fake-session-id", user_id="fake-user-id", user_email="*****@*****.**", birth_date=None, phone_number="+33712345678", workflow_type=user_profiling.WorkflowType.BENEFICIARY_VALIDATION, ip_address="127.0.0.1", line_of_business=user_profiling.LineOfBusiness.B2B, transaction_id="random-transaction-id", agent_type=user_profiling.AgentType.AGENT_MOBILE, ) assert "account_date_of_birth" not in matcher.last_request.json().keys()
def test_get_profiling_data_empty_fields(requests_mock, empty_field): user_profiling_response = user_profiling_fixtures.CORRECT_RESPONSE.copy() del user_profiling_response[empty_field] requests_mock.register_uri("POST", settings.USER_PROFILING_URL, json=user_profiling_response, status_code=200) handler = user_profiling.UserProfilingClient() profiling_data = handler.get_user_profiling_fraud_data( session_id="fake-session-id", user_id="fake-user-id", user_email="*****@*****.**", birth_date=datetime.date(1999, 6, 5), phone_number="+33712345678", workflow_type=user_profiling.WorkflowType.BENEFICIARY_VALIDATION, ip_address="127.0.0.1", line_of_business=user_profiling.LineOfBusiness.B2B, transaction_id="random-transaction-id", agent_type=user_profiling.AgentType.AGENT_MOBILE, ) assert isinstance(profiling_data, fraud_models.UserProfilingFraudData)