github.com/ChainSafe/chainbridge-core@v1.4.2/chains/evm/calls/contracts/erc20/erc20_test.go (about) 1 package erc20_test 2 3 import ( 4 "math/big" 5 "testing" 6 7 erc20 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/contracts/erc20" 8 mock_calls "github.com/ChainSafe/chainbridge-core/chains/evm/calls/mock" 9 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor" 10 mock_transactor "github.com/ChainSafe/chainbridge-core/chains/evm/calls/transactor/mock" 11 "github.com/ethereum/go-ethereum/common" 12 "github.com/golang/mock/gomock" 13 "github.com/stretchr/testify/suite" 14 ) 15 16 type ERC20ContractCallsTestSuite struct { 17 suite.Suite 18 gomockController *gomock.Controller 19 mockContractCallerDispatcherClient *mock_calls.MockContractCallerDispatcher 20 mockTransactor *mock_transactor.MockTransactor 21 erc20contract *erc20.ERC20Contract 22 } 23 24 var ( 25 testContractAddress = "0x5f75ce92326e304962b22749bd71e36976171285" 26 testInteractorAddress = "0x8362bbbd6d987895E2A4630a55e69Dd8C7b9f87B" 27 ) 28 29 func TestRunERC20ContractCallsTestSuite(t *testing.T) { 30 suite.Run(t, new(ERC20ContractCallsTestSuite)) 31 } 32 33 func (s *ERC20ContractCallsTestSuite) SetupSuite() {} 34 func (s *ERC20ContractCallsTestSuite) TearDownSuite() {} 35 func (s *ERC20ContractCallsTestSuite) SetupTest() { 36 s.gomockController = gomock.NewController(s.T()) 37 s.mockContractCallerDispatcherClient = mock_calls.NewMockContractCallerDispatcher(s.gomockController) 38 s.mockTransactor = mock_transactor.NewMockTransactor(s.gomockController) 39 s.erc20contract = erc20.NewERC20Contract( 40 s.mockContractCallerDispatcherClient, common.HexToAddress(testContractAddress), s.mockTransactor, 41 ) 42 } 43 func (s *ERC20ContractCallsTestSuite) TearDownTest() {} 44 45 func (s *ERC20ContractCallsTestSuite) TestErc20Contract_GetBalance_Success() { 46 s.mockContractCallerDispatcherClient.EXPECT().From().Return(common.HexToAddress(testInteractorAddress)) 47 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 48 gomock.Any(), 49 gomock.Any(), 50 nil, 51 ).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, 5}, nil) 52 res, err := s.erc20contract.GetBalance(common.HexToAddress(testInteractorAddress)) 53 s.Equal( 54 big.NewInt(5), 55 res, 56 ) 57 s.Nil(err) 58 } 59 60 func (s *ERC20ContractCallsTestSuite) TestErc20Contract_MintTokens_Success() { 61 s.mockTransactor.EXPECT().Transact( 62 gomock.Any(), 63 gomock.Any(), 64 gomock.Any(), 65 ).Return(&common.Hash{1, 2, 3, 4, 5}, nil) 66 res, err := s.erc20contract.MintTokens(common.HexToAddress(testInteractorAddress), big.NewInt(10), transactor.DefaultTransactionOptions) 67 s.Equal( 68 &common.Hash{1, 2, 3, 4, 5}, 69 res, 70 ) 71 s.Nil(err) 72 } 73 74 func (s *ERC20ContractCallsTestSuite) TestErc20Contract_ApproveTokens_Success() { 75 s.mockTransactor.EXPECT().Transact( 76 gomock.Any(), 77 gomock.Any(), 78 gomock.Any(), 79 ).Return(&common.Hash{1, 2, 3, 4, 5, 6, 7, 8, 9}, nil) 80 res, err := s.erc20contract.ApproveTokens(common.HexToAddress(testInteractorAddress), big.NewInt(100), transactor.DefaultTransactionOptions) 81 s.Equal( 82 &common.Hash{1, 2, 3, 4, 5, 6, 7, 8, 9}, 83 res, 84 ) 85 s.Nil(err) 86 } 87 88 func (s *ERC20ContractCallsTestSuite) TestErc20Contract_MinterRole_Success() { 89 s.mockContractCallerDispatcherClient.EXPECT().From().Return(common.HexToAddress(testInteractorAddress)) 90 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 91 gomock.Any(), 92 gomock.Any(), 93 nil, 94 ).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) 95 res, err := s.erc20contract.MinterRole() 96 s.Equal( 97 [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}, 98 res, 99 ) 100 s.Nil(err) 101 } 102 103 func (s *ERC20ContractCallsTestSuite) TestErc20Contract_AddMinter_Success() { 104 s.mockContractCallerDispatcherClient.EXPECT().From().Return(common.HexToAddress(testInteractorAddress)) 105 s.mockContractCallerDispatcherClient.EXPECT().CallContract( 106 gomock.Any(), 107 gomock.Any(), 108 nil, 109 ).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) 110 s.mockTransactor.EXPECT().Transact( 111 gomock.Any(), 112 gomock.Any(), 113 gomock.Any(), 114 ).Return(&common.Hash{1, 2, 3}, nil) 115 res, err := s.erc20contract.AddMinter(common.HexToAddress(testInteractorAddress), transactor.DefaultTransactionOptions) 116 s.Equal( 117 &common.Hash{1, 2, 3}, 118 res, 119 ) 120 s.Nil(err) 121 }