Skip to content

Commit

Permalink
Add condition to if statement so as to ensure `transfer_approval_hist…
Browse files Browse the repository at this point in the history
…ory` has value on personal_info column (#575)
  • Loading branch information
purplesmoke05 authored Dec 11, 2023
1 parent b6cc717 commit 0ee168d
Show file tree
Hide file tree
Showing 5 changed files with 259 additions and 2 deletions.
6 changes: 5 additions & 1 deletion app/routers/bond.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
6 changes: 5 additions & 1 deletion app/routers/share.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
1 change: 1 addition & 0 deletions cmd/explorer/src/connector/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from typing import Any

from aiohttp import ClientSession

from cache import AsyncTTL

path = os.path.join(os.path.dirname(__file__), "../../../../")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,130 @@ def test_normal_4_2(self, client, db):
"issuer_cancelable": False,
}

# <Normal_4_3>
# 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
###########################################################################
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,130 @@ def test_normal_4_2(self, client, db):
"issuer_cancelable": False,
}

# <Normal_4_3>
# 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
###########################################################################
Expand Down

0 comments on commit 0ee168d

Please sign in to comment.