commit a16a31a99eedf729b6efa1cb9f746e14637987d4
parent 6ec0f053026393fe10ec92f985b42faece49fc64
Author: lash <dev@holbrook.no>
Date: Wed, 1 Mar 2023 13:27:53 +0000
Move test code to unittest module
Diffstat:
8 files changed, 347 insertions(+), 249 deletions(-)
diff --git a/python/CHANGELOG b/python/CHANGELOG
@@ -1,3 +1,9 @@
+- 0.0.7
+ * Move interface tests and test token publish to unittest module
+- 0.0.6
+ * Implement chainlib-gen for eth badgetoken'
+- 0.0.5
+ * Add transfer cli tool
- 0.0.4
* Change license to AGPL3 and copyright waived to public domain
- 0.0.3
diff --git a/python/eth_badgetoken/unittest/__init__.py b/python/eth_badgetoken/unittest/__init__.py
@@ -0,0 +1 @@
+from .base import *
diff --git a/python/eth_badgetoken/unittest/base.py b/python/eth_badgetoken/unittest/base.py
@@ -0,0 +1,56 @@
+# standard imports
+import os
+import unittest
+import json
+import logging
+
+# external imports
+from chainlib.eth.unittest.ethtester import EthTesterCase
+from chainlib.connection import RPCConnection
+from chainlib.eth.nonce import RPCNonceOracle
+from chainlib.eth.address import to_checksum_address
+from chainlib.eth.tx import (
+ receipt,
+ transaction,
+ TxFormat,
+ )
+from chainlib.eth.contract import (
+ abi_decode_single,
+ ABIContractType,
+ )
+from chainlib.error import JSONRPCException
+from chainlib.eth.constant import ZERO_ADDRESS
+
+
+# local imports
+from eth_badgetoken import BadgeToken
+
+logging.basicConfig(level=logging.DEBUG)
+logg = logging.getLogger(__name__)
+
+testdir = os.path.dirname(__file__)
+
+
+class TestBadgeToken(EthTesterCase):
+
+ owner = None
+ name = 'DevBadge'
+ symbol = 'DEV'
+ #decimals = 6
+ initial_supply = 0
+
+ def setUp(self):
+ super(TestBadgeToken, self).setUp()
+ nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
+ c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+ #(tx_hash, o) = c.constructor(self.accounts[0], b'\x00' * 20, 'DevBadge', 'DEV')
+ (tx_hash, o) = c.constructor(self.accounts[0], 'DevBadge', 'DEV', self.accounts[1])
+ self.conn = RPCConnection.connect(self.chain_spec, 'default')
+ r = self.conn.do(o)
+ logg.debug('deployed with hash {}'.format(r))
+
+ o = receipt(r)
+ r = self.conn.do(o)
+ self.address = to_checksum_address(r['contract_address'])
+
+ TestBadgeToken.owner = self.accounts[0]
diff --git a/python/eth_erc721/unittest/__init__.py b/python/eth_erc721/unittest/__init__.py
@@ -0,0 +1 @@
+from .base import *
diff --git a/python/eth_erc721/unittest/base.py b/python/eth_erc721/unittest/base.py
@@ -0,0 +1,211 @@
+# external imports
+from hexathon import strip_0x
+from chainlib.eth.nonce import RPCNonceOracle
+from chainlib.eth.tx import receipt
+from chainlib.eth.constant import ZERO_ADDRESS
+from chainlib.jsonrpc import JSONRPCException
+
+# local imports
+from eth_badgetoken import BadgeToken
+
+class TestInterface:
+
+ def _mint(self, recipient, token_id):
+ nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
+ c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+ (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], recipient, token_id)
+ r = self.rpc.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+ return c
+
+
+ def test_token_owner(self):
+ token_bytes = b'\xee' * 32
+ token_id = int.from_bytes(token_bytes, byteorder='big')
+ c = self._mint(self.accounts[1], token_id)
+
+ o = c.owner_of(self.address, token_id, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ owner_address = c.parse_owner(r)
+ self.assertEqual(strip_0x(self.accounts[1]), owner_address)
+
+ o = c.token_of_owner_by_index(self.address, self.accounts[1], 0, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ self.assertEqual(token_bytes.hex(), strip_0x(r))
+
+
+ def test_token_transfer_ownership(self):
+ token_bytes = [
+ b'\xee' * 32,
+ b'\xdd' * 32,
+ b'\xcc' * 32,
+ ]
+ token_ids = []
+ for t in token_bytes:
+ token_id = int.from_bytes(t, byteorder='big')
+ token_ids.append(token_id)
+ c = self._mint(self.accounts[0], token_id)
+
+ o = c.total_supply(self.address, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ supply = c.parse_total_supply(r)
+ self.assertEqual(supply, 3)
+
+ (tx_hash_hex, o) = c.transfer_ownership(self.address, self.accounts[0], self.accounts[4])
+ r = self.rpc.do(o)
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+ for t in token_ids:
+ o = c.owner_of(self.address, token_id, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ owner_address = c.parse_owner(r)
+ self.assertEqual(strip_0x(self.accounts[4]), owner_address)
+
+ def test_mint(self):
+ self.backend.mine_blocks(42)
+
+ token_bytes = b'\xee' * 32
+ token_id = int.from_bytes(token_bytes, byteorder='big')
+ c = self._mint(self.accounts[1], token_id)
+
+ o = c.token_by_index(self.address, 0, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ self.assertEqual(token_bytes.hex(), strip_0x(r))
+
+ o = c.total_supply(self.address, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ supply = c.parse_total_supply(r)
+ self.assertEqual(supply, 1)
+
+ o = c.minted_at(self.address, token_id, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ height = c.parse_minted_at(r)
+
+ self.assertEqual(height, 44)
+
+
+ def test_approve(self):
+ token_bytes = b'\xee' * 32
+ token_id = int.from_bytes(token_bytes, byteorder='big')
+ c = self._mint(self.accounts[1], token_id)
+
+ nonce_oracle = RPCNonceOracle(self.accounts[1], self.rpc)
+ c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+ (tx_hash_hex, o) = c.approve(self.address, self.accounts[1], self.accounts[2], token_id)
+ r = self.rpc.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.get_approved(self.address, token_id, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ approved_address = c.parse_get_approved(r)
+ self.assertEqual(approved_address, strip_0x(self.accounts[2]))
+
+ nonce_oracle = RPCNonceOracle(self.accounts[2], self.rpc)
+ c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+ (tx_hash_hex, o) = c.transfer_from(self.address, self.accounts[2], self.accounts[1], self.accounts[3], token_id)
+ r = self.rpc.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.owner_of(self.address, token_id, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ owner_address = c.parse_owner_of(r)
+ self.assertEqual(owner_address, strip_0x(self.accounts[3]))
+
+ o = c.get_approved(self.address, token_id, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ approved_address = c.parse_get_approved(r)
+ self.assertEqual(approved_address, strip_0x(ZERO_ADDRESS))
+
+
+ def test_transfer(self):
+ token_bytes = b'\xee' * 32
+ token_id = int.from_bytes(token_bytes, byteorder='big')
+ c = self._mint(self.accounts[1], token_id)
+
+ nonce_oracle = RPCNonceOracle(self.accounts[1], self.rpc)
+ c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+ (tx_hash_hex, o) = c.transfer_from(self.address, self.accounts[1], self.accounts[1], self.accounts[2], token_id)
+ r = self.rpc.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.token_of_owner_by_index(self.address, self.accounts[1], 0, sender_address=self.accounts[0])
+ with self.assertRaises(JSONRPCException):
+ r = self.rpc.do(o)
+
+ o = c.token_of_owner_by_index(self.address, self.accounts[2], 0, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ self.assertEqual(token_bytes.hex(), strip_0x(r))
+
+
+ def test_token_uri(self):
+ token_bytes = b'\xee' * 32
+ token_id = int.from_bytes(token_bytes, byteorder='big')
+ c = self._mint(self.accounts[1], token_id)
+
+ o = c.token_uri(self.address, token_id, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ uri = c.parse_token_uri(r)
+ self.assertEqual(uri, 'sha256:' + token_bytes.hex())
+
+
+ def test_operator(self):
+ token_bytes = b'\xee' * 32
+ token_id = int.from_bytes(token_bytes, byteorder='big')
+ c = self._mint(self.accounts[1], token_id)
+
+ nonce_oracle = RPCNonceOracle(self.accounts[1], self.rpc)
+ c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+ (tx_hash_hex, o) = c.set_operator(self.address, self.accounts[1], self.accounts[2])
+ r = self.rpc.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.is_operator(self.address, self.accounts[1], self.accounts[2], sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ isop = c.parse_is_operator(r)
+ self.assertTrue(isop)
+
+ (tx_hash_hex, o) = c.remove_operator(self.address, self.accounts[1], self.accounts[2])
+ r = self.rpc.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.is_operator(self.address, self.accounts[1], self.accounts[2], sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ isop = c.parse_is_operator(r)
+ self.assertFalse(isop)
+
+ (tx_hash_hex, o) = c.set_operator(self.address, self.accounts[1], self.accounts[2])
+ r = self.rpc.do(o)
+
+ nonce_oracle = RPCNonceOracle(self.accounts[2], self.rpc)
+ c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+ (tx_hash_hex, o) = c.transfer_from(self.address, self.accounts[2], self.accounts[1], self.accounts[3], token_id)
+ r = self.rpc.do(o)
+
+ o = receipt(tx_hash_hex)
+ r = self.conn.do(o)
+ self.assertEqual(r['status'], 1)
+
+ o = c.owner_of(self.address, token_id, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ owner_address = c.parse_owner(r)
+ self.assertEqual(owner_address, strip_0x(self.accounts[3]))
diff --git a/python/eth_erc721/unittest/enum.py b/python/eth_erc721/unittest/enum.py
@@ -0,0 +1,62 @@
+# external imports
+from hexathon import strip_0x
+from chainlib.eth.nonce import RPCNonceOracle
+# TODO: for mint, move to cic-contracts unittest
+from eth_badgetoken import BadgeToken
+from chainlib.eth.tx import receipt
+
+# local imports
+from .base import TestInterface as TestInterfaceBase
+
+
+class TestInterface(TestInterfaceBase):
+
+ def test_token_index(self):
+ nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
+ c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+
+ token_bytes = b'\xee' * 32
+ token_id_one = int.from_bytes(token_bytes, byteorder='big')
+ (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], token_id_one)
+ r = self.rpc.do(o)
+
+ token_bytes = b'\xee' * 32
+ token_id_two = int.from_bytes(token_bytes, byteorder='big')
+ (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[2], token_id_two)
+ r = self.rpc.do(o)
+
+ o = c.token_by_index(self.address, 0, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ token = c.parse_token_by_index(r)
+ self.assertEqual(token_id_one, token)
+
+ o = c.token_by_index(self.address, 1, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ token = c.parse_token_by_index(r)
+ self.assertEqual(token_id_two, token)
+
+
+
+ def test_token_owner_index(self):
+ nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
+ c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
+
+ token_bytes = b'\xee' * 32
+ token_id_one = int.from_bytes(token_bytes, byteorder='big')
+ (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], token_id_one)
+ r = self.rpc.do(o)
+
+ token_bytes = b'\xee' * 32
+ token_id_two = int.from_bytes(token_bytes, byteorder='big')
+ (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[2], token_id_two)
+ r = self.rpc.do(o)
+
+ o = c.token_of_owner_by_index(self.address, self.accounts[1], 0, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ token = c.parse_token_by_index(r)
+ self.assertEqual(token_id_one, token)
+
+ o = c.token_of_owner_by_index(self.address, self.accounts[2], 0, sender_address=self.accounts[0])
+ r = self.rpc.do(o)
+ token = c.parse_token_by_index(r)
+ self.assertEqual(token_id_two, token)
diff --git a/python/setup.cfg b/python/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = eth-erc721
-version = 0.0.6
+version = 0.0.7
description = ERC721 interface and simple contract with deployment script providing arbitrary minting of NFTs with freely settable tokenids
author = Louis Holbrook
author_email = dev@holbrook.no
@@ -31,8 +31,10 @@ python_requires = >= 3.7
packages =
eth_badgetoken
eth_badgetoken.runnable
+ eth_badgetoken.unittest
eth_badgetoken.data
eth_erc721
+ eth_erc721.unittest
eth_erc721.runnable
#eth_erc721.data
#eth_erc721.runnable
@@ -45,6 +47,6 @@ packages =
[options.entry_points]
console_scripts =
- eth-badge-deploy = eth_badgetoken.runnable.deploy:main
+ eth-badge-publish = eth_badgetoken.runnable.publish:main
eth-badge-mint = eth_badgetoken.runnable.mint:main
erc721-transfer = eth_erc721.runnable.transfer:main
diff --git a/python/tests/test_app.py b/python/tests/test_app.py
@@ -1,260 +1,19 @@
# standard imports
-import os
-import unittest
-import json
import logging
+import unittest
# external imports
-from chainlib.eth.unittest.ethtester import EthTesterCase
-from chainlib.connection import RPCConnection
-from chainlib.eth.nonce import RPCNonceOracle
-from chainlib.eth.address import to_checksum_address
-from chainlib.eth.tx import (
- receipt,
- transaction,
- TxFormat,
- )
-from chainlib.eth.contract import (
- abi_decode_single,
- ABIContractType,
- )
-from chainlib.error import JSONRPCException
-from chainlib.eth.constant import ZERO_ADDRESS
-from hexathon import (
- add_0x,
- strip_0x,
- )
-
+from eth_owned.unittest import TestInterface as TestInterfaceOwned
# local imports
-from eth_badgetoken import BadgeToken
+from eth_badgetoken.unittest import TestBadgeToken
+from eth_erc721.unittest.enum import TestInterface
-logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger()
-testdir = os.path.dirname(__file__)
-
-
-class Test(EthTesterCase):
-
- def setUp(self):
- super(Test, self).setUp()
- nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
- c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- #(tx_hash, o) = c.constructor(self.accounts[0], b'\x00' * 20, 'DevBadge', 'DEV')
- (tx_hash, o) = c.constructor(self.accounts[0], 'DevBadge', 'DEV', self.accounts[1])
- self.conn = RPCConnection.connect(self.chain_spec, 'default')
- r = self.conn.do(o)
- logg.debug('deployed with hash {}'.format(r))
-
- o = receipt(r)
- r = self.conn.do(o)
- self.address = to_checksum_address(r['contract_address'])
-
-
- def _mint(self, recipient, token_id):
- nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
- c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], recipient, token_id)
- r = self.rpc.do(o)
-
- o = receipt(tx_hash_hex)
- r = self.conn.do(o)
- self.assertEqual(r['status'], 1)
-
- return c
-
-
- def test_mint(self):
- self.backend.mine_blocks(42)
-
- token_bytes = b'\xee' * 32
- token_id = int.from_bytes(token_bytes, byteorder='big')
- c = self._mint(self.accounts[1], token_id)
-
- o = c.token_by_index(self.address, 0, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- self.assertEqual(token_bytes.hex(), strip_0x(r))
-
- o = c.total_supply(self.address, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- supply = c.parse_total_supply(r)
- self.assertEqual(supply, 1)
-
- o = c.minted_at(self.address, token_id, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- height = c.parse_minted_at(r)
-
- self.assertEqual(height, 44)
-
-
- def test_owner(self):
- token_bytes = b'\xee' * 32
- token_id = int.from_bytes(token_bytes, byteorder='big')
- c = self._mint(self.accounts[1], token_id)
-
- o = c.owner_of(self.address, token_id, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- owner_address = c.parse_owner_of(r)
- self.assertEqual(strip_0x(self.accounts[1]), owner_address)
-
- o = c.token_of_owner_by_index(self.address, self.accounts[1], 0, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- self.assertEqual(token_bytes.hex(), strip_0x(r))
-
-
- def test_approve(self):
- token_bytes = b'\xee' * 32
- token_id = int.from_bytes(token_bytes, byteorder='big')
- c = self._mint(self.accounts[1], token_id)
-
- nonce_oracle = RPCNonceOracle(self.accounts[1], self.rpc)
- c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- (tx_hash_hex, o) = c.approve(self.address, self.accounts[1], self.accounts[2], token_id)
- r = self.rpc.do(o)
-
- o = receipt(tx_hash_hex)
- r = self.conn.do(o)
- self.assertEqual(r['status'], 1)
-
- o = c.get_approved(self.address, token_id, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- approved_address = c.parse_get_approved(r)
- self.assertEqual(approved_address, strip_0x(self.accounts[2]))
-
- nonce_oracle = RPCNonceOracle(self.accounts[2], self.rpc)
- c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- (tx_hash_hex, o) = c.transfer_from(self.address, self.accounts[2], self.accounts[1], self.accounts[3], token_id)
- r = self.rpc.do(o)
-
- o = receipt(tx_hash_hex)
- r = self.conn.do(o)
- self.assertEqual(r['status'], 1)
-
- o = c.owner_of(self.address, token_id, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- owner_address = c.parse_owner_of(r)
- self.assertEqual(owner_address, strip_0x(self.accounts[3]))
-
- o = c.get_approved(self.address, token_id, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- approved_address = c.parse_get_approved(r)
- self.assertEqual(approved_address, strip_0x(ZERO_ADDRESS))
-
-
-
-
- def test_operator(self):
- token_bytes = b'\xee' * 32
- token_id = int.from_bytes(token_bytes, byteorder='big')
- c = self._mint(self.accounts[1], token_id)
-
- nonce_oracle = RPCNonceOracle(self.accounts[1], self.rpc)
- c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- (tx_hash_hex, o) = c.set_operator(self.address, self.accounts[1], self.accounts[2])
- r = self.rpc.do(o)
-
- o = receipt(tx_hash_hex)
- r = self.conn.do(o)
- self.assertEqual(r['status'], 1)
-
- o = c.is_operator(self.address, self.accounts[1], self.accounts[2], sender_address=self.accounts[0])
- r = self.rpc.do(o)
- isop = c.parse_is_operator(r)
- self.assertTrue(isop)
-
- (tx_hash_hex, o) = c.remove_operator(self.address, self.accounts[1], self.accounts[2])
- r = self.rpc.do(o)
-
- o = receipt(tx_hash_hex)
- r = self.conn.do(o)
- self.assertEqual(r['status'], 1)
-
- o = c.is_operator(self.address, self.accounts[1], self.accounts[2], sender_address=self.accounts[0])
- r = self.rpc.do(o)
- isop = c.parse_is_operator(r)
- self.assertFalse(isop)
-
- (tx_hash_hex, o) = c.set_operator(self.address, self.accounts[1], self.accounts[2])
- r = self.rpc.do(o)
-
- nonce_oracle = RPCNonceOracle(self.accounts[2], self.rpc)
- c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- (tx_hash_hex, o) = c.transfer_from(self.address, self.accounts[2], self.accounts[1], self.accounts[3], token_id)
- r = self.rpc.do(o)
-
- o = receipt(tx_hash_hex)
- r = self.conn.do(o)
- self.assertEqual(r['status'], 1)
-
- o = c.owner_of(self.address, token_id, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- owner_address = c.parse_owner_of(r)
- self.assertEqual(owner_address, strip_0x(self.accounts[3]))
-
-
- def test_transfer(self):
- token_bytes = b'\xee' * 32
- token_id = int.from_bytes(token_bytes, byteorder='big')
- c = self._mint(self.accounts[1], token_id)
-
- nonce_oracle = RPCNonceOracle(self.accounts[1], self.rpc)
- c = BadgeToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- (tx_hash_hex, o) = c.transfer_from(self.address, self.accounts[1], self.accounts[1], self.accounts[2], token_id)
- r = self.rpc.do(o)
-
- o = receipt(tx_hash_hex)
- r = self.conn.do(o)
- self.assertEqual(r['status'], 1)
-
- o = c.token_of_owner_by_index(self.address, self.accounts[1], 0, sender_address=self.accounts[0])
- with self.assertRaises(JSONRPCException):
- r = self.rpc.do(o)
-
- o = c.token_of_owner_by_index(self.address, self.accounts[2], 0, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- self.assertEqual(token_bytes.hex(), strip_0x(r))
-
-
- def test_contract_ownership(self):
- token_bytes = [
- b'\xee' * 32,
- b'\xdd' * 32,
- b'\xcc' * 32,
- ]
- token_ids = []
- for t in token_bytes:
- token_id = int.from_bytes(t, byteorder='big')
- token_ids.append(token_id)
- c = self._mint(self.accounts[0], token_id)
-
- o = c.total_supply(self.address, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- supply = c.parse_total_supply(r)
- self.assertEqual(supply, 3)
-
- (tx_hash_hex, o) = c.transfer_ownership(self.address, self.accounts[0], self.accounts[4])
- r = self.rpc.do(o)
- o = receipt(tx_hash_hex)
- r = self.conn.do(o)
- self.assertEqual(r['status'], 1)
-
- for t in token_ids:
- o = c.owner_of(self.address, token_id, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- owner_address = c.parse_owner_of(r)
- self.assertEqual(strip_0x(self.accounts[4]), owner_address)
-
-
- def test_token_uri(self):
- token_bytes = b'\xee' * 32
- token_id = int.from_bytes(token_bytes, byteorder='big')
- c = self._mint(self.accounts[1], token_id)
- o = c.token_uri(self.address, token_id, sender_address=self.accounts[0])
- r = self.rpc.do(o)
- uri = c.parse_token_uri(r)
- self.assertEqual(uri, 'sha256:' + token_bytes.hex())
+class TestBasic(TestBadgeToken, TestInterface, TestInterfaceOwned):
+ pass
if __name__ == '__main__':