github.com/Finschia/finschia-sdk@v0.49.1/x/foundation/keeper/internal/migrations/v2/store_test.go (about) 1 package v2_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 simappparams "github.com/Finschia/finschia-sdk/simapp/params" 9 "github.com/Finschia/finschia-sdk/testutil" 10 sdk "github.com/Finschia/finschia-sdk/types" 11 "github.com/Finschia/finschia-sdk/x/foundation" 12 "github.com/Finschia/finschia-sdk/x/foundation/keeper/internal/migrations/v2" 13 ) 14 15 type mockSubspace struct { 16 params foundation.Params 17 } 18 19 func (ms mockSubspace) GetParamSet(ctx sdk.Context, ps v2.ParamSet) { 20 *ps.(*foundation.Params) = ms.params 21 } 22 23 func (ms *mockSubspace) SetParamSet(ctx sdk.Context, ps v2.ParamSet) { 24 ms.params = *ps.(*foundation.Params) 25 } 26 27 func TestMigrateStore(t *testing.T) { 28 foundationKey := sdk.NewKVStoreKey(foundation.StoreKey) 29 newKey := sdk.NewTransientStoreKey("transient_test") 30 encCfg := simappparams.MakeTestEncodingConfig() 31 ctx := testutil.DefaultContext(foundationKey, newKey) 32 33 for name, tc := range map[string]struct { 34 malleate func(ctx sdk.Context) 35 valid bool 36 tax sdk.Dec 37 }{ 38 "valid": { 39 malleate: func(ctx sdk.Context) { 40 // set old keys 41 bz := encCfg.Marshaler.MustMarshal(&foundation.Params{ 42 FoundationTax: sdk.MustNewDecFromStr("0.123456789"), 43 }) 44 store := ctx.KVStore(foundationKey) 45 store.Set(v2.ParamsKey, bz) 46 }, 47 valid: true, 48 tax: sdk.MustNewDecFromStr("0.123456789"), 49 }, 50 "no params found": {}, 51 "unmarshal fails": { 52 malleate: func(ctx sdk.Context) { 53 // invalid contents 54 bz := encCfg.Marshaler.MustMarshal(&foundation.Censorship{ 55 MsgTypeUrl: sdk.MsgTypeURL((*foundation.MsgWithdrawFromTreasury)(nil)), 56 Authority: foundation.CensorshipAuthorityFoundation, 57 }) 58 store := ctx.KVStore(foundationKey) 59 store.Set(v2.ParamsKey, bz) 60 }, 61 }, 62 } { 63 t.Run(name, func(t *testing.T) { 64 ctx, _ := ctx.CacheContext() 65 if tc.malleate != nil { 66 tc.malleate(ctx) 67 } 68 69 // migrate 70 subspace := &mockSubspace{} 71 err := v2.MigrateStore(ctx, foundationKey, encCfg.Marshaler, subspace) 72 if !tc.valid { 73 require.Error(t, err) 74 return 75 } 76 require.NoError(t, err) 77 78 store := ctx.KVStore(foundationKey) 79 require.Nil(t, store.Get(v2.ParamsKey)) 80 81 var params foundation.Params 82 subspace.GetParamSet(ctx, ¶ms) 83 require.EqualValues(t, tc.tax, params.FoundationTax) 84 }) 85 } 86 }