github.com/cosmos/cosmos-sdk@v0.50.10/x/gov/migrations/v3/json_test.go (about) 1 package v3_test 2 3 import ( 4 "encoding/json" 5 "testing" 6 "time" 7 8 "github.com/cosmos/gogoproto/proto" 9 "github.com/stretchr/testify/require" 10 11 sdkmath "cosmossdk.io/math" 12 13 "github.com/cosmos/cosmos-sdk/client" 14 codectypes "github.com/cosmos/cosmos-sdk/codec/types" 15 sdk "github.com/cosmos/cosmos-sdk/types" 16 moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" 17 authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" 18 "github.com/cosmos/cosmos-sdk/x/gov" 19 v3 "github.com/cosmos/cosmos-sdk/x/gov/migrations/v3" 20 "github.com/cosmos/cosmos-sdk/x/gov/types" 21 v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" 22 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" 23 ) 24 25 var voter = sdk.MustAccAddressFromBech32("cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh") 26 27 func TestMigrateJSON(t *testing.T) { 28 encodingConfig := moduletestutil.MakeTestEncodingConfig(gov.AppModuleBasic{}) 29 clientCtx := client.Context{}. 30 WithInterfaceRegistry(encodingConfig.InterfaceRegistry). 31 WithTxConfig(encodingConfig.TxConfig). 32 WithCodec(encodingConfig.Codec) 33 34 govGenState := v1beta1.DefaultGenesisState() 35 propTime := time.Unix(1e9, 0) 36 contentAny, err := codectypes.NewAnyWithValue(v1beta1.NewTextProposal("my title", "my desc").(proto.Message)) 37 require.NoError(t, err) 38 govGenState.Proposals = v1beta1.Proposals{ 39 v1beta1.Proposal{ 40 ProposalId: 1, 41 Content: contentAny, 42 SubmitTime: propTime, 43 DepositEndTime: propTime, 44 VotingStartTime: propTime, 45 VotingEndTime: propTime, 46 Status: v1beta1.StatusDepositPeriod, 47 FinalTallyResult: v1beta1.EmptyTallyResult(), 48 TotalDeposit: sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(123))), 49 }, 50 } 51 govGenState.Votes = v1beta1.Votes{ 52 v1beta1.Vote{ProposalId: 1, Voter: voter.String(), Option: v1beta1.OptionAbstain}, 53 v1beta1.Vote{ProposalId: 2, Voter: voter.String(), Options: v1beta1.NewNonSplitVoteOption(v1beta1.OptionNo)}, 54 } 55 56 migrated, err := v3.MigrateJSON(govGenState) 57 require.NoError(t, err) 58 59 // Make sure the migrated proposal's Msg signer is the gov acct. 60 require.Equal(t, 61 authtypes.NewModuleAddress(types.ModuleName).String(), 62 migrated.Proposals[0].Messages[0].GetCachedValue().(*v1.MsgExecLegacyContent).Authority, 63 ) 64 65 bz, err := clientCtx.Codec.MarshalJSON(migrated) 66 require.NoError(t, err) 67 68 // Indent the JSON bz correctly. 69 var jsonObj map[string]interface{} 70 err = json.Unmarshal(bz, &jsonObj) 71 require.NoError(t, err) 72 indentedBz, err := json.MarshalIndent(jsonObj, "", "\t") 73 require.NoError(t, err) 74 75 // Make sure about: 76 // - Proposals use MsgExecLegacyContent 77 expected := `{ 78 "constitution": "", 79 "deposit_params": { 80 "max_deposit_period": "172800s", 81 "min_deposit": [ 82 { 83 "amount": "10000000", 84 "denom": "stake" 85 } 86 ] 87 }, 88 "deposits": [], 89 "params": null, 90 "proposals": [ 91 { 92 "deposit_end_time": "2001-09-09T01:46:40Z", 93 "expedited": false, 94 "failed_reason": "", 95 "final_tally_result": { 96 "abstain_count": "0", 97 "no_count": "0", 98 "no_with_veto_count": "0", 99 "yes_count": "0" 100 }, 101 "id": "1", 102 "messages": [ 103 { 104 "@type": "/cosmos.gov.v1.MsgExecLegacyContent", 105 "authority": "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", 106 "content": { 107 "@type": "/cosmos.gov.v1beta1.TextProposal", 108 "description": "my desc", 109 "title": "my title" 110 } 111 } 112 ], 113 "metadata": "", 114 "proposer": "", 115 "status": "PROPOSAL_STATUS_DEPOSIT_PERIOD", 116 "submit_time": "2001-09-09T01:46:40Z", 117 "summary": "my desc", 118 "title": "my title", 119 "total_deposit": [ 120 { 121 "amount": "123", 122 "denom": "stake" 123 } 124 ], 125 "voting_end_time": "2001-09-09T01:46:40Z", 126 "voting_start_time": "2001-09-09T01:46:40Z" 127 } 128 ], 129 "starting_proposal_id": "1", 130 "tally_params": { 131 "quorum": "0.334000000000000000", 132 "threshold": "0.500000000000000000", 133 "veto_threshold": "0.334000000000000000" 134 }, 135 "votes": [ 136 { 137 "metadata": "", 138 "options": [ 139 { 140 "option": "VOTE_OPTION_ABSTAIN", 141 "weight": "1.000000000000000000" 142 } 143 ], 144 "proposal_id": "1", 145 "voter": "cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh" 146 }, 147 { 148 "metadata": "", 149 "options": [ 150 { 151 "option": "VOTE_OPTION_NO", 152 "weight": "1.000000000000000000" 153 } 154 ], 155 "proposal_id": "2", 156 "voter": "cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh" 157 } 158 ], 159 "voting_params": { 160 "voting_period": "172800s" 161 } 162 }` 163 164 require.Equal(t, expected, string(indentedBz)) 165 }