-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update primary key definitions #758
Conversation
0832965
to
df29f52
Compare
df29f52
to
c2ecbd6
Compare
personal_get_info_mock_patch.assert_has_calls( | ||
[call(account_address=account_address_2, default_value=None)] | ||
[call(account_address=account_address_1, default_value=None)] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test case probably wants to test something like this:
# <Normal_3_5>
# latest_flg = 1 (Get the latest personal info)
# - address_1 has personal info in the DB but the values are null
# - address_2 has personal info in the DB
@pytest.mark.asyncio
async def test_normal_3_5(self, async_client, async_db):
user_1 = config_eth_account("user1")
issuer_address = user_1["address"]
token_address = "0xABCdeF1234567890abcdEf123456789000000000"
account_address_1 = "0xABCdeF1234567890abCDeF123456789000000001"
account_address_2 = "0xaBcdEF1234567890aBCDEF123456789000000002"
personal_info_contract_address = "0xabcDEF1234567890AbcDEf123456789000000003"
# prepare data
_token = Token()
_token.type = TokenType.IBET_STRAIGHT_BOND
_token.tx_hash = ""
_token.issuer_address = issuer_address
_token.token_address = token_address
_token.abi = {}
_token.version = TokenVersion.V_24_09
async_db.add(_token)
_ledger_1 = Ledger()
_ledger_1.token_address = token_address
_ledger_1.token_type = TokenType.IBET_STRAIGHT_BOND
_ledger_1.ledger = {
"created": "2022/12/01",
"token_name": "テスト原簿",
"currency": "JPY",
"headers": [
{
"key": "aaa",
"value": "aaa",
},
{
"hoge": "aaaa",
"fuga": "bbbb",
},
],
"details": [
{
"token_detail_type": "権利_test_1",
"headers": [
{
"key": "aaa",
"value": "aaa",
},
{"test1": "a", "test2": "b"},
],
"data": [
{
"account_address": account_address_1,
"name": "name_test_1",
"address": "address_test_1",
"amount": 10,
"price": 20,
"balance": 30,
"acquisition_date": "2022/12/02",
},
{
"account_address": account_address_2,
"name": "name_test_2",
"address": "address_test_2",
"amount": 100,
"price": 200,
"balance": 300,
"acquisition_date": "2022/12/03",
},
],
"footers": [
{
"key": "aaa",
"value": "aaa",
},
{"f-test1": "a", "f-test2": "b"},
],
"some_personal_info_not_registered": False,
},
{
"token_detail_type": "権利_test_2",
"headers": [
{
"key": "aaa",
"value": "aaa",
},
{"test1-1": "a", "test2-1": "b"},
],
"data": [
{
"account_address": None,
"name": "name_test_1",
"address": "address_test_1",
"amount": 10,
"price": 20,
"balance": 200,
"acquisition_date": "2020/01/01",
},
{
"account_address": None,
"name": "name_test_2",
"address": "address_test_2",
"amount": 20,
"price": 30,
"balance": 600,
"acquisition_date": "2020/01/02",
},
],
"footers": [
{
"key": "aaa",
"value": "aaa",
},
{"f-test1-1": "a", "f-test2-1": "b"},
],
"some_personal_info_not_registered": False,
},
],
"footers": [
{
"key": "aaa",
"value": "aaa",
},
{
"f-hoge": "aaaa",
"f-fuga": "bbbb",
},
],
}
_ledger_1.ledger_created = datetime.strptime(
"2022/01/01 15:20:30", "%Y/%m/%d %H:%M:%S"
) # JST 2022/01/02
async_db.add(_ledger_1)
_idx_personal_info_1 = IDXPersonalInfo() # Note: account_address_1 has personal information in DB but the values are null
_idx_personal_info_1.account_address = account_address_1
_idx_personal_info_1.issuer_address = issuer_address
_idx_personal_info_1.personal_info = {
"name": None,
"address": None,
}
_idx_personal_info_1.data_source = PersonalInfoDataSource.ON_CHAIN
async_db.add(_idx_personal_info_1)
_idx_personal_info_2 = IDXPersonalInfo() # Note: account_address_2 has personal information in DB
_idx_personal_info_2.account_address = account_address_2
_idx_personal_info_2.issuer_address = issuer_address
_idx_personal_info_2.personal_info = {
"name": "name_db_2",
"address": "address_db_2",
}
_idx_personal_info_2.data_source = PersonalInfoDataSource.ON_CHAIN
async_db.add(_idx_personal_info_2)
_details_1 = LedgerDetailsTemplate()
_details_1.token_address = token_address
_details_1.token_detail_type = "権利_test_1"
_details_1.headers = [
{
"key": "aaa",
"value": "aaa",
},
{"test1": "a", "test2": "b"},
]
_details_1.footers = [
{
"key": "aaa",
"value": "aaa",
},
{"f-test1": "a", "f-test2": "b"},
]
_details_1.data_type = LedgerDataType.IBET_FIN
_details_1.data_source = token_address
async_db.add(_details_1)
await async_db.commit()
# Mock
token = IbetStraightBondContract()
token.personal_info_contract_address = personal_info_contract_address
token.issuer_address = issuer_address
token.require_personal_info_registered = True
token_get_mock = mock.patch(
"app.model.blockchain.IbetStraightBondContract.get", return_value=token
)
personal_get_info_mock = mock.patch(
"app.model.blockchain.PersonalInfoContract.get_info"
)
# request target API
with (
token_get_mock,
personal_get_info_mock as personal_get_info_mock_patch,
):
# Note:
# account_address_1 has no personal information in the DB
# and gets information from the contract
personal_get_info_mock_patch.side_effect = [
{
"name": "name_contract_1",
"address": "address_contract_1",
},
{
"name": "name_contract_2",
"address": "address_contract_2",
},
]
resp = await async_client.get(
self.base_url.format(token_address=token_address, ledger_id=1),
params={
"latest_flg": 1,
},
headers={
"issuer-address": issuer_address,
},
)
# assertion
personal_get_info_mock_patch.assert_has_calls(
[call(account_address=account_address_1, default_value=None)]
)
# assertion
assert resp.status_code == 200
assert resp.json() == {
"created": "2022/12/01",
"token_name": "テスト原簿",
"currency": "JPY",
"headers": [
{
"key": "aaa",
"value": "aaa",
},
{
"hoge": "aaaa",
"fuga": "bbbb",
},
],
"details": [
{
"token_detail_type": "権利_test_1",
"headers": [
{
"key": "aaa",
"value": "aaa",
},
{"test1": "a", "test2": "b"},
],
"data": [
{
"account_address": account_address_1,
"name": "name_contract_1",
"address": "address_contract_1",
"amount": 10,
"price": 20,
"balance": 30,
"acquisition_date": "2022/12/02",
},
{
"account_address": account_address_2,
"name": "name_db_2",
"address": "address_db_2",
"amount": 100,
"price": 200,
"balance": 300,
"acquisition_date": "2022/12/03",
},
],
"footers": [
{
"key": "aaa",
"value": "aaa",
},
{"f-test1": "a", "f-test2": "b"},
],
"some_personal_info_not_registered": False,
},
{
"token_detail_type": "権利_test_2",
"headers": [
{
"key": "aaa",
"value": "aaa",
},
{"test1-1": "a", "test2-1": "b"},
],
"data": [
{
"account_address": None,
"name": "name_test_1",
"address": "address_test_1",
"amount": 10,
"price": 20,
"balance": 200,
"acquisition_date": "2020/01/01",
},
{
"account_address": None,
"name": "name_test_2",
"address": "address_test_2",
"amount": 20,
"price": 30,
"balance": 600,
"acquisition_date": "2020/01/02",
},
],
"footers": [
{
"key": "aaa",
"value": "aaa",
},
{"f-test1-1": "a", "f-test2-1": "b"},
],
"some_personal_info_not_registered": False,
},
],
"footers": [
{
"key": "aaa",
"value": "aaa",
},
{
"f-hoge": "aaaa",
"f-fuga": "bbbb",
},
],
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you. I understand properly this test case verifies fetching personal information from chain when reset to null(like account_address_1
). Now fixed.
Ref: BoostryJP/ibet-Wallet-API#1377