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