commit d5174a7acaad0a395bbbd48b4e8ab29176eed2ee
parent d093fdb3631e673cbd2e2c0ee6e6d88de77e1296
Author: nolash <dev@holbrook.no>
Date:   Fri,  7 May 2021 22:27:39 +0200
Add total supply, token index change test
Diffstat:
2 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/python/eth_devbadge/token.py b/python/eth_devbadge/token.py
@@ -142,6 +142,19 @@ class BadgeToken(TxFactory):
         return o
 
 
+    def total_supply(self, contract_address, sender_address=ZERO_ADDRESS):
+        o = jsonrpc_template()
+        o['method'] = 'eth_call'
+        enc = ABIContractEncoder()
+        enc.method('totalSupply')
+        data = add_0x(enc.get())
+        tx = self.template(sender_address, contract_address)
+        tx = self.set_code(tx, data)
+        o['params'].append(self.normalize(tx))
+        o['params'].append('latest')
+        return o
+
+
     @classmethod
     def parse_owner_of(self, v):
         return abi_decode_single(ABIContractType.ADDRESS, v)
@@ -157,3 +170,8 @@ class BadgeToken(TxFactory):
         return abi_decode_single(ABIContractType.UINT256, v)
 
 
+    @classmethod
+    def parse_total_supply(self, v):
+        return abi_decode_single(ABIContractType.UINT256, v)
+
+
diff --git a/python/tests/test_app.py b/python/tests/test_app.py
@@ -18,6 +18,7 @@ from chainlib.eth.contract import (
         abi_decode_single,
         ABIContractType,
         )
+from chainlib.error import JSONRPCException
 from hexathon import (
         add_0x,
         strip_0x,
@@ -71,6 +72,12 @@ class Test(EthTesterCase):
         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)
+
 
     def test_owner(self):
         token_bytes = b'\xee' * 32
@@ -85,12 +92,12 @@ class Test(EthTesterCase):
 
         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_transfer(self):
-        token_id = int.from_bytes(b'\xee' * 32, byteorder='big')
+        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)
@@ -102,7 +109,14 @@ class Test(EthTesterCase):
         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))
+       
 if __name__ == '__main__':
     unittest.main()