github.com/Finschia/finschia-sdk@v0.48.1/x/gov/simulation/decoder_test.go (about)

     1  package simulation_test
     2  
     3  import (
     4  	"encoding/binary"
     5  	"fmt"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/Finschia/finschia-sdk/crypto/keys/ed25519"
    12  	"github.com/Finschia/finschia-sdk/simapp"
    13  	sdk "github.com/Finschia/finschia-sdk/types"
    14  	"github.com/Finschia/finschia-sdk/types/kv"
    15  	"github.com/Finschia/finschia-sdk/x/gov/simulation"
    16  	"github.com/Finschia/finschia-sdk/x/gov/types"
    17  )
    18  
    19  var (
    20  	delPk1   = ed25519.GenPrivKey().PubKey()
    21  	delAddr1 = sdk.AccAddress(delPk1.Address())
    22  )
    23  
    24  func TestDecodeStore(t *testing.T) {
    25  	cdc := simapp.MakeTestEncodingConfig().Marshaler
    26  	dec := simulation.NewDecodeStore(cdc)
    27  
    28  	endTime := time.Now().UTC()
    29  	content := types.ContentFromProposalType("test", "test", types.ProposalTypeText)
    30  	proposalA, err := types.NewProposal(content, 1, endTime, endTime.Add(24*time.Hour))
    31  	require.NoError(t, err)
    32  	proposalB, err := types.NewProposal(content, 2, endTime, endTime.Add(24*time.Hour))
    33  	require.NoError(t, err)
    34  
    35  	proposalIDBz := make([]byte, 8)
    36  	binary.LittleEndian.PutUint64(proposalIDBz, 1)
    37  	deposit := types.NewDeposit(1, delAddr1, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())))
    38  	vote := types.NewVote(1, delAddr1, types.NewNonSplitVoteOption(types.OptionYes))
    39  
    40  	proposalBzA, err := cdc.Marshal(&proposalA)
    41  	require.NoError(t, err)
    42  	proposalBzB, err := cdc.Marshal(&proposalB)
    43  	require.NoError(t, err)
    44  
    45  	tests := []struct {
    46  		name        string
    47  		kvA, kvB    kv.Pair
    48  		expectedLog string
    49  		wantPanic   bool
    50  	}{
    51  		{
    52  			"proposals",
    53  			kv.Pair{Key: types.ProposalKey(1), Value: proposalBzA},
    54  			kv.Pair{Key: types.ProposalKey(2), Value: proposalBzB},
    55  			fmt.Sprintf("%v\n%v", proposalA, proposalB), false,
    56  		},
    57  		{
    58  			"proposal IDs",
    59  			kv.Pair{Key: types.InactiveProposalQueueKey(1, endTime), Value: proposalIDBz},
    60  			kv.Pair{Key: types.InactiveProposalQueueKey(1, endTime), Value: proposalIDBz},
    61  			"proposalIDA: 1\nProposalIDB: 1", false,
    62  		},
    63  		{
    64  			"deposits",
    65  			kv.Pair{Key: types.DepositKey(1, delAddr1), Value: cdc.MustMarshal(&deposit)},
    66  			kv.Pair{Key: types.DepositKey(1, delAddr1), Value: cdc.MustMarshal(&deposit)},
    67  			fmt.Sprintf("%v\n%v", deposit, deposit), false,
    68  		},
    69  		{
    70  			"votes",
    71  			kv.Pair{Key: types.VoteKey(1, delAddr1), Value: cdc.MustMarshal(&vote)},
    72  			kv.Pair{Key: types.VoteKey(1, delAddr1), Value: cdc.MustMarshal(&vote)},
    73  			fmt.Sprintf("%v\n%v", vote, vote), false,
    74  		},
    75  		{
    76  			"other",
    77  			kv.Pair{Key: []byte{0x99}, Value: []byte{0x99}},
    78  			kv.Pair{Key: []byte{0x99}, Value: []byte{0x99}},
    79  			"", true,
    80  		},
    81  	}
    82  
    83  	for _, tt := range tests {
    84  		tt := tt
    85  		t.Run(tt.name, func(t *testing.T) {
    86  			if tt.wantPanic {
    87  				require.Panics(t, func() { dec(tt.kvA, tt.kvB) }, tt.name)
    88  			} else {
    89  				require.Equal(t, tt.expectedLog, dec(tt.kvA, tt.kvB), tt.name)
    90  			}
    91  		})
    92  	}
    93  }