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])
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])
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
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')))
def test_invalid_config(self): with self.assertRaises(yaml.YAMLError): PolicyValidationService(self.request_, {}).run()