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  }