diff --git a/.dockerignore b/.dockerignore index 4fb6abd1e..b14bf8191 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,4 +11,5 @@ docs/ .DS_Store .cov/ .venv -Dockerfile \ No newline at end of file +Dockerfile +.env \ No newline at end of file diff --git a/app/config.py b/app/config.py index 363713994..b88530f91 100644 --- a/app/config.py +++ b/app/config.py @@ -21,8 +21,15 @@ import os from email.policy import HTTP, SMTP, SMTPUTF8 +from dotenv import load_dotenv + BRAND_NAME = "ibet-Wallet-API" +###################################################### +# Environment Setup +###################################################### +load_dotenv() + #################################################### # Basic settings #################################################### diff --git a/app/model/db/company.py b/app/model/db/company.py index b26af86da..f6fa2cfd4 100644 --- a/app/model/db/company.py +++ b/app/model/db/company.py @@ -19,7 +19,7 @@ from datetime import datetime -from sqlalchemy import DateTime, Index, String, Text +from sqlalchemy import CheckConstraint, DateTime, Index, String, Text from sqlalchemy.dialects.mysql import DATETIME as MySQLDATETIME from sqlalchemy.orm import Mapped, mapped_column @@ -40,6 +40,12 @@ class Company(Base): rsa_publickey: Mapped[str | None] = mapped_column(String(2000)) # Homepage URL homepage: Mapped[str | None] = mapped_column(Text) + # Trustee Corporate Name + trustee_corporate_name: Mapped[str | None] = mapped_column(String(30)) + # Trustee Corporate Number + trustee_corporate_number: Mapped[str | None] = mapped_column(String(20)) + # Trustee Corporate Address + trustee_corporate_address: Mapped[str | None] = mapped_column(String(60)) if engine.name == "mysql": # NOTE:MySQLではDatetime型で小数秒桁を指定しない場合、整数秒しか保存されない @@ -51,6 +57,11 @@ class Company(Base): DateTime, default=naive_utcnow, index=True ) __table_args__ = ( + CheckConstraint( + "((trustee_corporate_name IS NULL AND trustee_corporate_number IS NULL AND trustee_corporate_address IS NULL) " + "OR (trustee_corporate_name IS NOT NULL AND trustee_corporate_number IS NOT NULL AND trustee_corporate_address IS NOT NULL))", + name="ck_company_trustee_fields_complete", + ), # Covering Index Index( "ix_company_covering", @@ -73,6 +84,13 @@ def json(self): "corporate_name": self.corporate_name, "rsa_publickey": self.rsa_publickey, "homepage": self.homepage, + "trustee": { + "corporate_name": self.trustee_corporate_name, + "corporate_number": self.trustee_corporate_number, + "corporate_address": self.trustee_corporate_address, + } + if self.trustee_corporate_name + else None, } FIELDS = { diff --git a/app/model/db/public_info.py b/app/model/db/public_info.py index c826793be..09799b48b 100644 --- a/app/model/db/public_info.py +++ b/app/model/db/public_info.py @@ -49,9 +49,9 @@ class TokenList(Base): # Key Manager key_manager: Mapped[list[str]] = mapped_column(JSON, nullable=False) # Product Type - product_type: Mapped[Literal[1, 2, 3, 4, 5]] = mapped_column( - Integer, nullable=False - ) + product_type: Mapped[int] = mapped_column(Integer, nullable=False) + # Issuer Address + issuer_address: Mapped[str | None] = mapped_column(String(42), nullable=True) def json(self): return { @@ -59,6 +59,7 @@ def json(self): "token_template": self.token_template, "key_manager": self.key_manager, "product_type": self.product_type, + "issuer_address": self.issuer_address, } diff --git a/app/model/schema/company_info.py b/app/model/schema/company_info.py index 13292d58a..fd49baf61 100644 --- a/app/model/schema/company_info.py +++ b/app/model/schema/company_info.py @@ -26,6 +26,7 @@ from app.model.schema.token_coupon import RetrieveCouponTokenResponse from app.model.schema.token_membership import RetrieveMembershipTokenResponse from app.model.schema.token_share import RetrieveShareTokenResponse +from app.model.type.company_list import Trustee ############################ @@ -34,6 +35,7 @@ class CompanyInfo(BaseModel): address: EthereumAddress corporate_name: str + trustee: Trustee | None = None rsa_publickey: str homepage: str diff --git a/app/model/schema/public_info.py b/app/model/schema/public_info.py index 97c472151..bd8a7c552 100644 --- a/app/model/schema/public_info.py +++ b/app/model/schema/public_info.py @@ -36,6 +36,7 @@ class TokenBase(BaseModel): token_address: EthereumAddress key_manager: list[str] + issuer_address: EthereumAddress | None class IbetBondToken(TokenBase): diff --git a/app/model/type/__init__.py b/app/model/type/__init__.py new file mode 100644 index 000000000..9ba39794f --- /dev/null +++ b/app/model/type/__init__.py @@ -0,0 +1,22 @@ +# pyright: reportUnusedImport=false +""" +Copyright BOOSTRY Co., Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and +limitations under the License. + +SPDX-License-Identifier: Apache-2.0 +""" + +from .company_list import CompanyListItem +from .token_list import TokenListItem diff --git a/app/model/type/company_list.py b/app/model/type/company_list.py new file mode 100644 index 000000000..16e0a6e6f --- /dev/null +++ b/app/model/type/company_list.py @@ -0,0 +1,52 @@ +# cSpell:ignore publickey BOOSTRY +""" +Copyright BOOSTRY Co., Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and +limitations under the License. + +SPDX-License-Identifier: Apache-2.0 +""" + +from typing import Any + +from eth_utils.address import to_checksum_address +from pydantic import BaseModel, Field, field_validator + +from app.model.schema.base import EthereumAddress + + +class Trustee(BaseModel): + corporate_name: str = Field(..., min_length=1, max_length=30) + corporate_number: str + corporate_address: str = Field(..., min_length=1, max_length=60) + + +class CompanyListItem(BaseModel): + address: EthereumAddress + corporate_name: str + trustee: Trustee | None = None + rsa_publickey: str + homepage: str = "" + + @field_validator("homepage", mode="before") + @classmethod + def fill_missing_homepage(cls, value: Any) -> str: + if value is None: + return "" + return value + + @field_validator("address") + @classmethod + def convert_to_checksum(cls, value: EthereumAddress) -> EthereumAddress: + return to_checksum_address(value) diff --git a/app/model/type/token_list.py b/app/model/type/token_list.py new file mode 100644 index 000000000..a7e4136c2 --- /dev/null +++ b/app/model/type/token_list.py @@ -0,0 +1,42 @@ +""" +Copyright BOOSTRY Co., Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and +limitations under the License. + +SPDX-License-Identifier: Apache-2.0 +""" + +from typing import Literal + +from eth_utils.address import to_checksum_address +from pydantic import BaseModel, field_validator + +from app.model.schema.base import EthereumAddress + + +class TokenListItem(BaseModel): + token_template: Literal["ibetBond", "ibetShare", "ibetMembership", "ibetCoupon"] + product_type: int + token_address: EthereumAddress + key_manager: list[str] + issuer_address: EthereumAddress | None = None + + @field_validator("token_address", "issuer_address") + @classmethod + def convert_to_checksum( + cls, value: EthereumAddress | None + ) -> EthereumAddress | None: + if value is None: + return value + return to_checksum_address(value) diff --git a/app/utils/company_list.py b/app/utils/company_list.py index 89402bfbd..23c9638cd 100644 --- a/app/utils/company_list.py +++ b/app/utils/company_list.py @@ -30,7 +30,13 @@ class CompanyList: - DEFAULT = {"address": "", "corporate_name": "", "rsa_publickey": "", "homepage": ""} + DEFAULT = { + "address": "", + "corporate_name": "", + "rsa_publickey": "", + "homepage": "", + "trustee": None, + } @classmethod async def get(cls): @@ -123,12 +129,17 @@ def rsa_publickey(self): def homepage(self): return self.obj.get("homepage") + @property + def trustee(self): + return self.obj.get("trustee") + def json(self): return { "address": self.obj.get("address") or "", "corporate_name": self.obj.get("corporate_name") or "", "rsa_publickey": self.obj.get("rsa_publickey") or "", "homepage": self.obj.get("homepage") or "", + "trustee": self.obj.get("trustee"), } def __getitem__(self, key: str): diff --git a/batch/indexer_Company_List.py b/batch/indexer_Company_List.py index 3ab1dbaf1..3d6edfb8d 100644 --- a/batch/indexer_Company_List.py +++ b/batch/indexer_Company_List.py @@ -23,7 +23,7 @@ import time import requests -from eth_utils import to_checksum_address +from pydantic import ValidationError from requests.adapters import HTTPAdapter from sqlalchemy import delete from sqlalchemy.engine.create import create_engine @@ -39,6 +39,7 @@ ) from app.errors import ServiceUnavailable from app.model.db import Company +from app.model.type import CompanyListItem from batch import free_malloc, log process_name = "INDEXER-COMPANY-LIST" @@ -57,6 +58,9 @@ def process(self): LOG.info("Syncing company list") # Get from COMPANY_LIST_URL + if COMPANY_LIST_URL is None: + LOG.warning("COMPANY_LIST_URL is not set") + return try: with requests.Session() as session: adapter = HTTPAdapter(max_retries=Retry(3, allowed_methods=["GET"])) @@ -91,34 +95,20 @@ def process(self): # Insert company list for i, company in enumerate(company_list_json): - address = company.get("address", "") - corporate_name = company.get("corporate_name", "") - rsa_publickey = company.get("rsa_publickey", "") - homepage = ( - company.get("homepage") - if company.get("homepage") is not None - else "" - ) + try: + company_list_item = CompanyListItem.model_validate(company) # type: ignore[arg-type] + except (ValidationError, ValueError): + LOG.notice(f"Invalid company data: index={i} company={company}") + continue + if ( - not isinstance(address, str) - or not isinstance(corporate_name, str) - or not isinstance(rsa_publickey, str) - or not isinstance(homepage, str) + company_list_item.address + and company_list_item.corporate_name + and company_list_item.rsa_publickey ): - LOG.notice(f"Invalid type: index={i}") - continue - if address and corporate_name and rsa_publickey: - try: - address = to_checksum_address(address) - except ValueError: - LOG.notice(f"Invalid address: index={i} address={address}") - continue self.__sink_on_company( db_session=db_session, - address=to_checksum_address(address), - corporate_name=corporate_name, - rsa_publickey=rsa_publickey, - homepage=homepage, + company_list_item=company_list_item, ) else: LOG.notice(f"Missing required field: index={i}") @@ -135,16 +125,21 @@ def process(self): @staticmethod def __sink_on_company( db_session: Session, - address: str, - corporate_name: str, - rsa_publickey: str, - homepage: str, + company_list_item: CompanyListItem, ): _company = Company() - _company.address = address - _company.corporate_name = corporate_name - _company.rsa_publickey = rsa_publickey - _company.homepage = homepage + _company.address = company_list_item.address + _company.corporate_name = company_list_item.corporate_name + _company.rsa_publickey = company_list_item.rsa_publickey + _company.homepage = company_list_item.homepage + if company_list_item.trustee: + _company.trustee_corporate_name = company_list_item.trustee.corporate_name + _company.trustee_corporate_number = ( + company_list_item.trustee.corporate_number + ) + _company.trustee_corporate_address = ( + company_list_item.trustee.corporate_address + ) db_session.merge(_company) diff --git a/batch/indexer_PublicInfo_TokenList.py b/batch/indexer_PublicInfo_TokenList.py index 6a62be199..c0a31634e 100644 --- a/batch/indexer_PublicInfo_TokenList.py +++ b/batch/indexer_PublicInfo_TokenList.py @@ -23,7 +23,7 @@ import time import requests -from eth_utils import to_checksum_address +from pydantic import ValidationError from requests.adapters import HTTPAdapter from sqlalchemy import delete from sqlalchemy.engine.create import create_engine @@ -39,6 +39,7 @@ ) from app.errors import ServiceUnavailable from app.model.db import TokenList +from app.model.type.token_list import TokenListItem from batch import free_malloc, log process_name = "INDEXER-PUBLIC-INFO-TOKEN-LIST" @@ -58,6 +59,9 @@ def process(self): # Get from TOKEN_LIST_URL try: + if TOKEN_LIST_URL is None: + LOG.warning("TOKEN_LIST_URL is not set") + return with requests.Session() as session: adapter = HTTPAdapter(max_retries=Retry(3, allowed_methods=["GET"])) session.mount("http://", adapter) @@ -89,35 +93,15 @@ def process(self): # Insert token list for i, token in enumerate(token_list_json): - token_address = token.get("token_address", None) - token_template = token.get("token_template", None) - key_manager = token.get("key_manager", None) - product_type = token.get("product_type", None) - - if ( - not isinstance(token_address, str) - or not isinstance(token_template, str) - or not isinstance(key_manager, list) - or not isinstance(product_type, int) - ): - LOG.notice( - f"Invalid type: token_address={token_address}, token_template={token_template}, key_manager={key_manager}, product_type={product_type}" - ) - continue try: - token_address = to_checksum_address(token_address) - except ValueError: - LOG.notice( - f"Invalid address: index={i} token_address={token_address}" - ) + token_list_item = TokenListItem.model_validate(token) + except (ValidationError, ValueError): + LOG.notice(f"Invalid token data: index={i} token={token}") continue self.__sink_on_token_list( db_session=db_session, - token_address=token_address, - token_template=token_template, - key_manager=key_manager, - product_type=product_type, + token_list_item=token_list_item, ) db_session.commit() @@ -132,16 +116,14 @@ def process(self): @staticmethod def __sink_on_token_list( db_session: Session, - token_address: str, - token_template: str, - key_manager: list[str], - product_type: int, + token_list_item: TokenListItem, ): _token_list = TokenList() - _token_list.token_address = token_address - _token_list.token_template = token_template - _token_list.key_manager = key_manager - _token_list.product_type = product_type + _token_list.token_address = token_list_item.token_address + _token_list.token_template = token_list_item.token_template + _token_list.key_manager = token_list_item.key_manager + _token_list.product_type = token_list_item.product_type + _token_list.issuer_address = token_list_item.issuer_address db_session.merge(_token_list) diff --git a/docs/ibet_wallet_api.yaml b/docs/ibet_wallet_api.yaml index b3ae2669a..6761f8b8f 100644 --- a/docs/ibet_wallet_api.yaml +++ b/docs/ibet_wallet_api.yaml @@ -6663,6 +6663,10 @@ components: corporate_name: type: string title: Corporate Name + trustee: + anyOf: + - $ref: '#/components/schemas/Trustee' + - type: 'null' rsa_publickey: type: string title: Rsa Publickey @@ -8284,6 +8288,11 @@ components: type: string type: array title: Key Manager + issuer_address: + anyOf: + - type: string + - type: 'null' + title: Issuer Address token_template: type: string const: ibetBond @@ -8296,6 +8305,7 @@ components: required: - token_address - key_manager + - issuer_address - token_template - product_type title: IbetBondToken @@ -8309,6 +8319,11 @@ components: type: string type: array title: Key Manager + issuer_address: + anyOf: + - type: string + - type: 'null' + title: Issuer Address token_template: type: string const: ibetCoupon @@ -8321,6 +8336,7 @@ components: required: - token_address - key_manager + - issuer_address - token_template - product_type title: IbetCouponToken @@ -8343,6 +8359,11 @@ components: type: string type: array title: Key Manager + issuer_address: + anyOf: + - type: string + - type: 'null' + title: Issuer Address token_template: type: string const: ibetMembership @@ -8355,6 +8376,7 @@ components: required: - token_address - key_manager + - issuer_address - token_template - product_type title: IbetMembershipToken @@ -8411,6 +8433,11 @@ components: type: string type: array title: Key Manager + issuer_address: + anyOf: + - type: string + - type: 'null' + title: Issuer Address token_template: type: string const: ibetShare @@ -8428,6 +8455,7 @@ components: required: - token_address - key_manager + - issuer_address - token_template - product_type title: IbetShareToken @@ -10022,6 +10050,10 @@ components: corporate_name: type: string title: Corporate Name + trustee: + anyOf: + - $ref: '#/components/schemas/Trustee' + - type: 'null' rsa_publickey: type: string title: Rsa Publickey @@ -11569,6 +11601,27 @@ components: - created - source_event title: TransferWithMessage + Trustee: + properties: + corporate_name: + type: string + maxLength: 30 + minLength: 1 + title: Corporate Name + corporate_number: + type: string + title: Corporate Number + corporate_address: + type: string + maxLength: 60 + minLength: 1 + title: Corporate Address + type: object + required: + - corporate_name + - corporate_number + - corporate_address + title: Trustee TxData: properties: hash: diff --git a/migrations/versions/835dd5b51e23_v25_12_0_feature_1692.py b/migrations/versions/835dd5b51e23_v25_12_0_feature_1692.py new file mode 100644 index 000000000..92344880f --- /dev/null +++ b/migrations/versions/835dd5b51e23_v25_12_0_feature_1692.py @@ -0,0 +1,66 @@ +"""v25_12_0_feature_1692 + +Revision ID: 835dd5b51e23 +Revises: a5e395bf46a9 +Create Date: 2025-11-12 19:27:29.889267 + +""" + +from alembic import op +import sqlalchemy as sa + + +from app.database import get_db_schema + +# revision identifiers, used by Alembic. +revision = "835dd5b51e23" +down_revision = "a5e395bf46a9" +branch_labels = None +depends_on = None + + +def upgrade(): + connection = op.get_bind() + + op.add_column( + "company", + sa.Column("trustee_corporate_name", sa.String(length=30), nullable=True), + schema=get_db_schema(), + ) + op.add_column( + "company", + sa.Column("trustee_corporate_number", sa.String(length=20), nullable=True), + schema=get_db_schema(), + ) + op.add_column( + "company", + sa.Column("trustee_corporate_address", sa.String(length=60), nullable=True), + schema=get_db_schema(), + ) + op.add_column( + "token_list", + sa.Column("issuer_address", sa.String(length=42), nullable=True), + schema=get_db_schema(), + ) + op.create_check_constraint( + "ck_company_trustee_fields_complete", + "company", + "((trustee_corporate_name IS NULL AND trustee_corporate_number IS NULL AND trustee_corporate_address IS NULL) " + "OR (trustee_corporate_name IS NOT NULL AND trustee_corporate_number IS NOT NULL AND trustee_corporate_address IS NOT NULL))", + schema=get_db_schema(), + ) + + +def downgrade(): + connection = op.get_bind() + + op.drop_constraint( + "ck_company_trustee_fields_complete", + "company", + type_="check", + schema=get_db_schema(), + ) + op.drop_column("token_list", "issuer_address", schema=get_db_schema()) + op.drop_column("company", "trustee_corporate_address", schema=get_db_schema()) + op.drop_column("company", "trustee_corporate_number", schema=get_db_schema()) + op.drop_column("company", "trustee_corporate_name", schema=get_db_schema()) diff --git a/pyproject.toml b/pyproject.toml index 70e9df097..bafe895b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,10 +2,8 @@ name = "ibet-Wallet-API" version = "25.9" description = "RPC services that provides utility functions for building a wallet system on ibet-Network." -authors = [ - {name = "BOOSTRY Co., Ltd.", email = "dev@boostry.co.jp"}, -] -license = {text = "Apache License, Version 2.0"} +authors = [{ name = "BOOSTRY Co., Ltd.", email = "dev@boostry.co.jp" }] +license = { text = "Apache License, Version 2.0" } requires-python = "==3.12.9" dependencies = [ "boto3~=1.37.0", @@ -41,6 +39,7 @@ dependencies = [ "opentelemetry-instrumentation-sqlalchemy>=0.54b0,<1.0.0", "opentelemetry-exporter-otlp-proto-grpc>=1.33.1,<2.0.0", "requests>=2.32.3", + "python-dotenv~=1.1.0", ] [tool.uv] @@ -71,7 +70,7 @@ ibet-explorer = [ ] [tool.uv.sources] -ibet-wallet-api-explorer = { path = "cmd/explorer", editable = true} +ibet-wallet-api-explorer = { path = "cmd/explorer", editable = true } [tool.ruff] line-length = 88 @@ -113,9 +112,7 @@ combine-as-imports = true [tool.pytest.ini_options] addopts = "-m 'not alembic'" -markers = [ - "alembic: tests for alembic", -] +markers = ["alembic: tests for alembic"] asyncio_default_fixture_loop_scope = "session" [tool.coverage.run] @@ -126,5 +123,5 @@ include = [ "app/model/**/*", "app/utils/**/*", "batch/**/*", - "cmd/**/*" + "cmd/**/*", ] diff --git a/tests/app/company_info_ListAllCompanies_test.py b/tests/app/company_info_ListAllCompanies_test.py index 61629b32b..fc333f1e9 100644 --- a/tests/app/company_info_ListAllCompanies_test.py +++ b/tests/app/company_info_ListAllCompanies_test.py @@ -55,6 +55,54 @@ class TestListAllCompanies: # テスト対象API apiurl = "/Companies" + RSA_PUBLIC_KEY = ( + "-----BEGIN PUBLIC KEY-----\n" + "MIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\n" + "p7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n" + "3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\n" + "TN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n" + "98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n" + "+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\n" + "tB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\n" + "tIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\n" + "VuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\n" + "QIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\n" + "cJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\n" + "dSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\n" + "rFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\n" + "pFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n" + "6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\n" + "AiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\n" + "ItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\n" + "KuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\n" + "u1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n" + "7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\n" + "knChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\n" + "JQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\n" + "Lj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\n" + "I/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\n" + "eunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\n" + "vBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\n" + "SDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n" + "4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n" + "-----END PUBLIC KEY-----" + ) + + @classmethod + def _expected_company( + cls, + address: str, + homepage: str = "https://www.aaaa.com/jp/", + trustee: dict[str, str] | None = None, + ) -> dict[str, object]: + return { + "address": address, + "corporate_name": "株式会社DEMO", + "rsa_publickey": cls.RSA_PUBLIC_KEY, + "homepage": homepage, + "trustee": trustee, + } + @staticmethod def _bond_attribute(exchange_address, personal_info_address): attribute = { @@ -235,24 +283,9 @@ def test_normal_1_1( # 検証 assumed_body = [ - { - "address": eth_account["issuer"]["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - }, - { - "address": eth_account["deployer"]["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - }, - { - "address": eth_account["agent"]["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "", - }, + self._expected_company(eth_account["issuer"]["account_address"]), + self._expected_company(eth_account["deployer"]["account_address"]), + self._expected_company(eth_account["agent"]["account_address"], ""), ] assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} @@ -271,7 +304,7 @@ def test_normal_1_2(self, client: TestClient, session: Session, shared_contract) _company = Company() _company.address = eth_account["issuer"]["account_address"] _company.corporate_name = "株式会社DEMO" - _company.rsa_publickey = "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----" + _company.rsa_publickey = self.RSA_PUBLIC_KEY _company.homepage = "https://www.aaaa.com/jp/" session.add(_company) @@ -283,7 +316,7 @@ def test_normal_1_2(self, client: TestClient, session: Session, shared_contract) _company = Company() _company.address = eth_account["deployer"]["account_address"] _company.corporate_name = "株式会社DEMO" - _company.rsa_publickey = "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----" + _company.rsa_publickey = self.RSA_PUBLIC_KEY _company.homepage = "https://www.aaaa.com/jp/" session.add(_company) session.commit() @@ -308,18 +341,56 @@ def test_normal_1_2(self, client: TestClient, session: Session, shared_contract) # 検証 assumed_body = [ - { - "address": eth_account["issuer"]["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - }, - { - "address": eth_account["deployer"]["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - }, + self._expected_company(eth_account["issuer"]["account_address"]), + self._expected_company(eth_account["deployer"]["account_address"]), + ] + assert resp.status_code == 200 + assert resp.json()["meta"] == {"code": 200, "message": "OK"} + assert resp.json()["data"] == assumed_body + + # + # Returns trustee information when the registered company data contains it (DB) + # Indexer batch data is not used + @mock.patch("app.config.APP_ENV", "dev") + @mock.patch("app.config.COMPANY_LIST_LOCAL_MODE", False) + def test_normal_1_3_company_with_trustee( + self, client: TestClient, session: Session, shared_contract + ): + issuer = eth_account["issuer"] + + trustee_info = { + "corporate_name": "株式会社TRUSTEE", + "corporate_number": "1234567890123", + "corporate_address": "東京都港区1-1-1", + } + + company = Company() + company.address = issuer["account_address"] + company.corporate_name = "株式会社DEMO" + company.rsa_publickey = self.RSA_PUBLIC_KEY + company.homepage = "https://www.aaaa.com/jp/" + company.trustee_corporate_name = trustee_info["corporate_name"] + company.trustee_corporate_number = trustee_info["corporate_number"] + company.trustee_corporate_address = trustee_info["corporate_address"] + session.add(company) + session.commit() + + token_list = self.tokenlist_contract() + config.TOKEN_LIST_CONTRACT_ADDRESS = token_list["address"] + + exchange_address = to_checksum_address( + shared_contract["IbetCouponExchange"]["address"] + ) + attribute = self._coupon_attribute(exchange_address) + token = issue_coupon_token(issuer, attribute) + coupon_register_list(issuer, token, token_list) + self.list_token(session, token) + session.commit() + + resp = client.get(self.apiurl) + + assumed_body = [ + self._expected_company(issuer["account_address"], trustee=trustee_info) ] assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} @@ -406,18 +477,8 @@ def test_normal_3_1( # 検証 assumed_body = [ - { - "address": issuer_1["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - }, - { - "address": issuer_2["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - }, + self._expected_company(issuer_1["account_address"]), + self._expected_company(issuer_2["account_address"]), ] assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} @@ -474,14 +535,7 @@ def test_normal_3_2( resp = client.get(self.apiurl, params=query_string) # 検証 - assumed_body = [ - { - "address": issuer_1["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - } - ] + assumed_body = [self._expected_company(issuer_1["account_address"])] assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} assert resp.json()["data"] == assumed_body @@ -548,14 +602,7 @@ def test_normal_4_1( resp = client.get(self.apiurl, params=query_string) # 検証 - assumed_body = [ - { - "address": issuer_1["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - } - ] + assumed_body = [self._expected_company(issuer_1["account_address"])] assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} assert resp.json()["data"] == assumed_body @@ -625,14 +672,7 @@ def test_normal_4_2( resp = client.get(self.apiurl, params=query_string) # 検証 - assumed_body = [ - { - "address": issuer_1["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - } - ] + assumed_body = [self._expected_company(issuer_1["account_address"])] assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} assert resp.json()["data"] == assumed_body @@ -698,14 +738,7 @@ def test_normal_4_3( resp = client.get(self.apiurl, params=query_string) # 検証 - assumed_body = [ - { - "address": issuer_1["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - } - ] + assumed_body = [self._expected_company(issuer_1["account_address"])] assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} assert resp.json()["data"] == assumed_body @@ -771,14 +804,7 @@ def test_normal_4_4( resp = client.get(self.apiurl, params=query_string) # 検証 - assumed_body = [ - { - "address": issuer_1["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - } - ] + assumed_body = [self._expected_company(issuer_1["account_address"])] assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} assert resp.json()["data"] == assumed_body diff --git a/tests/app/company_info_ListAllCompanyTokens_test.py b/tests/app/company_info_ListAllCompanyTokens_test.py index a39e76bad..4a2c279e7 100644 --- a/tests/app/company_info_ListAllCompanyTokens_test.py +++ b/tests/app/company_info_ListAllCompanyTokens_test.py @@ -43,6 +43,7 @@ class TestListAllCompanyTokens: # テスト対象API apiurl = "/Companies/{eth_address}/Tokens" + RSA_PUBLIC_KEY = """-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtestPublicKeyExample\n-----END PUBLIC KEY-----""" @staticmethod def _bond_attribute(exchange_address, personal_info_address): diff --git a/tests/app/company_info_RetrieveCompanyInfo_test.py b/tests/app/company_info_RetrieveCompanyInfo_test.py index 5692aee74..8fc58661c 100644 --- a/tests/app/company_info_RetrieveCompanyInfo_test.py +++ b/tests/app/company_info_RetrieveCompanyInfo_test.py @@ -22,6 +22,7 @@ from fastapi.testclient import TestClient from sqlalchemy.orm import Session +# cspell: ignore apiurl publickey Ibet ethereum BOOSTRY from app.model.db import Company, IDXBondToken, IDXShareToken from tests.account_config import eth_account @@ -30,6 +31,55 @@ class TestRetrieveCompanyInfo: # テスト対象API apiurl_base = "/Companies/" + RSA_PUBLIC_KEY = """-----BEGIN PUBLIC KEY----- +MIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC +p7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX +3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd +TN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN +98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl ++zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb +tB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3 +tIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo +VuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh +QIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O +cJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2 +dSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp +rFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb +pFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G +6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem +AiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1 +ItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU +KuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5 +u1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U +7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh +knChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/ +JQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg +Lj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt +I/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8 +eunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j +vBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q +SDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr +4McG/dPyTRFv9mYtFPpyV50CAwEAAQ== +-----END PUBLIC KEY-----""" + + @classmethod + def _expected_company( + cls, + address: str, + *, + homepage: str = "https://www.aaaa.com/jp/", + trustee: dict[str, str] | None = None, + personal_info_addresses: list[str] | None = None, + ) -> dict[str, object]: + return { + "address": address, + "corporate_name": "株式会社DEMO", + "rsa_publickey": cls.RSA_PUBLIC_KEY, + "homepage": homepage, + "trustee": trustee, + "in_use_personal_info_addresses": list(personal_info_addresses or []), + } + ########################################################################### # Normal Case ########################################################################### @@ -44,13 +94,7 @@ def test_normal_1_1( apiurl = self.apiurl_base + eth_address resp = client.get(apiurl) - assumed_body = { - "address": eth_account["issuer"]["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - "in_use_personal_info_addresses": [], - } + assumed_body = self._expected_company(eth_account["issuer"]["account_address"]) assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} @@ -66,13 +110,9 @@ def test_normal_1_2( apiurl = self.apiurl_base + eth_address resp = client.get(apiurl) - assumed_body = { - "address": eth_account["agent"]["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "", - "in_use_personal_info_addresses": [], - } + assumed_body = self._expected_company( + eth_account["agent"]["account_address"], homepage="" + ) assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} @@ -86,13 +126,13 @@ def test_normal_2(self, client: TestClient, session: Session): _company = Company() _company.address = eth_account["issuer"]["account_address"] _company.corporate_name = "株式会社DEMO" - _company.rsa_publickey = "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----" + _company.rsa_publickey = self.RSA_PUBLIC_KEY _company.homepage = "https://www.aaaa.com/jp/" session.add(_company) _company = Company() _company.address = eth_account["deployer"]["account_address"] _company.corporate_name = "株式会社DEMO" - _company.rsa_publickey = "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----" + _company.rsa_publickey = self.RSA_PUBLIC_KEY _company.homepage = "https://www.aaaa.com/jp/" session.add(_company) session.commit() @@ -101,13 +141,7 @@ def test_normal_2(self, client: TestClient, session: Session): apiurl = self.apiurl_base + eth_address resp = client.get(apiurl) - assumed_body = { - "address": eth_account["issuer"]["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - "in_use_personal_info_addresses": [], - } + assumed_body = self._expected_company(eth_account["issuer"]["account_address"]) assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} @@ -132,7 +166,7 @@ def test_normal_3(self, client: TestClient, session: Session): _company = Company() _company.address = issuer_address _company.corporate_name = "株式会社DEMO" - _company.rsa_publickey = "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----" + _company.rsa_publickey = self.RSA_PUBLIC_KEY _company.homepage = "https://www.aaaa.com/jp/" session.add(_company) @@ -151,10 +185,6 @@ def test_normal_3(self, client: TestClient, session: Session): idx_token.owner_address = issuer_address idx_token.token_address = token_2 idx_token.token_template = "IbetShare" - idx_token.face_value_currency = "" - idx_token.interest_payment_currency = "" - idx_token.redemption_value_currency = "" - idx_token.base_fx_rate = 0.0 idx_token.personal_info_address = personal_info_address_2 session.add(idx_token) @@ -188,17 +218,49 @@ def test_normal_3(self, client: TestClient, session: Session): resp = client.get(apiurl) # Assertion - assumed_body = { - "address": eth_account["issuer"]["account_address"], - "corporate_name": "株式会社DEMO", - "rsa_publickey": "-----BEGIN PUBLIC KEY-----\nMIIFIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIFCgKCBQEAtiBUQ2vdYvIqnCdUzKIC\np7jIYVtJy8KGniy6ktE0DTcYG70pFYkGDyI043meSB6Lkk0rNWaKBn3wyz4lx2oX\n3JySFyXR4vE4DNTEKS0htImO4RuK4M50v7LOfB8VphXzu9JkdVuN8LuMx6L6dhsd\nTN/aUvXULvjOy9AJekl24s44w4BgEfGj/uBYNAmiNmpM3lnIdJOg1T+4aEShHyVN\n98dv1DZ1Hh0YhMmqHqRGIzAQ6pKoly2xSVEmwBV4l2O3XEZ8ErVNgHdi6BRQrIBl\n+zQn5TysSGv5TIO1ahztUIygrzX7aEa+QnF1ROBBJ8yBW0VjjKI2Oh3wDT8ROaWb\ntB7gYQlMX9St/HJvGKaDKPDGurMFsEZeeD9Y4GWlFFkQplKIC3Kr4u6TIxcAZyG3\ntIz1IZomm/Lh9eiFiAbOMLYPdPCzh1A6uCRoJuqrNXYbE2egpLsKSkEe4VAcdaPo\nVuOXLpbDaew0cvXQR5IklHGGPPGVqQV1cmJWIqF5b1bzqziu2No+TLZceUd3N9Eh\nQIYVG4rbX2I/x2/WFeG5RHl9Zc/iSUomUqpnGY3ved61smb7uklF/7ueyj8TIm7O\ncJxhYjj+szXxV2RJyxLvSPzloQ4GDI9wd0zlya2CoYgAONJ7wm82b1LrLLhfpns2\ndSsN8htFX83p0dNn6f8ssKgA3rFbFFnBTQyFxlHO/An4qZflXtk1GsEc56g3mJFp\nrFANLpyum5mkHo9TbkL3K4mRGM1DGcLXWJwFUjDxS/OvjzDXw2dNiyrPeClvTpAb\npFfw/zqVd7ZrnTFg26bpUmM8flc6IRji49veOOMM7jMJN7mmu/pLd/Pg22oez23G\n6QsPDvqqXgjyg1NGo7natX6gyAYMpWZWOHj+Y2lffzcJYUo+wPFt/xNkAuCcDZem\nAiicfsGfniE67G1nfmwkykVwk9rTFCO8SnFei8wMpEAMYETYOS4ldavLfhY6mrF1\nItA5mlkMI84v3ROqPSp3s6F9oGYzPi5zMcgc67wIFGgaPb6i8+puui6BUbj83qOU\nKuKoQAGe9+NRnAkWSpbX07cX6XkPieTkBHEYfGaQTQOnsSs++PIk3kH5Arfjk0R5\nu1ZluzVdOXUn8D5WPfh9UFzqyXzo1HOIHxDkPejpPlNzO1w6qVQC+UiR/R2iug/U\n7StoLz476tQOwbfmnzUA6AbOKjRgN5laRoBac4BbGPJisGysOBruL7lgrw0XVtnh\nknChXfSYezxz/EtiGmO40HKAGudHDkz4gmPDkF4wlIyfDbQZOnNohz4zuOjr9Yi/\nJQVpqKxug2LXyJp38UaxL1LIT6ZyJSsaSrKAB21tsYAbksyPCVS6L6jkz8lsnlYg\nLj7lj6HQcbN8WO72+Z8Ddj/cPXJwEq4OTbtkPiPdcvSZjcBR9f3TmrQjDG0ROspt\nI/m4KhWfm7ed+eZKA1IqygFRyi6i0w6p+VbeBNgXqAiQI5GkDHqAiqv4OVyZoQB8\neunu5qM49r6bw6DJCqlg6lZDCptdKWtNBo9zgEegrJ/3oVI7x0kE7KQ4gPo5uY7j\nvBqGwjw0fIGPjrP/JKIQqGvm/ETwlfPwVbmCsvEHbqEY+6f84TnmolgjPMnbar6Q\nSDuvqVApY7yNCEue5X0pLRAd+287VBVVvsOsZVOSj02w4PGIlsg2Y33BbcpwESzr\n4McG/dPyTRFv9mYtFPpyV50CAwEAAQ==\n-----END PUBLIC KEY-----", - "homepage": "https://www.aaaa.com/jp/", - "in_use_personal_info_addresses": [ + assumed_body = self._expected_company( + eth_account["issuer"]["account_address"], + personal_info_addresses=[ "0x0000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000002", ], + ) + + assert resp.status_code == 200 + assert resp.json()["meta"] == {"code": 200, "message": "OK"} + assert resp.json()["data"] == assumed_body + + # Normal_4 + # The issuer has trustee information registered in DB. + @mock.patch("app.config.APP_ENV", "dev") + @mock.patch("app.config.COMPANY_LIST_LOCAL_MODE", False) + def test_normal_4(self, client: TestClient, session: Session): + issuer_address = eth_account["issuer"]["account_address"] + + trustee_info = { + "corporate_name": "株式会社TRUSTEE", + "corporate_number": "1234567890123", + "corporate_address": "東京都千代田区1-1-1", } + _company = Company() + _company.address = issuer_address + _company.corporate_name = "株式会社DEMO" + _company.rsa_publickey = self.RSA_PUBLIC_KEY + _company.homepage = "https://www.aaaa.com/jp/" + _company.trustee_corporate_name = trustee_info["corporate_name"] + _company.trustee_corporate_number = trustee_info["corporate_number"] + _company.trustee_corporate_address = trustee_info["corporate_address"] + session.add(_company) + session.commit() + + resp = client.get(self.apiurl_base + issuer_address) + + assumed_body = self._expected_company( + issuer_address, + trustee=trustee_info, + ) + assert resp.status_code == 200 assert resp.json()["meta"] == {"code": 200, "message": "OK"} assert resp.json()["data"] == assumed_body diff --git a/tests/app/model/type/test_company_list.py b/tests/app/model/type/test_company_list.py new file mode 100644 index 000000000..10854765e --- /dev/null +++ b/tests/app/model/type/test_company_list.py @@ -0,0 +1,45 @@ +# cSpell:ignore publickey + +import pytest +from eth_utils.address import to_checksum_address +from pydantic import ValidationError + +from app.model.type.company_list import CompanyListItem + + +def test_company_list_item_address_is_converted_to_checksum(): + raw_address = "0x000000000000000000000000000000000000dead" + + item = CompanyListItem.model_validate( + { + "address": raw_address, + "corporate_name": "Example Corp", + "rsa_publickey": "dummy_key", + } + ) + + assert item.address == to_checksum_address(raw_address) + + +def test_company_list_item_rejects_invalid_address(): + with pytest.raises(ValidationError): + CompanyListItem( + address="invalid-address", + corporate_name="Example Corp", + rsa_publickey="dummy_key", + ) + + +def test_company_list_item_homepage_none_defaults_to_empty_string(): + raw_address = "0x000000000000000000000000000000000000dead" + + item = CompanyListItem.model_validate( + { + "address": raw_address, + "corporate_name": "Example Corp", + "rsa_publickey": "dummy_key", + "homepage": None, + } + ) + + assert item.homepage == "" diff --git a/tests/app/model/type/test_token_list.py b/tests/app/model/type/test_token_list.py new file mode 100644 index 000000000..5ecb5dc40 --- /dev/null +++ b/tests/app/model/type/test_token_list.py @@ -0,0 +1,47 @@ +# cSpell:ignore ibet +import pytest +from eth_utils.address import to_checksum_address +from pydantic import ValidationError + +from app.model.type.token_list import TokenListItem + + +def test_token_list_item_addresses_are_converted_to_checksum(): + raw_token_address = "0x000000000000000000000000000000000000dead" + raw_issuer_address = "0x000000000000000000000000000000000000beef" + + item = TokenListItem( + token_template="ibetBond", + product_type=0, + token_address=raw_token_address, + key_manager=[], + issuer_address=raw_issuer_address, + ) + + assert item.token_address == to_checksum_address(raw_token_address) + assert item.issuer_address == to_checksum_address(raw_issuer_address) + + +@pytest.mark.parametrize( + "token_address", + [ + "invalid-address", + "0x123", # too short + ], +) +@pytest.mark.parametrize( + "issuer_address", + [ + "invalid-address", + "0x456", # too short + ], +) +def test_token_list_item_rejects_invalid_addresses(token_address, issuer_address): + with pytest.raises(ValidationError): + TokenListItem( + token_template="ibetBond", + product_type=0, + token_address=token_address, + key_manager=[], + issuer_address=issuer_address, + ) diff --git a/tests/app/public_info_ListAllPublicListedTokens_test.py b/tests/app/public_info_ListAllPublicListedTokens_test.py index 8ad5bbad7..6395ebd5e 100644 --- a/tests/app/public_info_ListAllPublicListedTokens_test.py +++ b/tests/app/public_info_ListAllPublicListedTokens_test.py @@ -40,6 +40,7 @@ class TestListAllPublicListedTokens: token_address_3 = "0xe883a6f441AD5682d37dF31D34fc012bCB07A743" token_address_4 = "0xe883A6F441AD5682d37dF31d34fc012BcB07a744" token_address_5 = "0xe883A6F441AD5682d37df31D34fc012BcB07A745" + issuer_address_1 = "0x1234567890aBcDEF1234567890abCDef12345678" # <Normal_1> # 0 Record @@ -106,30 +107,35 @@ def test_normal_2(self, client: TestClient, session: Session): "product_type": 1, "token_address": self.token_address_1, "token_template": "ibetBond", + "issuer_address": None, }, { "key_manager": ["0000000000000"], "product_type": 1, "token_address": self.token_address_2, "token_template": "ibetBond", + "issuer_address": None, }, { "key_manager": ["1111111111111"], "product_type": 5, "token_address": self.token_address_3, "token_template": "ibetShare", + "issuer_address": None, }, { "key_manager": [], "product_type": 1, "token_address": self.token_address_4, "token_template": "ibetMembership", + "issuer_address": None, }, { "key_manager": [], "product_type": 1, "token_address": self.token_address_5, "token_template": "ibetCoupon", + "issuer_address": None, }, ], } @@ -191,12 +197,14 @@ def test_normal_3_1( "product_type": 1, "token_address": self.token_address_1, "token_template": "ibetBond", + "issuer_address": None, }, { "key_manager": ["0000000000000"], "product_type": 1, "token_address": self.token_address_2, "token_template": "ibetBond", + "issuer_address": None, }, ], } @@ -258,6 +266,7 @@ def test_normal_3_2( "product_type": 5, "token_address": self.token_address_3, "token_template": "ibetShare", + "issuer_address": None, }, ], } @@ -319,6 +328,7 @@ def test_normal_3_3( "product_type": 1, "token_address": self.token_address_4, "token_template": "ibetMembership", + "issuer_address": None, }, ], } @@ -380,6 +390,7 @@ def test_normal_3_4( "product_type": 1, "token_address": self.token_address_5, "token_template": "ibetCoupon", + "issuer_address": None, }, ], } @@ -424,6 +435,7 @@ def test_normal_4( "product_type": 5, "token_address": self.token_address_3, "token_template": "ibetShare", + "issuer_address": None, }, ], } @@ -468,10 +480,45 @@ def test_normal_5( "product_type": 1, "token_address": self.token_address_1, "token_template": "ibetBond", + "issuer_address": None, }, ], } + # <Normal_6> + # issuer_address (not null) + def test_normal_6( + self, + client: TestClient, + session: Session, + ): + # Prepare data + _token_list_item = TokenList() + _token_list_item.token_address = self.token_address_1 + _token_list_item.token_template = "ibetBond" + _token_list_item.key_manager = ["0000000000000"] + _token_list_item.product_type = 1 + _token_list_item.issuer_address = self.issuer_address_1 + session.add(_token_list_item) + session.commit() + + resp = client.get(self.api_url, params={}) + + assert resp.status_code == 200 + assert resp.json()["meta"] == {"code": 200, "message": "OK"} + assert resp.json()["data"] == { + "result_set": {"count": 1, "limit": None, "offset": None, "total": 1}, + "tokens": [ + { + "key_manager": ["0000000000000"], + "product_type": 1, + "token_address": self.token_address_1, + "token_template": "ibetBond", + "issuer_address": self.issuer_address_1, + } + ], + } + ########################################################################### # Error ########################################################################### diff --git a/tests/batch/indexer_Company_List_test.py b/tests/batch/indexer_Company_List_test.py index bac54d095..9296dc34e 100644 --- a/tests/batch/indexer_Company_List_test.py +++ b/tests/batch/indexer_Company_List_test.py @@ -56,6 +56,7 @@ def json(self) -> object: return self.data +@mock.patch("batch.indexer_Company_List.COMPANY_LIST_URL", "https://localhost") @pytest.mark.asyncio class TestProcessor: ########################################################################### @@ -861,6 +862,139 @@ async def test_normal_5_2(self, mock_get, processor, session, caplog): ) ) + # + # trustee情報あり + @mock.patch("requests.Session.get") + async def test_normal_6_1(self, mock_get, processor, session): + # Prepare data + _company = Company() + _company.address = "0x01" + _company.corporate_name = "dummy1" + _company.rsa_publickey = "dummy1" + _company.homepage = "dummy1" + session.add(_company) + _company = Company() + _company.address = "0x02" + _company.corporate_name = "dummy2" + _company.rsa_publickey = "dummy2" + _company.homepage = "dummy2" + session.add(_company) + _company = Company() + _company.address = "0x03" + _company.corporate_name = "dummy3" + _company.rsa_publickey = "dummy3" + _company.homepage = "dummy3" + session.add(_company) + session.commit() + + # Mock + mock_get.side_effect = [ + MockResponse( + [ + { + "address": "0x0123456789abcdef0123456789abcdef00000003", + "corporate_name": "株式会社テスト3", + "rsa_publickey": "RSA-KEY 3", + "homepage": "http://test3.com", + "trustee": { + "corporate_name": "受託者株式会社", + "corporate_number": "1234567890123", + "corporate_address": "東京都千代田区1-1-1", + }, + } + ] + ) + ] + + # Run target process + processor.process() + + # Assertion + _company_list: Sequence[Company] = session.scalars( + select(Company).order_by(Company.created) + ).all() + assert len(_company_list) == 1 + _company = _company_list[0] + assert ( + _company.address == "0x0123456789ABcDeF0123456789AbcdEF00000003" + ) # checksum address + assert _company.corporate_name == "株式会社テスト3" + assert _company.rsa_publickey == "RSA-KEY 3" + assert _company.homepage == "http://test3.com" + assert _company.trustee_corporate_name == "受託者株式会社" + assert _company.trustee_corporate_number == "1234567890123" + assert _company.trustee_corporate_address == "東京都千代田区1-1-1" + + # + # trustee情報不正 -> Insert SKIP + @mock.patch("requests.Session.get") + async def test_normal_6_2(self, mock_get, processor, session): + # Prepare data + _company = Company() + _company.address = "0x01" + _company.corporate_name = "dummy1" + _company.rsa_publickey = "dummy1" + _company.homepage = "dummy1" + session.add(_company) + _company = Company() + _company.address = "0x02" + _company.corporate_name = "dummy2" + _company.rsa_publickey = "dummy2" + _company.homepage = "dummy2" + session.add(_company) + _company = Company() + _company.address = "0x03" + _company.corporate_name = "dummy3" + _company.rsa_publickey = "dummy3" + _company.homepage = "dummy3" + session.add(_company) + session.commit() + + # Mock + mock_get.side_effect = [ + MockResponse( + [ + { + "address": "0x0123456789abcdef0123456789abcdef00000003", + "corporate_name": "株式会社テスト3", + "rsa_publickey": "RSA-KEY 3", + "homepage": "http://test3.com", + "trustee": { + "corporate_name": "受託者株式会社", + "corporate_number": "1234567890123", + "corporate_address": "東京都千代田区1-1-1", + }, + }, + { + "address": "0x0123456789abcdef0123456789abcdef00000004", + "corporate_name": "株式会社テスト4", + "rsa_publickey": "RSA-KEY 4", + "homepage": "http://test4.com", + "trustee": { + "corporate_name": "受託者株式会社", + "corporate_number": "1234567890123", + }, + }, + ] + ) + ] + + # Run target process + processor.process() + + # Assertion + _company_list: Sequence[Company] = session.scalars( + select(Company).order_by(Company.created) + ).all() + assert len(_company_list) == 1 + _company = _company_list[0] + assert ( + _company.address == "0x0123456789ABcDeF0123456789AbcdEF00000003" + ) # checksum address + assert _company.corporate_name == "株式会社テスト3" + assert _company.rsa_publickey == "RSA-KEY 3" + assert _company.homepage == "http://test3.com" + ########################################################################### # Error Case ########################################################################### @@ -1019,11 +1153,10 @@ async def test_error_3(self, mock_get, processor, session): ] # Run target process - with pytest.raises(Exception): - processor.process() + processor.process() # Assertion _company_list: Sequence[Company] = session.scalars( select(Company).order_by(Company.created) ).all() - assert len(_company_list) == 3 + assert len(_company_list) == 1 diff --git a/tests/batch/indexer_PublicInfo_TokenList_test.py b/tests/batch/indexer_PublicInfo_TokenList_test.py index 128b04b39..a6d720244 100644 --- a/tests/batch/indexer_PublicInfo_TokenList_test.py +++ b/tests/batch/indexer_PublicInfo_TokenList_test.py @@ -25,6 +25,7 @@ import pytest import requests +from eth_utils.address import to_checksum_address from sqlalchemy import select from app.model.db import TokenList @@ -56,6 +57,7 @@ def json(self) -> object: return self.data +@mock.patch("batch.indexer_PublicInfo_TokenList.TOKEN_LIST_URL", "https://localhost") @pytest.mark.asyncio class TestProcessor: ########################################################################### @@ -67,6 +69,7 @@ class TestProcessor: token_address_3 = "0xe883a6f441AD5682d37dF31D34fc012bCB07A743" token_address_4 = "0xe883A6F441AD5682d37dF31d34fc012BcB07a744" token_address_5 = "0xe883A6F441AD5682d37df31D34fc012BcB07A745" + issuer_address_1 = "0xe883a6f441ad5682d37df31d34fc012bcb07a746" # # 0 record @@ -228,6 +231,59 @@ async def test_normal_3(self, mock_get, processor, async_session): assert _token_list[1].key_manager == ["0000000000000", "1111111111111"] assert _token_list[1].product_type == 1 + # + # issuer_address is stored as checksum address + @mock.patch("requests.Session.get") + async def test_normal_issuer_address(self, mock_get, processor, async_session): + # Prepare data + _token_list_item = TokenList() + _token_list_item.token_address = self.token_address_1 + _token_list_item.token_template = "ibetBond" + _token_list_item.key_manager = ["0000000000000"] + _token_list_item.product_type = 1 + async_session.add(_token_list_item) + _token_list_item = TokenList() + _token_list_item.token_address = self.token_address_2 + _token_list_item.token_template = "ibetBond" + _token_list_item.key_manager = ["0000000000000"] + _token_list_item.product_type = 1 + async_session.add(_token_list_item) + await async_session.commit() + + # Mock + mock_get.side_effect = [ + MockResponse( + [ + { + "token_address": self.token_address_4, + "token_template": "ibetShare", + "key_manager": ["0000000000000", "1111111111111"], + "product_type": 1, + "issuer_address": self.issuer_address_1, + }, + ] + ) + ] + + # Run target process + processor.process() + + # Assertion + await async_session.rollback() + _token_list: Sequence[TokenList] = ( + await async_session.scalars( + select(TokenList).order_by(TokenList.token_address) + ) + ).all() + assert len(_token_list) == 1 + assert _token_list[0].token_address == self.token_address_4 # checksum address + assert _token_list[0].token_template == "ibetShare" + assert _token_list[0].key_manager == ["0000000000000", "1111111111111"] + assert _token_list[0].product_type == 1 + assert _token_list[0].issuer_address == to_checksum_address( + self.issuer_address_1 + ) + # # There are no differences from last time # -> Skip this cycle @@ -593,8 +649,7 @@ async def test_error_3(self, mock_get, processor, async_session): ] # Run target process - with pytest.raises(Exception): - processor.process() + processor.process() # Assertion _token_list: Sequence[TokenList] = ( @@ -602,4 +657,4 @@ async def test_error_3(self, mock_get, processor, async_session): select(TokenList).order_by(TokenList.token_address) ) ).all() - assert len(_token_list) == 3 + assert len(_token_list) == 1 diff --git a/uv.lock b/uv.lock index e3b78db5d..fc4c09a2d 100644 --- a/uv.lock +++ b/uv.lock @@ -47,14 +47,14 @@ wheels = [ [[package]] name = "aiomysql" -version = "0.2.0" +version = "0.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pymysql" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/67/76/2c5b55e4406a1957ffdfd933a94c2517455291c97d2b81cec6813754791a/aiomysql-0.2.0.tar.gz", hash = "sha256:558b9c26d580d08b8c5fd1be23c5231ce3aeff2dadad989540fee740253deb67", size = 114706, upload-time = "2023-06-11T19:57:53.608Z" } +sdist = { url = "https://files.pythonhosted.org/packages/07/5a/30166db4f993a61926dc84b4eba37303804d8a3bb6a196c954cc7274b636/aiomysql-0.3.0.tar.gz", hash = "sha256:9e850677d456dc4fea59ad871d4bcdb6adbce02326aaa32a97a43125256f23de", size = 108229, upload-time = "2025-10-21T22:33:40.083Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/87/c982ee8b333c85b8ae16306387d703a1fcdfc81a2f3f15a24820ab1a512d/aiomysql-0.2.0-py3-none-any.whl", hash = "sha256:b7c26da0daf23a5ec5e0b133c03d20657276e4eae9b73e040b72787f6f6ade0a", size = 44215, upload-time = "2023-06-11T19:57:51.09Z" }, + { url = "https://files.pythonhosted.org/packages/d2/12/bf5241e737e84c4efb9f39b9c779c034bb4457852768d9d3ca0d39b68825/aiomysql-0.3.0-py3-none-any.whl", hash = "sha256:448b31e0d11b6e8dd6e8356b7f39cec0e44293b2c6e368c9e8eeeaff77b3cbec", size = 71836, upload-time = "2025-10-21T22:33:37.468Z" }, ] [[package]] @@ -806,6 +806,7 @@ dependencies = [ { name = "pymysql", extra = ["rsa"] }, { name = "pyroscope-io" }, { name = "pyroscope-otel" }, + { name = "python-dotenv" }, { name = "requests" }, { name = "sqlalchemy", extra = ["asyncio"] }, { name = "tzdata" }, @@ -842,7 +843,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "aiohttp", marker = "extra == 'ibet-explorer'", specifier = "~=3.12.13" }, - { name = "aiomysql", specifier = "==0.2.0" }, + { name = "aiomysql", specifier = "==0.3.0" }, { name = "alembic", specifier = ">=1.14.0,<2.0.0" }, { name = "async-cache", marker = "extra == 'ibet-explorer'", specifier = "==1.1.1" }, { name = "async-cache", marker = "extra == 'ibet-explorer'", specifier = "~=1.1.1" }, @@ -873,6 +874,7 @@ requires-dist = [ { name = "pymysql", extras = ["rsa"], specifier = "~=1.1.0" }, { name = "pyroscope-io", specifier = ">=0.8.11" }, { name = "pyroscope-otel", specifier = ">=0.4.1" }, + { name = "python-dotenv", specifier = "~=1.1.0" }, { name = "requests", specifier = ">=2.32.3" }, { name = "sqlalchemy", extras = ["asyncio"], specifier = ">=2.0.33,<3.0.0" }, { name = "textual", marker = "extra == 'ibet-explorer'", specifier = "~=0.44.1" },