github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/genaccounts/legacy/v0_36/migrate_test.go (about)

     1  package v0_36
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/fibonacci-chain/fbc/libs/tendermint/crypto"
     7  	"github.com/fibonacci-chain/fbc/libs/tendermint/crypto/secp256k1"
     8  
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    10  	v034distr "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/distribution/legacy/v0_34"
    11  	v034accounts "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/genaccounts/legacy/v0_34"
    12  	v034gov "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/gov/legacy/v0_34"
    13  	v034staking "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/staking/legacy/v0_34"
    14  
    15  	"github.com/stretchr/testify/require"
    16  )
    17  
    18  var (
    19  	priv                      = secp256k1.GenPrivKey()
    20  	addr                      = types.AccAddress(priv.PubKey().Address())
    21  	depositedCoinsAccAddr     = types.AccAddress(crypto.AddressHash([]byte("govDepositedCoins")))
    22  	burnedDepositCoinsAccAddr = types.AccAddress(crypto.AddressHash([]byte("govBurnedDepositCoins")))
    23  
    24  	coins     = types.Coins{types.NewInt64Coin(types.DefaultBondDenom, 10)}
    25  	halfCoins = types.Coins{types.NewInt64Coin(types.DefaultBondDenom, 5)}
    26  
    27  	accountDeposited = v034accounts.GenesisAccount{
    28  		Address:       depositedCoinsAccAddr,
    29  		Coins:         coins,
    30  		Sequence:      1,
    31  		AccountNumber: 1,
    32  
    33  		OriginalVesting:  coins,
    34  		DelegatedFree:    coins,
    35  		DelegatedVesting: coins,
    36  		StartTime:        0,
    37  		EndTime:          0,
    38  	}
    39  
    40  	accountBurned = v034accounts.GenesisAccount{
    41  		Address:       burnedDepositCoinsAccAddr,
    42  		Coins:         coins,
    43  		Sequence:      2,
    44  		AccountNumber: 2,
    45  
    46  		OriginalVesting:  coins,
    47  		DelegatedFree:    coins,
    48  		DelegatedVesting: coins,
    49  		StartTime:        0,
    50  		EndTime:          0,
    51  	}
    52  
    53  	deposit = v034gov.DepositWithMetadata{
    54  		ProposalID: 1,
    55  		Deposit: v034gov.Deposit{
    56  			ProposalID: 1,
    57  			Depositor:  addr,
    58  			Amount:     coins,
    59  		},
    60  	}
    61  )
    62  
    63  func TestMigrateEmptyRecord(t *testing.T) {
    64  
    65  	type args struct {
    66  		accounts v034accounts.GenesisState
    67  		deposits []v034gov.DepositWithMetadata
    68  	}
    69  	tests := []struct {
    70  		name string
    71  		args args
    72  	}{
    73  		{"No Accounts", args{v034accounts.GenesisState{}, []v034gov.DepositWithMetadata{}}},
    74  		{"Deposited account", args{v034accounts.GenesisState{accountDeposited}, []v034gov.DepositWithMetadata{deposit}}},
    75  		{"Burned account", args{v034accounts.GenesisState{accountBurned}, []v034gov.DepositWithMetadata{}}},
    76  		{"Burned and deposited accounts", args{v034accounts.GenesisState{accountDeposited, accountBurned}, []v034gov.DepositWithMetadata{deposit}}},
    77  	}
    78  	for _, tt := range tests {
    79  		tt := tt
    80  		t.Run(tt.name, func(t *testing.T) {
    81  			require.NotPanics(t, func() {
    82  				Migrate(
    83  					tt.args.accounts,
    84  					types.Coins{},
    85  					types.DecCoins{},
    86  					tt.args.deposits,
    87  					v034staking.Validators{},
    88  					[]v034staking.UnbondingDelegation{},
    89  					[]v034distr.ValidatorOutstandingRewardsRecord{},
    90  					types.DefaultBondDenom,
    91  					v034distr.ModuleName,
    92  					v034gov.ModuleName,
    93  				)
    94  			})
    95  		})
    96  	}
    97  }
    98  
    99  func TestMigrateWrongDeposit(t *testing.T) {
   100  	require.Panics(t, func() {
   101  		Migrate(
   102  			v034accounts.GenesisState{
   103  				accountDeposited,
   104  				accountBurned,
   105  			},
   106  			types.Coins{},
   107  			types.DecCoins{},
   108  			[]v034gov.DepositWithMetadata{
   109  				{
   110  					ProposalID: 1,
   111  					Deposit: v034gov.Deposit{
   112  						ProposalID: 1,
   113  						Depositor:  addr,
   114  						Amount:     halfCoins,
   115  					},
   116  				},
   117  			},
   118  			v034staking.Validators{},
   119  			[]v034staking.UnbondingDelegation{},
   120  			[]v034distr.ValidatorOutstandingRewardsRecord{},
   121  			types.DefaultBondDenom,
   122  			v034distr.ModuleName,
   123  			v034gov.ModuleName,
   124  		)
   125  	})
   126  }