Esempio n. 1
0
    def test_high_debt(self):
        self.request_.customer_debt = 501
        response_ = PolicyValidationService(self.request_, self.base_config).run().as_dict()

        self.assertEqual(ResponseResult.REJECT.value, response_.get('result'))
        self.assertEqual(1, len(response_.get('reasons')))
        self.assertEqual('HIGH_DEBT_FOR_INCOME', response_.get('reasons')[0])
Esempio n. 2
0
    def test_low_income(self):
        self.request_.customer_income = 499.99
        self.request_.customer_debt = 0.0
        response_ = PolicyValidationService(self.request_, self.base_config).run().as_dict()

        self.assertEqual(ResponseResult.REJECT.value, response_.get('result'))
        self.assertEqual(1, len(response_.get('reasons')))
        self.assertEqual('LOW_INCOME', response_.get('reasons')[0])
Esempio n. 3
0
    def test_all_failure_reasons(self):
        self.request_ = PolicyValidationRequest(customer_income=499.99,
                                                customer_debt=500,
                                                payment_remarks_12m=1,
                                                payment_remarks=2,
                                                customer_age=17)
        response_ = PolicyValidationService(self.request_, self.base_config).run().as_dict()

        self.assertEqual(ResponseResult.REJECT.value, response_.get('result'))
        self.assertEqual(5, len(response_.get('reasons')))
        self.assertEqual('LOW_INCOME', response_.get('reasons')[0])
        self.assertEqual('HIGH_DEBT_FOR_INCOME', response_.get('reasons')[1])
        self.assertEqual('PAYMENT_REMARKS_12M', response_.get('reasons')[2])
        self.assertEqual('PAYMENT_REMARKS', response_.get('reasons')[3])
        self.assertEqual('UNDERAGE', response_.get('reasons')[4])
def validate():
    """
    API endpoint to validate the customer details based on the defined credit policies.

    Sample Request:
        {
            "customer_income": 1000,
            "customer_debt": 500,
            "payment_remarks_12m": 0,
            "payment_remarks": 1,
            "customer_age": 18
        }

    Sample Response:
        {
            "reasons": [],
            "result": "ACCEPT"
        }
    """
    try:
        request_ = PolicyValidationRequest.from_dict(
            request.get_json(force=True))
        validation_config = read_yaml(os.environ['VALIDATION_CONFIG_PATH'])
        response_ = PolicyValidationService(request_, validation_config).run()
        return response_.as_dict(), 200
    except (KeyError, ValueError):
        # KeyError will be raised if any of the mandatory keys are absent in the request
        # ValueError will be raised if any of the request attribute values can't be cast into their data type
        # The above errors indicate a bad request and thus, the status code is set to 400 here
        return {
            'error':
            'Error parsing request. Please check the request attributes and their types.'
        }, 400
    except yaml.YAMLError:
        return {
            'error':
            'Error parsing YAML file containing policy validation config.'
        }, 500
Esempio n. 5
0
    def test_run_accept(self):
        response_ = PolicyValidationService(self.request_, self.base_config).run().as_dict()

        self.assertEqual(ResponseResult.ACCEPT.value, response_.get('result'))
        self.assertEqual(0, len(response_.get('reasons')))
Esempio n. 6
0
 def test_invalid_config(self):
     with self.assertRaises(yaml.YAMLError):
         PolicyValidationService(self.request_, {}).run()