def test_update_deed(self, mock_org_name, mock_json_doc, mock_updated_borrower, mock_update_md, mock_save_deed, mock_delete_orphans, mock_assign): new_deed = Deed() mock_org_name.return_value = 'A conveyancer' new_deed.organisation_id = "1" new_deed.organisation_name = mock_org_name mock_json_doc.return_value = DeedHelper._valid_initial_deed mock_updated_borrower.return_value = DeedHelper._valid_single_borrower_update_response res, msg = update_deed(new_deed, DeedHelper._json_doc) mock_assign.assert_called_with(new_deed, DeedHelper._update_deed_mock_response) self.assertTrue(res)
def test_update_deed_invalid(self, mock_org_name, mock_json_doc, mock_updated_borrower, mock_update_md, mock_save_deed): new_deed = Deed() mock_org_name.return_value = 'A conveyancer' new_deed.organisation_id = "1" new_deed.organisation_name = mock_org_name mock_json_doc.return_value = DeedHelper._valid_initial_deed mock_updated_borrower.return_value = DeedHelper._valid_single_borrower_update_response mock_update_md.return_value = None with app.app_context() as ac: ac.g.trace_id = None with app.test_request_context(): res, msg = update_deed(new_deed, DeedHelper._json_doc) self.assertFalse(res)
def create(): deed_json = request.get_json() error_count, error_message = validate_helper(deed_json) if error_count > 0: LOGGER.error("Schema validation 400_BAD_REQUEST") return error_message, status.HTTP_400_BAD_REQUEST else: try: deed = Deed() deed.token = Deed.generate_token() check_result = Akuma.do_check(deed_json, "create deed") LOGGER.info("Check ID: " + check_result['id']) organisation_credentials = process_organisation_credentials() if organisation_credentials: deed.organisation_id = organisation_credentials["O"][1] deed.organisation_name = organisation_credentials["O"][0] success, msg = update_deed(deed, deed_json, check_result['result']) if not success: LOGGER.error("Update deed 400_BAD_REQUEST") return msg, status.HTTP_400_BAD_REQUEST else: LOGGER.error("Unable to process headers") return "Unable to process headers", status.HTTP_401_UNAUTHORIZED if check_result['result'] != "A": LOGGER.error("Akuma endpoint 503_SERVICE_UNAVAILABLE") return abort(status.HTTP_503_SERVICE_UNAVAILABLE) return jsonify({"path": '/deed/' + str(deed.token) }), status.HTTP_201_CREATED except: msg = str(sys.exc_info()) LOGGER.error("Database Exception - %s" % msg) abort(status.HTTP_500_INTERNAL_SERVER_ERROR)
def create(): deed_json = request.get_json() error_count, error_message = validate_helper(deed_json) if error_count > 0: LOGGER.error("Schema validation 400_BAD_REQUEST") return error_message, status.HTTP_400_BAD_REQUEST else: try: deed = Deed() deed.token = Deed.generate_token() check_result = Akuma.do_check(deed_json, "create deed") LOGGER.info("Check ID: " + check_result['id']) organisation_credentials = process_organisation_credentials() if organisation_credentials: deed.organisation_id = organisation_credentials["O"][1] deed.organisation_name = organisation_credentials["O"][0] success, msg = update_deed(deed, deed_json, check_result['result']) if not success: LOGGER.error("Update deed 400_BAD_REQUEST") return msg, status.HTTP_400_BAD_REQUEST else: LOGGER.error("Unable to process headers") return "Unable to process headers", status.HTTP_401_UNAUTHORIZED if check_result['result'] != "A": LOGGER.error("Akuma endpoint 503_SERVICE_UNAVAILABLE") return abort(status.HTTP_503_SERVICE_UNAVAILABLE) return jsonify({"path": '/deed/' + str(deed.token)}), status.HTTP_201_CREATED except: msg = str(sys.exc_info()) LOGGER.error("Database Exception - %s" % msg) abort(status.HTTP_500_INTERNAL_SERVER_ERROR)
def get_existing_deed_and_update(deed_reference): deed = Deed() deed_update_json = request.get_json() validator = Validation() credentials = validator.validate_organisation_credentials() if credentials is None: return '', status.HTTP_401_UNAUTHORIZED schema_errors = validator.validate_payload(deed_update_json) ids = [] for borrower in deed_update_json["borrowers"]: if 'id' in borrower: ids.append(borrower['id']) duplicates = [ item for item, count in collections.Counter(ids).items() if count > 1 ] if duplicates: schema_errors.append("A borrower ID must be unique to an individual.") if schema_errors: compiled_list = send_error_list(schema_errors) return compiled_list error_list = [] result_deed = deed.get_deed(deed_reference) if result_deed is None: error_list.append("There is no deed associated with - %s deed id." % str(deed_reference)) application.app.logger.error("Deed with reference - %s not found" % str(deed_reference)) return_error_list = send_error_list(error_list) return return_error_list # Deed Status checks if str(result_deed.status) != "DRAFT": error_list.append( "This deed is not in the correct state to be modified.") return_error_list = send_error_list(error_list) return return_error_list for borrower_id in ids: borrower_check = Borrower.get_by_id(borrower_id) if borrower_check is None or borrower_check.deed_token != deed_reference: error_list.append( "Borrowers provided do not match the selected deed.") return_error_list = send_error_list(error_list) return return_error_list validate_title_number = validator.validate_title_number(deed_update_json) if validate_title_number != "title OK": error_list.append(validate_title_number) return_error_list = send_error_list(error_list) return return_error_list # From here - errors are grouped error_list = [] validate_borrower_names, msg = validator.validate_borrower_names( deed_update_json) if not validate_borrower_names: error_list.append(msg) modify_deed_akuma = validator.call_akuma( deed_update_json, result_deed.token, credentials['organisation_name'], credentials['organisation_locale'], deed_type="modify deed") if modify_deed_akuma['result'] == "Z": return jsonify({"message": "Unable to use this service. " "This might be because of technical difficulties or entries on the register not " "being suitable for digital applications. " "You will need to complete this transaction using a paper deed."}), \ status.HTTP_403_FORBIDDEN dob_validate, msg = validator.validate_dob(deed_update_json) if not dob_validate: error_list.append(msg) phone_validate, msg = validator.validate_phonenumbers(deed_update_json) if not phone_validate: error_list.append(msg) md_validate, msg = validator.validate_md_exists(deed_update_json['md_ref']) if not md_validate: error_list.append(msg) # Error List Print Out if len(error_list) > 0: compiled_list = send_error_list(error_list) return compiled_list success, msg = update_deed(result_deed, deed_update_json) if not success: application.app.logger.error("Update deed 400_BAD_REQUEST") return msg, status.HTTP_400_BAD_REQUEST else: application.app.logger.info("Deed has been updated successfully.") return jsonify({"path": '/deed/' + str(deed_reference)}), status.HTTP_200_OK
def create(): deed = Deed() deed.token = Deed.generate_token() deed_json = request.get_json() validator = Validation() credentials = validator.validate_organisation_credentials() if credentials is None: return '', status.HTTP_401_UNAUTHORIZED deed.organisation_name = credentials['organisation_name'] schema_errors = validator.validate_payload(deed_json) if schema_errors: compiled_list = send_error_list(schema_errors) return compiled_list validate_title_number = validator.validate_title_number(deed_json) if validate_title_number != "title OK": errors = [] errors.append(validate_title_number) compiled_list = send_error_list(errors) return compiled_list # From here - errors are grouped error_list = [] validate_borrower_names, msg = validator.validate_borrower_names(deed_json) if not validate_borrower_names: error_list.append(msg) create_deed_akuma = validator.call_akuma( deed_json, deed.token, credentials['organisation_name'], credentials['organisation_locale'], deed_type="create deed") if create_deed_akuma["result"] == "Z": return jsonify({"message": "Unable to use this service. " "This might be because of technical difficulties or entries on the register not " "being suitable for digital applications. " "You will need to complete this transaction using a paper deed."}), \ status.HTTP_403_FORBIDDEN id_validate, msg = validator.validate_borrower_ids(deed_json) if not id_validate: error_list.append(msg) dob_validate, msg = validator.validate_dob(deed_json) if not dob_validate: error_list.append(msg) phone_validate, msg = validator.validate_phonenumbers(deed_json) if not phone_validate: error_list.append(msg) md_validate, msg = validator.validate_md_exists(deed_json['md_ref']) if not md_validate: error_list.append(msg) # Error List Print Out if len(error_list) > 0: compiled_list = send_error_list(error_list) return compiled_list success, msg = update_deed(deed, deed_json) if not success: application.app.logger.error("Create deed 400_BAD_REQUEST") return msg, status.HTTP_400_BAD_REQUEST else: application.app.logger.info("Deed has been created successfully.") return jsonify({"path": '/deed/' + str(deed.token)}), status.HTTP_201_CREATED