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 }