Skip to content

Commit 2890e41

Browse files
Fix
1 parent 4c0a5ca commit 2890e41

File tree

2 files changed

+295
-1
lines changed

2 files changed

+295
-1
lines changed

tests/test_wallet.py

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from cdp.client.models.wallet import Wallet as WalletModel
1313
from cdp.contract_invocation import ContractInvocation
1414
from cdp.payload_signature import PayloadSignature
15+
from cdp.smart_contract import SmartContract
1516
from cdp.trade import Trade
1617
from cdp.transfer import Transfer
1718
from cdp.wallet import Wallet
@@ -535,3 +536,172 @@ def test_wallet_fetch(mock_api_clients, wallet_factory):
535536
assert isinstance(fetched_wallet, Wallet)
536537
assert fetched_wallet.id == "fetched-wallet-id"
537538
mock_get_wallet.assert_called_once_with("fetched-wallet-id")
539+
540+
541+
@patch("cdp.Cdp.use_server_signer", True)
542+
def test_wallet_deploy_token(wallet_factory):
543+
"""Test the deploy_token method of a Wallet."""
544+
wallet = wallet_factory()
545+
mock_default_address = Mock(spec=WalletAddress)
546+
mock_smart_contract = Mock(spec=SmartContract)
547+
mock_default_address.deploy_token.return_value = mock_smart_contract
548+
549+
with patch.object(
550+
Wallet, "default_address", new_callable=PropertyMock
551+
) as mock_default_address_prop:
552+
mock_default_address_prop.return_value = mock_default_address
553+
554+
smart_contract = wallet.deploy_token(name="TestToken", symbol="TT", total_supply="1000000")
555+
556+
assert isinstance(smart_contract, SmartContract)
557+
mock_default_address.deploy_token.assert_called_once_with("TestToken", "TT", "1000000")
558+
559+
560+
@patch("cdp.Cdp.use_server_signer", True)
561+
def test_wallet_deploy_nft(wallet_factory):
562+
"""Test the deploy_nft method of a Wallet."""
563+
wallet = wallet_factory()
564+
mock_default_address = Mock(spec=WalletAddress)
565+
mock_smart_contract = Mock(spec=SmartContract)
566+
mock_default_address.deploy_nft.return_value = mock_smart_contract
567+
568+
with patch.object(
569+
Wallet, "default_address", new_callable=PropertyMock
570+
) as mock_default_address_prop:
571+
mock_default_address_prop.return_value = mock_default_address
572+
573+
smart_contract = wallet.deploy_nft(
574+
name="TestNFT", symbol="TNFT", base_uri="https://example.com/nft/"
575+
)
576+
577+
assert isinstance(smart_contract, SmartContract)
578+
mock_default_address.deploy_nft.assert_called_once_with(
579+
"TestNFT", "TNFT", "https://example.com/nft/"
580+
)
581+
582+
583+
@patch("cdp.Cdp.use_server_signer", True)
584+
def test_wallet_deploy_multi_token(wallet_factory):
585+
"""Test the deploy_multi_token method of a Wallet."""
586+
wallet = wallet_factory()
587+
mock_default_address = Mock(spec=WalletAddress)
588+
mock_smart_contract = Mock(spec=SmartContract)
589+
mock_default_address.deploy_multi_token.return_value = mock_smart_contract
590+
591+
with patch.object(
592+
Wallet, "default_address", new_callable=PropertyMock
593+
) as mock_default_address_prop:
594+
mock_default_address_prop.return_value = mock_default_address
595+
596+
smart_contract = wallet.deploy_multi_token(uri="https://example.com/multi-token/{id}.json")
597+
598+
assert isinstance(smart_contract, SmartContract)
599+
mock_default_address.deploy_multi_token.assert_called_once_with(
600+
"https://example.com/multi-token/{id}.json"
601+
)
602+
603+
604+
@patch("cdp.Cdp.use_server_signer", True)
605+
def test_wallet_deploy_token_no_default_address(wallet_factory):
606+
"""Test the deploy_token method of a Wallet with no default address."""
607+
wallet = wallet_factory()
608+
609+
with patch.object(
610+
Wallet, "default_address", new_callable=PropertyMock
611+
) as mock_default_address_prop:
612+
mock_default_address_prop.return_value = None
613+
614+
with pytest.raises(ValueError, match="Default address does not exist"):
615+
wallet.deploy_token(name="TestToken", symbol="TT", total_supply="1000000")
616+
617+
618+
# Add similar tests for deploy_nft and deploy_multi_token with no default address
619+
@patch("cdp.Cdp.use_server_signer", True)
620+
def test_wallet_deploy_nft_no_default_address(wallet_factory):
621+
"""Test the deploy_nft method of a Wallet with no default address."""
622+
wallet = wallet_factory()
623+
624+
with patch.object(
625+
Wallet, "default_address", new_callable=PropertyMock
626+
) as mock_default_address_prop:
627+
mock_default_address_prop.return_value = None
628+
629+
with pytest.raises(ValueError, match="Default address does not exist"):
630+
wallet.deploy_nft(name="TestNFT", symbol="TNFT", base_uri="https://example.com/nft/")
631+
632+
633+
@patch("cdp.Cdp.use_server_signer", True)
634+
def test_wallet_deploy_multi_token_no_default_address(wallet_factory):
635+
"""Test the deploy_multi_token method of a Wallet with no default address."""
636+
wallet = wallet_factory()
637+
638+
with patch.object(
639+
Wallet, "default_address", new_callable=PropertyMock
640+
) as mock_default_address_prop:
641+
mock_default_address_prop.return_value = None
642+
643+
with pytest.raises(ValueError, match="Default address does not exist"):
644+
wallet.deploy_multi_token(uri="https://example.com/multi-token/{id}.json")
645+
646+
647+
@patch("cdp.Cdp.use_server_signer", True)
648+
def test_wallet_deploy_token_with_server_signer(wallet_factory):
649+
"""Test the deploy_token method of a Wallet with server-signer."""
650+
wallet = wallet_factory()
651+
mock_default_address = Mock(spec=WalletAddress)
652+
mock_smart_contract = Mock(spec=SmartContract)
653+
mock_default_address.deploy_token.return_value = mock_smart_contract
654+
655+
with patch.object(
656+
Wallet, "default_address", new_callable=PropertyMock
657+
) as mock_default_address_prop:
658+
mock_default_address_prop.return_value = mock_default_address
659+
660+
smart_contract = wallet.deploy_token(name="TestToken", symbol="TT", total_supply="1000000")
661+
662+
assert isinstance(smart_contract, SmartContract)
663+
mock_default_address.deploy_token.assert_called_once_with("TestToken", "TT", "1000000")
664+
665+
666+
@patch("cdp.Cdp.use_server_signer", True)
667+
def test_wallet_deploy_nft_with_server_signer(wallet_factory):
668+
"""Test the deploy_nft method of a Wallet with server-signer."""
669+
wallet = wallet_factory()
670+
mock_default_address = Mock(spec=WalletAddress)
671+
mock_smart_contract = Mock(spec=SmartContract)
672+
mock_default_address.deploy_nft.return_value = mock_smart_contract
673+
674+
with patch.object(
675+
Wallet, "default_address", new_callable=PropertyMock
676+
) as mock_default_address_prop:
677+
mock_default_address_prop.return_value = mock_default_address
678+
679+
smart_contract = wallet.deploy_nft(
680+
name="TestNFT", symbol="TNFT", base_uri="https://example.com/nft/"
681+
)
682+
683+
assert isinstance(smart_contract, SmartContract)
684+
mock_default_address.deploy_nft.assert_called_once_with(
685+
"TestNFT", "TNFT", "https://example.com/nft/"
686+
)
687+
688+
689+
@patch("cdp.Cdp.use_server_signer", True)
690+
def test_wallet_deploy_multi_token_with_server_signer(wallet_factory):
691+
"""Test the deploy_multi_token method of a Wallet with server-signer."""
692+
wallet = wallet_factory()
693+
mock_default_address = Mock(spec=WalletAddress)
694+
mock_smart_contract = Mock(spec=SmartContract)
695+
mock_default_address.deploy_multi_token.return_value = mock_smart_contract
696+
697+
with patch.object(
698+
Wallet, "default_address", new_callable=PropertyMock
699+
) as mock_default_address_prop:
700+
mock_default_address_prop.return_value = mock_default_address
701+
702+
smart_contract = wallet.deploy_multi_token(uri="https://example.com/multi-token/{id}.json")
703+
704+
assert isinstance(smart_contract, SmartContract)
705+
mock_default_address.deploy_multi_token.assert_called_once_with(
706+
"https://example.com/multi-token/{id}.json"
707+
)

tests/test_wallet_address.py

Lines changed: 125 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from decimal import Decimal
2-
from unittest.mock import Mock, patch
2+
from unittest.mock import ANY, Mock, patch
33

44
import pytest
55
from eth_account.datastructures import SignedMessage
@@ -14,6 +14,7 @@
1414
from cdp.contract_invocation import ContractInvocation
1515
from cdp.errors import InsufficientFundsError
1616
from cdp.payload_signature import PayloadSignature
17+
from cdp.smart_contract import SmartContract
1718
from cdp.trade import Trade
1819
from cdp.transfer import Transfer
1920
from cdp.wallet_address import WalletAddress
@@ -629,3 +630,126 @@ def test_repr(wallet_address):
629630
"""Test the repr representation of a WalletAddress."""
630631
expected_repr = "WalletAddress: (address_id: 0x1234567890123456789012345678901234567890, wallet_id: test-wallet-id-1, network_id: base-sepolia)"
631632
assert repr(wallet_address) == expected_repr
633+
634+
635+
@patch("cdp.Cdp.api_clients")
636+
@patch("cdp.Cdp.use_server_signer", True)
637+
def test_wallet_address_deploy_token(mock_api_clients, wallet_address):
638+
"""Test the deploy_token method of a WalletAddress."""
639+
mock_smart_contract = Mock(spec=SmartContract)
640+
mock_api_clients.smart_contracts.create_smart_contract.return_value = mock_smart_contract
641+
642+
smart_contract = wallet_address.deploy_token(
643+
name="TestToken", symbol="TT", total_supply="1000000"
644+
)
645+
646+
assert isinstance(smart_contract, SmartContract)
647+
mock_api_clients.smart_contracts.create_smart_contract.assert_called_once_with(
648+
wallet_id=wallet_address.wallet_id,
649+
address_id=wallet_address.address_id,
650+
create_smart_contract_request=ANY,
651+
)
652+
653+
654+
@patch("cdp.Cdp.api_clients")
655+
@patch("cdp.Cdp.use_server_signer", True)
656+
def test_wallet_address_deploy_nft(mock_api_clients, wallet_address):
657+
"""Test the deploy_nft method of a WalletAddress."""
658+
mock_smart_contract = Mock(spec=SmartContract)
659+
mock_api_clients.smart_contracts.create_smart_contract.return_value = mock_smart_contract
660+
661+
smart_contract = wallet_address.deploy_nft(
662+
name="TestNFT", symbol="TNFT", base_uri="https://example.com/nft/"
663+
)
664+
665+
assert isinstance(smart_contract, SmartContract)
666+
mock_api_clients.smart_contracts.create_smart_contract.assert_called_once_with(
667+
wallet_id=wallet_address.wallet_id,
668+
address_id=wallet_address.address_id,
669+
create_smart_contract_request=ANY,
670+
)
671+
672+
673+
@patch("cdp.Cdp.api_clients")
674+
@patch("cdp.Cdp.use_server_signer", True)
675+
def test_wallet_address_deploy_multi_token(mock_api_clients, wallet_address):
676+
"""Test the deploy_multi_token method of a WalletAddress."""
677+
mock_smart_contract = Mock(spec=SmartContract)
678+
mock_api_clients.smart_contracts.create_smart_contract.return_value = mock_smart_contract
679+
680+
smart_contract = wallet_address.deploy_multi_token(
681+
uri="https://example.com/multi-token/{id}.json"
682+
)
683+
684+
assert isinstance(smart_contract, SmartContract)
685+
mock_api_clients.smart_contracts.create_smart_contract.assert_called_once_with(
686+
wallet_id=wallet_address.wallet_id,
687+
address_id=wallet_address.address_id,
688+
create_smart_contract_request=ANY,
689+
)
690+
691+
692+
@patch("cdp.Cdp.api_clients")
693+
@patch("cdp.Cdp.use_server_signer", True)
694+
def test_wallet_address_deploy_token_with_server_signer(mock_api_clients, wallet_address):
695+
"""Test the deploy_token method of a WalletAddress with server signer."""
696+
mock_smart_contract = Mock(spec=SmartContract)
697+
mock_api_clients.smart_contracts.create_smart_contract.return_value = mock_smart_contract
698+
699+
smart_contract = wallet_address.deploy_token(
700+
name="TestToken", symbol="TT", total_supply="1000000"
701+
)
702+
703+
assert isinstance(smart_contract, SmartContract)
704+
mock_api_clients.smart_contracts.create_smart_contract.assert_called_once_with(
705+
wallet_id=wallet_address.wallet_id,
706+
address_id=wallet_address.address_id,
707+
create_smart_contract_request=ANY,
708+
)
709+
# Verify that sign and broadcast methods are not called when using server signer
710+
mock_smart_contract.sign.assert_not_called()
711+
mock_smart_contract.broadcast.assert_not_called()
712+
713+
714+
@patch("cdp.Cdp.api_clients")
715+
@patch("cdp.Cdp.use_server_signer", True)
716+
def test_wallet_address_deploy_nft_with_server_signer(mock_api_clients, wallet_address):
717+
"""Test the deploy_nft method of a WalletAddress with server signer."""
718+
mock_smart_contract = Mock(spec=SmartContract)
719+
mock_api_clients.smart_contracts.create_smart_contract.return_value = mock_smart_contract
720+
721+
smart_contract = wallet_address.deploy_nft(
722+
name="TestNFT", symbol="TNFT", base_uri="https://example.com/nft/"
723+
)
724+
725+
assert isinstance(smart_contract, SmartContract)
726+
mock_api_clients.smart_contracts.create_smart_contract.assert_called_once_with(
727+
wallet_id=wallet_address.wallet_id,
728+
address_id=wallet_address.address_id,
729+
create_smart_contract_request=ANY,
730+
)
731+
# Verify that sign and broadcast methods are not called when using server signer
732+
mock_smart_contract.sign.assert_not_called()
733+
mock_smart_contract.broadcast.assert_not_called()
734+
735+
736+
@patch("cdp.Cdp.api_clients")
737+
@patch("cdp.Cdp.use_server_signer", True)
738+
def test_wallet_address_deploy_multi_token_with_server_signer(mock_api_clients, wallet_address):
739+
"""Test the deploy_multi_token method of a WalletAddress with server signer."""
740+
mock_smart_contract = Mock(spec=SmartContract)
741+
mock_api_clients.smart_contracts.create_smart_contract.return_value = mock_smart_contract
742+
743+
smart_contract = wallet_address.deploy_multi_token(
744+
uri="https://example.com/multi-token/{id}.json"
745+
)
746+
747+
assert isinstance(smart_contract, SmartContract)
748+
mock_api_clients.smart_contracts.create_smart_contract.assert_called_once_with(
749+
wallet_id=wallet_address.wallet_id,
750+
address_id=wallet_address.address_id,
751+
create_smart_contract_request=ANY,
752+
)
753+
# Verify that sign and broadcast methods are not called when using server signer
754+
mock_smart_contract.sign.assert_not_called()
755+
mock_smart_contract.broadcast.assert_not_called()

0 commit comments

Comments
 (0)