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  }