github.com/cosmos/cosmos-sdk@v0.50.10/x/bank/migrations/v4/gen_state_test.go (about)

     1  package v4_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  
     8  	sdkmath "cosmossdk.io/math"
     9  
    10  	sdk "github.com/cosmos/cosmos-sdk/types"
    11  	v4 "github.com/cosmos/cosmos-sdk/x/bank/migrations/v4"
    12  	"github.com/cosmos/cosmos-sdk/x/bank/types"
    13  )
    14  
    15  func TestMigrateGenState(t *testing.T) {
    16  	tests := []struct {
    17  		name     string
    18  		oldState *types.GenesisState
    19  		newState *types.GenesisState
    20  	}{
    21  		{
    22  			name: "Balances supply metadata all unchanged",
    23  			oldState: &types.GenesisState{
    24  				Params: types.Params{},
    25  				Balances: []types.Balance{{
    26  					Address: "balance1",
    27  					Coins:   sdk.Coins{sdk.NewCoin("balance1coin", sdkmath.NewInt(8))},
    28  				}},
    29  				Supply: sdk.Coins{sdk.NewCoin("supplycoin", sdkmath.NewInt(800))},
    30  				DenomMetadata: []types.Metadata{{
    31  					Description: "metadesk",
    32  					DenomUnits:  nil,
    33  					Base:        "meta",
    34  					Display:     "meta",
    35  					Name:        "foo",
    36  					Symbol:      "META",
    37  					URI:         "",
    38  					URIHash:     "",
    39  				}},
    40  				SendEnabled: []types.SendEnabled{},
    41  			},
    42  			newState: &types.GenesisState{
    43  				Params: types.Params{},
    44  				Balances: []types.Balance{{
    45  					Address: "balance1",
    46  					Coins:   sdk.Coins{sdk.NewCoin("balance1coin", sdkmath.NewInt(8))},
    47  				}},
    48  				Supply: sdk.Coins{sdk.NewCoin("supplycoin", sdkmath.NewInt(800))},
    49  				DenomMetadata: []types.Metadata{{
    50  					Description: "metadesk",
    51  					DenomUnits:  nil,
    52  					Base:        "meta",
    53  					Display:     "meta",
    54  					Name:        "foo",
    55  					Symbol:      "META",
    56  					URI:         "",
    57  					URIHash:     "",
    58  				}},
    59  				SendEnabled: []types.SendEnabled{},
    60  			},
    61  		},
    62  
    63  		{
    64  			name: "default send enabled true not changed",
    65  			oldState: &types.GenesisState{
    66  				Params: types.Params{DefaultSendEnabled: true},
    67  			},
    68  			newState: &types.GenesisState{
    69  				Params: types.Params{DefaultSendEnabled: true},
    70  			},
    71  		},
    72  		{
    73  			name: "default send enabled false not changed",
    74  			oldState: &types.GenesisState{
    75  				Params: types.Params{DefaultSendEnabled: false, SendEnabled: []*types.SendEnabled{}},
    76  			},
    77  			newState: &types.GenesisState{
    78  				Params: types.Params{DefaultSendEnabled: false},
    79  			},
    80  		},
    81  		{
    82  			name: "send enabled entries moved",
    83  			oldState: &types.GenesisState{
    84  				Params: types.Params{
    85  					SendEnabled: []*types.SendEnabled{
    86  						{Denom: "movecointrue", Enabled: true},
    87  						{Denom: "movecoinfalse", Enabled: false},
    88  					},
    89  				},
    90  			},
    91  			newState: &types.GenesisState{
    92  				Params: types.Params{},
    93  				SendEnabled: []types.SendEnabled{
    94  					{Denom: "movecointrue", Enabled: true},
    95  					{Denom: "movecoinfalse", Enabled: false},
    96  				},
    97  			},
    98  		},
    99  		{
   100  			name: "params entries added to existing",
   101  			oldState: &types.GenesisState{
   102  				Params: types.Params{
   103  					SendEnabled: []*types.SendEnabled{
   104  						{Denom: "movecointrue", Enabled: true},
   105  						{Denom: "movecoinfalse", Enabled: false},
   106  					},
   107  				},
   108  				SendEnabled: []types.SendEnabled{
   109  					{Denom: "staycoin", Enabled: true},
   110  				},
   111  			},
   112  			newState: &types.GenesisState{
   113  				Params: types.Params{},
   114  				SendEnabled: []types.SendEnabled{
   115  					{Denom: "staycoin", Enabled: true},
   116  					{Denom: "movecointrue", Enabled: true},
   117  					{Denom: "movecoinfalse", Enabled: false},
   118  				},
   119  			},
   120  		},
   121  		{
   122  			name: "conflicting params ignored",
   123  			oldState: &types.GenesisState{
   124  				Params: types.Params{
   125  					SendEnabled: []*types.SendEnabled{
   126  						{Denom: "staycoin", Enabled: false},
   127  					},
   128  				},
   129  				SendEnabled: []types.SendEnabled{
   130  					{Denom: "staycoin", Enabled: true},
   131  				},
   132  			},
   133  			newState: &types.GenesisState{
   134  				Params: types.Params{},
   135  				SendEnabled: []types.SendEnabled{
   136  					{Denom: "staycoin", Enabled: true},
   137  				},
   138  			},
   139  		},
   140  	}
   141  
   142  	for _, tc := range tests {
   143  		t.Run(tc.name, func(t *testing.T) {
   144  			actual := v4.MigrateGenState(tc.oldState)
   145  			assert.Equal(t, tc.newState, actual)
   146  		})
   147  	}
   148  
   149  	t.Run("ensure original not changed", func(t *testing.T) {
   150  		origState := types.GenesisState{
   151  			Params: types.Params{
   152  				SendEnabled: []*types.SendEnabled{
   153  					{Denom: "movecointrue", Enabled: true},
   154  					{Denom: "movecoinfalse", Enabled: false},
   155  				},
   156  			},
   157  		}
   158  		_ = v4.MigrateGenState(&origState)
   159  		assert.Len(t, origState.Params.SendEnabled, 2) //nolint:staticcheck // keep for test (linter sometimes fails)
   160  	})
   161  }