github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/feesplit/types/genesis_test.go (about)

     1  package types
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/ethereum/go-ethereum/common"
     7  
     8  	"github.com/fibonacci-chain/fbc/app/crypto/ethsecp256k1"
     9  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    10  	"github.com/stretchr/testify/suite"
    11  )
    12  
    13  type GenesisTestSuite struct {
    14  	suite.Suite
    15  	address1  sdk.AccAddress
    16  	address2  sdk.AccAddress
    17  	contract1 common.Address
    18  	contract2 common.Address
    19  }
    20  
    21  func TestGenesisTestSuite(t *testing.T) {
    22  	suite.Run(t, new(GenesisTestSuite))
    23  }
    24  
    25  func (suite *GenesisTestSuite) SetupTest() {
    26  	suite.address1 = sdk.AccAddress(ethsecp256k1.GenerateAddress().Bytes())
    27  	suite.address2 = sdk.AccAddress(ethsecp256k1.GenerateAddress().Bytes())
    28  	suite.contract1 = ethsecp256k1.GenerateAddress()
    29  	suite.contract2 = ethsecp256k1.GenerateAddress()
    30  }
    31  
    32  func (suite *GenesisTestSuite) TestValidateGenesis() {
    33  	newGen := NewGenesisState(DefaultParams(), []FeeSplit{})
    34  	testCases := []struct {
    35  		name     string
    36  		genState GenesisState
    37  		expPass  bool
    38  	}{
    39  		{
    40  			name:     "valid genesis constructor",
    41  			genState: newGen,
    42  			expPass:  true,
    43  		},
    44  		{
    45  			name:     "default",
    46  			genState: DefaultGenesisState(),
    47  			expPass:  true,
    48  		},
    49  		{
    50  			name: "valid genesis",
    51  			genState: GenesisState{
    52  				Params:    DefaultParams(),
    53  				FeeSplits: []FeeSplit{},
    54  			},
    55  			expPass: true,
    56  		},
    57  		{
    58  			name: "valid genesis - with fee",
    59  			genState: GenesisState{
    60  				Params: DefaultParams(),
    61  				FeeSplits: []FeeSplit{
    62  					{
    63  						ContractAddress: suite.contract1,
    64  						DeployerAddress: suite.address1,
    65  					},
    66  					{
    67  						ContractAddress:   suite.contract2,
    68  						DeployerAddress:   suite.address2,
    69  						WithdrawerAddress: suite.address2,
    70  					},
    71  				},
    72  			},
    73  			expPass: true,
    74  		},
    75  		{
    76  			name:     "empty genesis",
    77  			genState: GenesisState{},
    78  			expPass:  false,
    79  		},
    80  		{
    81  			name: "invalid genesis - duplicated fee",
    82  			genState: GenesisState{
    83  				Params: DefaultParams(),
    84  				FeeSplits: []FeeSplit{
    85  					{
    86  						ContractAddress: suite.contract1,
    87  						DeployerAddress: suite.address1,
    88  					},
    89  					{
    90  						ContractAddress: suite.contract1,
    91  						DeployerAddress: suite.address1,
    92  					},
    93  				},
    94  			},
    95  			expPass: false,
    96  		},
    97  		{
    98  			name: "invalid genesis - duplicated fee with different deployer address",
    99  			genState: GenesisState{
   100  				Params: DefaultParams(),
   101  				FeeSplits: []FeeSplit{
   102  					{
   103  						ContractAddress: suite.contract1,
   104  						DeployerAddress: suite.address1,
   105  					},
   106  					{
   107  						ContractAddress: suite.contract1,
   108  						DeployerAddress: suite.address2,
   109  					},
   110  				},
   111  			},
   112  			expPass: false,
   113  		},
   114  		{
   115  			name: "invalid genesis - invalid contract address",
   116  			genState: GenesisState{
   117  				Params: DefaultParams(),
   118  				FeeSplits: []FeeSplit{
   119  					{
   120  						ContractAddress: common.Address{},
   121  						DeployerAddress: suite.address1,
   122  					},
   123  				},
   124  			},
   125  			expPass: false,
   126  		},
   127  	}
   128  
   129  	for _, tc := range testCases {
   130  		err := tc.genState.Validate()
   131  		if tc.expPass {
   132  			suite.Require().NoError(err, tc.name)
   133  		} else {
   134  			suite.Require().Error(err, tc.name)
   135  		}
   136  	}
   137  }