Skip to content

Commit

Permalink
Add test contract view
Browse files Browse the repository at this point in the history
  • Loading branch information
moisses89 committed Dec 19, 2024
1 parent 54a271d commit 8e15c13
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 12 deletions.
2 changes: 1 addition & 1 deletion app/routers/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def convert_bytes_to_hex(cls, abi_hash):
class ContractsPublic(BaseModel):
address: bytes | str
name: str
display_name: str
display_name: str | None
chain_id: int
project: ProjectPublic | None
abi: AbiPublic | None
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
abi_json: list[dict] = [
mock_abi_json: list[dict] = [
{
"inputs": [],
"payable": False,
Expand Down
34 changes: 24 additions & 10 deletions app/tests/routers/test_contracts.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
from fastapi.testclient import TestClient

from eth_account import Account
from hexbytes import HexBytes
from safe_eth.eth.utils import fast_to_checksum_address
from sqlmodel.ext.asyncio.session import AsyncSession

from ...datasources.db.database import database_session
from ...datasources.db.models import Contract
from ...datasources.db.models import Abi, Contract
from ...main import app
from ..db.db_async_conn import DbAsyncConn
from ..mocks.abi_mock import mock_abi_json
from ..utils import get_md5_abi_hash


class TestRouterContract(DbAsyncConn):
Expand All @@ -17,18 +22,27 @@ def setUpClass(cls):

@database_session
async def test_view_contracts(self, session: AsyncSession):
abi_hash = get_md5_abi_hash(mock_abi_json)
abi = Abi(abi_hash=abi_hash, abi_json=mock_abi_json)
await abi.create(session)
address = HexBytes(Account.create().address)

contract = Contract(
address=b"0xe94B2EC38FA88bDc8cA9110b24deB5341ECeF251",
name="A Test Contracts",
chain_id=1,
address=address, name="A Test Contracts", chain_id=1, abi_id=abi.abi_hash
)
expected_response = {
"name": "A Test Contracts",
"description": None,
"address": "0xe94B2EC38FA88bDc8cA9110b24deB5341ECeF251",
}
await contract.create(session)
response = self.client.get(
"/api/v1/contracts/0xe94B2EC38FA88bDc8cA9110b24deB5341ECeF251"
f"/api/v1/contracts/{fast_to_checksum_address(address.hex())}",
)
self.assertEqual(response.status_code, 200)
response_json = response.json()
results = response_json["results"]
self.assertEqual(response_json["count"], 1)
self.assertEqual(response_json["previous"], None)
self.assertEqual(response_json["next"], None)
self.assertEqual(results[0]["name"], "A Test Contracts")
self.assertEqual(results[0]["address"], address.hex())
self.assertEqual(results[0]["abi"]["abi_json"], mock_abi_json)
self.assertEqual(results[0]["display_name"], None)
self.assertEqual(results[0]["chain_id"], 1)
self.assertEqual(results[0]["project"], None)
9 changes: 9 additions & 0 deletions app/tests/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import hashlib
import json


def get_md5_abi_hash(abi: list[dict]) -> bytes:
json_str = json.dumps(abi, sort_keys=True)
md5_hash = hashlib.md5(json_str.encode("utf-8")).hexdigest()
abi_hash = md5_hash[-8:]
return bytes.fromhex(abi_hash)

0 comments on commit 8e15c13

Please sign in to comment.