From 0ee168d3e252a50715bc5bc47fa2c8f68dcb31d1 Mon Sep 17 00:00:00 2001 From: Yosuke Otosu <15183665+purplesmoke05@users.noreply.github.com> Date: Mon, 11 Dec 2023 18:34:28 +0900 Subject: [PATCH] Add condition to if statement so as to ensure `transfer_approval_history` has value on personal_info column (#575) --- app/routers/bond.py | 6 +- app/routers/share.py | 6 +- cmd/explorer/src/connector/__init__.py | 1 + ...sfer_approvals_{token_address}_{id}_GET.py | 124 ++++++++++++++++++ ...sfer_approvals_{token_address}_{id}_GET.py | 124 ++++++++++++++++++ 5 files changed, 259 insertions(+), 2 deletions(-) diff --git a/app/routers/bond.py b/app/routers/bond.py index 376af077..96c4544a 100644 --- a/app/routers/bond.py +++ b/app/routers/bond.py @@ -3479,7 +3479,11 @@ def retrieve_transfer_approval_history(db: DBSession, token_address: str, id: in # NOTE: # If the transfer approval operation has already been performed, get the data at that time. # Otherwise, get the latest data. - if _transfer_approval_op is not None: + if ( + _transfer_approval_op is not None + and _transfer_approval_op.from_address_personal_info is not None + and _transfer_approval_op.to_address_personal_info is not None + ): _from_address_personal_info = _transfer_approval_op.from_address_personal_info _to_address_personal_info = _transfer_approval_op.to_address_personal_info else: diff --git a/app/routers/share.py b/app/routers/share.py index edfb9222..f15267a7 100644 --- a/app/routers/share.py +++ b/app/routers/share.py @@ -3468,7 +3468,11 @@ def retrieve_transfer_approval_history( # NOTE: # If the transfer approval operation has already been performed, get the data at that time. # Otherwise, get the latest data. - if _transfer_approval_op is not None: + if ( + _transfer_approval_op is not None + and _transfer_approval_op.from_address_personal_info is not None + and _transfer_approval_op.to_address_personal_info is not None + ): _from_address_personal_info = _transfer_approval_op.from_address_personal_info _to_address_personal_info = _transfer_approval_op.to_address_personal_info else: diff --git a/cmd/explorer/src/connector/__init__.py b/cmd/explorer/src/connector/__init__.py index 6f06648c..34464b59 100644 --- a/cmd/explorer/src/connector/__init__.py +++ b/cmd/explorer/src/connector/__init__.py @@ -22,6 +22,7 @@ from typing import Any from aiohttp import ClientSession + from cache import AsyncTTL path = os.path.join(os.path.dirname(__file__), "../../../../") diff --git a/tests/test_app_routers_bond_transfer_approvals_{token_address}_{id}_GET.py b/tests/test_app_routers_bond_transfer_approvals_{token_address}_{id}_GET.py index bfcbb01e..78b89c9f 100644 --- a/tests/test_app_routers_bond_transfer_approvals_{token_address}_{id}_GET.py +++ b/tests/test_app_routers_bond_transfer_approvals_{token_address}_{id}_GET.py @@ -809,6 +809,130 @@ def test_normal_4_2(self, client, db): "issuer_cancelable": False, } + # + # transferred data + # created from 22.12 to 23.9 + def test_normal_4_3(self, client, db): + # prepare data: Token + _token = Token() + _token.type = TokenType.IBET_STRAIGHT_BOND.value + _token.tx_hash = self.test_transaction_hash + _token.issuer_address = self.test_issuer_address + _token.token_address = self.test_token_address + _token.abi = {} + _token.version = TokenVersion.V_22_12 + db.add(_token) + + # prepare data: IDXPersonalInfo + _personal_info_from = IDXPersonalInfo() + _personal_info_from.account_address = self.test_from_address + _personal_info_from.issuer_address = self.test_issuer_address + _personal_info_from._personal_info = { + "key_manager": "key_manager_test1", + "name": "name_test1", + "postal_code": "postal_code_test1", + "address": "address_test1", + "email": "email_test1", + "birth": "birth_test1", + "is_corporate": False, + "tax_category": 10, + } # latest data + db.add(_personal_info_from) + + _personal_info_to = IDXPersonalInfo() + _personal_info_to.account_address = self.test_to_address + _personal_info_to.issuer_address = self.test_issuer_address + _personal_info_to._personal_info = { + "key_manager": "key_manager_test2", + "name": "name_test2", + "postal_code": "postal_code_test2", + "address": "address_test2", + "email": "email_test2", + "birth": "birth_test2", + "is_corporate": False, + "tax_category": 10, + } # latest data + db.add(_personal_info_to) + + # prepare data: IDXTransferApproval + id = 10 + _idx_transfer_approval = IDXTransferApproval() + _idx_transfer_approval.id = id + _idx_transfer_approval.token_address = self.test_token_address + _idx_transfer_approval.exchange_address = self.test_exchange_address + _idx_transfer_approval.application_id = 100 + _idx_transfer_approval.from_address = self.test_from_address + _idx_transfer_approval.to_address = self.test_to_address + _idx_transfer_approval.amount = 200 + _idx_transfer_approval.application_datetime = self.test_application_datetime + _idx_transfer_approval.application_blocktimestamp = ( + self.test_application_blocktimestamp + ) + _idx_transfer_approval.approval_datetime = self.test_approval_datetime + _idx_transfer_approval.approval_blocktimestamp = ( + self.test_approval_blocktimestamp + ) + _idx_transfer_approval.cancellation_blocktimestamp = None + _idx_transfer_approval.cancelled = None + _idx_transfer_approval.escrow_finished = True + _idx_transfer_approval.transfer_approved = None # event synchronizing + db.add(_idx_transfer_approval) + + # prepare data: TransferApprovalHistory + _approval_op = TransferApprovalHistory() + _approval_op.token_address = self.test_token_address + _approval_op.exchange_address = self.test_exchange_address + _approval_op.application_id = 100 + _approval_op.operation_type = TransferApprovalOperationType.APPROVE.value + _approval_op.from_address_personal_info = None # created from v22.12 to v23.9 + _approval_op.to_address_personal_info = None # created from v22.12 to v23.9 + db.add(_approval_op) + + # request target API + resp = client.get(self.base_url.format(self.test_token_address, id)) + + # assertion + assert resp.status_code == 200 + assert resp.json() == { + "id": 10, + "token_address": self.test_token_address, + "exchange_address": self.test_exchange_address, + "application_id": 100, + "from_address": self.test_from_address, + "from_address_personal_information": { + "key_manager": "key_manager_test1", + "name": "name_test1", + "postal_code": "postal_code_test1", + "address": "address_test1", + "email": "email_test1", + "birth": "birth_test1", + "is_corporate": False, + "tax_category": 10, + }, + "to_address": self.test_to_address, + "to_address_personal_information": { + "key_manager": "key_manager_test2", + "name": "name_test2", + "postal_code": "postal_code_test2", + "address": "address_test2", + "email": "email_test2", + "birth": "birth_test2", + "is_corporate": False, + "tax_category": 10, + }, + "amount": 200, + "application_datetime": self.test_application_datetime_str, + "application_blocktimestamp": self.test_application_blocktimestamp_str, + "approval_datetime": self.test_approval_datetime_str, + "approval_blocktimestamp": self.test_approval_blocktimestamp_str, + "cancellation_blocktimestamp": None, + "cancelled": False, + "escrow_finished": True, + "transfer_approved": True, + "status": 2, + "issuer_cancelable": False, + } + ########################################################################### # Error Case ########################################################################### diff --git a/tests/test_app_routers_share_transfer_approvals_{token_address}_{id}_GET.py b/tests/test_app_routers_share_transfer_approvals_{token_address}_{id}_GET.py index 899d31a8..3aa45f81 100644 --- a/tests/test_app_routers_share_transfer_approvals_{token_address}_{id}_GET.py +++ b/tests/test_app_routers_share_transfer_approvals_{token_address}_{id}_GET.py @@ -809,6 +809,130 @@ def test_normal_4_2(self, client, db): "issuer_cancelable": False, } + # + # transferred data + # created from 22.12 to 23.9 + def test_normal_4_3(self, client, db): + # prepare data: Token + _token = Token() + _token.type = TokenType.IBET_SHARE.value + _token.tx_hash = self.test_transaction_hash + _token.issuer_address = self.test_issuer_address + _token.token_address = self.test_token_address + _token.abi = {} + _token.version = TokenVersion.V_22_12 + db.add(_token) + + # prepare data: IDXPersonalInfo + _personal_info_from = IDXPersonalInfo() + _personal_info_from.account_address = self.test_from_address + _personal_info_from.issuer_address = self.test_issuer_address + _personal_info_from._personal_info = { + "key_manager": "key_manager_test1", + "name": "name_test1", + "postal_code": "postal_code_test1", + "address": "address_test1", + "email": "email_test1", + "birth": "birth_test1", + "is_corporate": False, + "tax_category": 10, + } # latest data + db.add(_personal_info_from) + + _personal_info_to = IDXPersonalInfo() + _personal_info_to.account_address = self.test_to_address + _personal_info_to.issuer_address = self.test_issuer_address + _personal_info_to._personal_info = { + "key_manager": "key_manager_test2", + "name": "name_test2", + "postal_code": "postal_code_test2", + "address": "address_test2", + "email": "email_test2", + "birth": "birth_test2", + "is_corporate": False, + "tax_category": 10, + } # latest data + db.add(_personal_info_to) + + # prepare data: IDXTransferApproval + id = 10 + _idx_transfer_approval = IDXTransferApproval() + _idx_transfer_approval.id = id + _idx_transfer_approval.token_address = self.test_token_address + _idx_transfer_approval.exchange_address = self.test_exchange_address + _idx_transfer_approval.application_id = 100 + _idx_transfer_approval.from_address = self.test_from_address + _idx_transfer_approval.to_address = self.test_to_address + _idx_transfer_approval.amount = 200 + _idx_transfer_approval.application_datetime = self.test_application_datetime + _idx_transfer_approval.application_blocktimestamp = ( + self.test_application_blocktimestamp + ) + _idx_transfer_approval.approval_datetime = self.test_approval_datetime + _idx_transfer_approval.approval_blocktimestamp = ( + self.test_approval_blocktimestamp + ) + _idx_transfer_approval.cancellation_blocktimestamp = None + _idx_transfer_approval.cancelled = None + _idx_transfer_approval.escrow_finished = True + _idx_transfer_approval.transfer_approved = None # event synchronizing + db.add(_idx_transfer_approval) + + # prepare data: TransferApprovalHistory + _approval_op = TransferApprovalHistory() + _approval_op.token_address = self.test_token_address + _approval_op.exchange_address = self.test_exchange_address + _approval_op.application_id = 100 + _approval_op.operation_type = TransferApprovalOperationType.APPROVE.value + _approval_op.from_address_personal_info = None # created from v22.12 to v23.9 + _approval_op.to_address_personal_info = None # created from v22.12 to v23.9 + db.add(_approval_op) + + # request target API + resp = client.get(self.base_url.format(self.test_token_address, id)) + + # assertion + assert resp.status_code == 200 + assert resp.json() == { + "id": 10, + "token_address": self.test_token_address, + "exchange_address": self.test_exchange_address, + "application_id": 100, + "from_address": self.test_from_address, + "from_address_personal_information": { + "key_manager": "key_manager_test1", + "name": "name_test1", + "postal_code": "postal_code_test1", + "address": "address_test1", + "email": "email_test1", + "birth": "birth_test1", + "is_corporate": False, + "tax_category": 10, + }, + "to_address": self.test_to_address, + "to_address_personal_information": { + "key_manager": "key_manager_test2", + "name": "name_test2", + "postal_code": "postal_code_test2", + "address": "address_test2", + "email": "email_test2", + "birth": "birth_test2", + "is_corporate": False, + "tax_category": 10, + }, + "amount": 200, + "application_datetime": self.test_application_datetime_str, + "application_blocktimestamp": self.test_application_blocktimestamp_str, + "approval_datetime": self.test_approval_datetime_str, + "approval_blocktimestamp": self.test_approval_blocktimestamp_str, + "cancellation_blocktimestamp": None, + "cancelled": False, + "escrow_finished": True, + "transfer_approved": True, + "status": 2, + "issuer_cancelable": False, + } + ########################################################################### # Error Case ###########################################################################