github.com/Finschia/finschia-sdk@v0.48.1/x/gov/legacy/v043/store_test.go (about)

     1  package v043_test
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/Finschia/finschia-sdk/simapp"
    11  	"github.com/Finschia/finschia-sdk/testutil"
    12  	"github.com/Finschia/finschia-sdk/testutil/testdata"
    13  	sdk "github.com/Finschia/finschia-sdk/types"
    14  	v040gov "github.com/Finschia/finschia-sdk/x/gov/legacy/v040"
    15  	v043gov "github.com/Finschia/finschia-sdk/x/gov/legacy/v043"
    16  	"github.com/Finschia/finschia-sdk/x/gov/types"
    17  )
    18  
    19  func TestMigrateStore(t *testing.T) {
    20  	cdc := simapp.MakeTestEncodingConfig().Marshaler
    21  	govKey := sdk.NewKVStoreKey("gov")
    22  	ctx := testutil.DefaultContext(govKey, sdk.NewTransientStoreKey("transient_test"))
    23  	store := ctx.KVStore(govKey)
    24  
    25  	_, _, addr1 := testdata.KeyTestPubAddr()
    26  	proposalID := uint64(6)
    27  	now := time.Now()
    28  	// Use dummy value for keys where we don't test values.
    29  	dummyValue := []byte("foo")
    30  	// Use real values for votes, as we're testing weighted votes.
    31  	oldVote := types.Vote{ProposalId: 1, Voter: "foobar", Option: types.OptionNoWithVeto}
    32  	oldVoteValue := cdc.MustMarshal(&oldVote)
    33  	newVote := types.Vote{ProposalId: 1, Voter: "foobar", Options: types.WeightedVoteOptions{{Option: types.OptionNoWithVeto, Weight: sdk.NewDec(1)}}}
    34  	newVoteValue := cdc.MustMarshal(&newVote)
    35  
    36  	testCases := []struct {
    37  		name                               string
    38  		oldKey, oldValue, newKey, newValue []byte
    39  	}{
    40  		{
    41  			"ProposalKey",
    42  			v040gov.ProposalKey(proposalID), dummyValue,
    43  			types.ProposalKey(proposalID), dummyValue,
    44  		},
    45  		{
    46  			"ActiveProposalQueue",
    47  			v040gov.ActiveProposalQueueKey(proposalID, now), dummyValue,
    48  			types.ActiveProposalQueueKey(proposalID, now), dummyValue,
    49  		},
    50  		{
    51  			"InactiveProposalQueue",
    52  			v040gov.InactiveProposalQueueKey(proposalID, now), dummyValue,
    53  			types.InactiveProposalQueueKey(proposalID, now), dummyValue,
    54  		},
    55  		{
    56  			"ProposalIDKey",
    57  			v040gov.ProposalIDKey, dummyValue,
    58  			types.ProposalIDKey, dummyValue,
    59  		},
    60  		{
    61  			"DepositKey",
    62  			v040gov.DepositKey(proposalID, addr1), dummyValue,
    63  			types.DepositKey(proposalID, addr1), dummyValue,
    64  		},
    65  		{
    66  			"VotesKeyPrefix",
    67  			v040gov.VoteKey(proposalID, addr1), oldVoteValue,
    68  			types.VoteKey(proposalID, addr1), newVoteValue,
    69  		},
    70  	}
    71  
    72  	// Set all the old keys to the store
    73  	for _, tc := range testCases {
    74  		store.Set(tc.oldKey, tc.oldValue)
    75  	}
    76  
    77  	// Run migrations.
    78  	err := v043gov.MigrateStore(ctx, govKey, cdc)
    79  	require.NoError(t, err)
    80  
    81  	// Make sure the new keys are set and old keys are deleted.
    82  	for _, tc := range testCases {
    83  		tc := tc
    84  		t.Run(tc.name, func(t *testing.T) {
    85  			if !bytes.Equal(tc.oldKey, tc.newKey) {
    86  				require.Nil(t, store.Get(tc.oldKey))
    87  			}
    88  			require.Equal(t, tc.newValue, store.Get(tc.newKey))
    89  		})
    90  	}
    91  }