def test_search_with_fraud_prediction(self, mock_q): """ The cases in a search result should contain a fraud_prediction if it's available """ url = reverse("v1:search-list") client = get_authenticated_client() CASE_ID = "FOO-ID" # Mock search function FOO_SEARCH_RESULTS = [{"id": CASE_ID}] mock_q.get_search_results = Mock(return_value=FOO_SEARCH_RESULTS) # Create a fraud prediction object with the same CASE_ID fraud_prediction = FraudPrediction.objects.create( case_id=CASE_ID, fraud_probability=0.6, fraud_prediction=True, business_rules={}, shap_values={}, ) response = client.get(url, self.MOCK_SEARCH_QUERY_PARAMETERS) expected_fraud_prediction = FraudPredictionSerializer( fraud_prediction).data fraud_prediction_response = ( response.json().get("cases")[0].get("fraud_prediction")) self.assertEqual(expected_fraud_prediction, fraud_prediction_response)
class CaseSerializer(serializers.ModelSerializer): fraud_prediction = FraudPredictionSerializer(required=False, read_only=True) id = serializers.CharField(source="case_id") class Meta: model = Case fields = ("id", "data", "fraud_prediction")
def get_fraud_prediction(case_id): try: fraud_prediction = FraudPrediction.objects.get(case_id=case_id) serializer = FraudPredictionSerializer(fraud_prediction) return serializer.data except FraudPrediction.DoesNotExist: LOGGER.warning( "Fraud prediction object for case does not exist: {}".format( case_id))
class CaseSerializer(serializers.ModelSerializer): fraud_prediction = FraudPredictionSerializer(required=False, read_only=True) id = serializers.CharField(source="case_id") data = serializers.SerializerMethodField(method_name="get_data") class Meta: model = Case fields = ("id", "data", "fraud_prediction") def get_data(self, obj): return obj.data_context(self.context)
def get_fraud_predictions(): """ Returns a dictionary of all fraud predictions mapped to case_ids """ fraud_predictions = FraudPrediction.objects.all() fraud_prediction_dictionary = {} for fraud_prediction in fraud_predictions: fraud_prediction_dictionary[str( fraud_prediction.case_id)] = FraudPredictionSerializer( fraud_prediction).data return fraud_prediction_dictionary
class CaseSearchSerializer(serializers.Serializer): id = serializers.CharField(source="case_id") fraud_prediction = FraudPredictionSerializer(required=False, read_only=True) address = CaseAddress(read_only=True)