github.com/ChainSafe/chainbridge-core@v1.4.2/chains/evm/calls/contracts/erc721/erc721_test.go (about) 1 package erc721_test 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/contracts/erc721" 8 mock_calls "github.com/ChainSafe/chainbridge-core/chains/evm/calls/mock" 9 10 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor" 11 mock_transactor "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor/mock" 12 "github.com/ethereum/go-ethereum/common" 13 "github.com/golang/mock/gomock" 14 "github.com/stretchr/testify/suite" 15 ) 16 17 type ERC721CallsTestSuite struct { 18 suite.Suite 19 gomockController *gomock.Controller 20 clientMock *mock_calls.MockClientDispatcher 21 mockContractCallerDispatcherClient *mock_calls.MockContractCallerDispatcher 22 mockTransactor *mock_transactor.MockTransactor 23 erc721ContractAddress common.Address 24 erc721Contract *erc721.ERC721Contract 25 } 26 27 var ( 28 testInteractorAddress = "0x8362bbbd6d987895E2A4630a55e69Dd8C7b9f87B" 29 ) 30 31 func TestRunERC721CallsTestSuite(t *testing.T) { 32 suite.Run(t, new(ERC721CallsTestSuite)) 33 } 34 35 func (s *ERC721CallsTestSuite) SetupSuite() {} 36 func (s *ERC721CallsTestSuite) TearDownSuite() {} 37 func (s *ERC721CallsTestSuite) SetupTest() { 38 s.gomockController = gomock.NewController(s.T()) 39 s.clientMock = mock_calls.NewMockClientDispatcher(s.gomockController) 40 s.mockContractCallerDispatcherClient = mock_calls.NewMockContractCallerDispatcher(s.gomockController) 41 s.mockTransactor = mock_transactor.NewMockTransactor(s.gomockController) 42 s.erc721ContractAddress = common.HexToAddress("0x9A0E6F91E6031C08326764655432f8F9c180fBa0") 43 s.erc721Contract = erc721.NewErc721Contract(s.mockContractCallerDispatcherClient, s.erc721ContractAddress, s.mockTransactor) 44 } 45 func (s *ERC721CallsTestSuite) TearDownTest() {} 46 47 func (s *ERC721CallsTestSuite) TestERC721Contract_PackMethod_ValidRequest_Success() { 48 res, err := s.erc721Contract.PackMethod("approve", common.Address{}, big.NewInt(10)) 49 s.Equal( 50 common.Hex2Bytes("095ea7b30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a"), 51 res, 52 ) 53 s.Nil(err) 54 } 55 56 func (s *ERC721CallsTestSuite) TestERC721Contract_PackMethod_InvalidNumberOfArguments_Fail() { 57 res, err := s.erc721Contract.PackMethod("approve", common.Address{}) 58 s.Equal( 59 []byte{}, 60 res, 61 ) 62 s.Error(err) 63 } 64 65 func (s *ERC721CallsTestSuite) TestERC721Contract_PackMethod_NotExistingMethod_Fail() { 66 res, err := s.erc721Contract.PackMethod("fail", common.Address{}) 67 s.Equal( 68 []byte{}, 69 res, 70 ) 71 s.Error(err) 72 } 73 74 func (s *ERC721CallsTestSuite) TestERC721Contract_UnpackResult_InvalidData_Fail() { 75 rawData := common.Hex2Bytes("095ea7b30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a") 76 res, err := s.erc721Contract.UnpackResult("approve", rawData) 77 s.NotNil(err) 78 s.Nil(res) 79 } 80 81 func (s *ERC721CallsTestSuite) TestERC721Contract_Approve_Success() { 82 s.mockTransactor.EXPECT().Transact( 83 &s.erc721ContractAddress, 84 gomock.Any(), 85 transactor.TransactOptions{}, 86 ).Return(&common.Hash{}, nil) 87 88 res, err := s.erc721Contract.Approve( 89 big.NewInt(1), 90 common.HexToAddress("0x9FD320F352539E8A0E9be4B63c91395575420Aac"), 91 transactor.TransactOptions{}, 92 ) 93 94 s.Nil(err) 95 s.NotNil(res) 96 } 97 98 func (s *ERC721CallsTestSuite) TestERC721Contract_AddMinter_Success() { 99 s.mockContractCallerDispatcherClient.EXPECT().From().Return(common.HexToAddress(testInteractorAddress)) 100 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 101 gomock.Any(), 102 gomock.Any(), 103 nil, 104 ).Return([]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25}, nil) 105 s.mockTransactor.EXPECT().Transact( 106 gomock.Any(), 107 gomock.Any(), 108 gomock.Any(), 109 ).Return(&common.Hash{1, 2, 3}, nil) 110 res, err := s.erc721Contract.AddMinter(common.HexToAddress(testInteractorAddress), transactor.DefaultTransactionOptions) 111 s.Equal( 112 &common.Hash{1, 2, 3}, 113 res, 114 ) 115 s.Nil(err) 116 } 117 118 func (s *ERC721CallsTestSuite) TestERC721Contract_MintTokens_Success() { 119 s.mockTransactor.EXPECT().Transact( 120 gomock.Any(), 121 gomock.Any(), 122 gomock.Any(), 123 ).Return(&common.Hash{1, 2, 3, 4, 5}, nil) 124 res, err := s.erc721Contract.Mint(big.NewInt(5), "token_uri", common.HexToAddress(testInteractorAddress), transactor.DefaultTransactionOptions) 125 s.Equal( 126 &common.Hash{1, 2, 3, 4, 5}, 127 res, 128 ) 129 s.Nil(err) 130 } 131 132 func (s *ERC721CallsTestSuite) TestERC721Contract_Owner_Success() { 133 s.mockContractCallerDispatcherClient.EXPECT().From().Return(common.HexToAddress(testInteractorAddress)) 134 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 135 gomock.Any(), 136 gomock.Any(), 137 nil, 138 ).Return([]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50}, nil) 139 res, err := s.erc721Contract.MinterRole() 140 s.Equal( 141 [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50}, 142 res, 143 ) 144 s.Nil(err) 145 } 146 147 func (s *ERC721CallsTestSuite) TestERC721Contract_MinterRole_Success() { 148 s.mockContractCallerDispatcherClient.EXPECT().From().Return(common.HexToAddress(testInteractorAddress)) 149 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 150 gomock.Any(), 151 gomock.Any(), 152 nil, 153 ).Return([]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10}, nil) 154 res, err := s.erc721Contract.MinterRole() 155 s.Equal( 156 [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10}, 157 res, 158 ) 159 s.Nil(err) 160 }