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, &params)
    84  			require.EqualValues(t, tc.tax, params.FoundationTax)
    85  		})
    86  	}
    87  }