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