github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/gov/genesis_test.go (about) 1 package gov 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 keep "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/gov/keeper" 9 10 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 11 ) 12 13 func TestImportExportQueues(t *testing.T) { 14 // Generate mock app and keepers 15 input := getMockApp(t, 2, GenesisState{}, nil, ProposalHandler) 16 SortAddresses(input.addrs) 17 18 header := abci.Header{Height: input.mApp.LastBlockHeight() + 1} 19 input.mApp.BeginBlock(abci.RequestBeginBlock{Header: header}) 20 21 ctx := input.mApp.BaseApp.NewContext(false, abci.Header{}) 22 23 // Create two proposals, put the second into the voting period 24 proposal := keep.TestProposal 25 proposal1, err := input.keeper.SubmitProposal(ctx, proposal) 26 require.NoError(t, err) 27 proposalID1 := proposal1.ProposalID 28 29 proposal2, err := input.keeper.SubmitProposal(ctx, proposal) 30 require.NoError(t, err) 31 proposalID2 := proposal2.ProposalID 32 33 votingStarted, err := input.keeper.AddDeposit(ctx, proposalID2, input.addrs[0], input.keeper.GetDepositParams(ctx).MinDeposit) 34 require.NoError(t, err) 35 require.True(t, votingStarted) 36 37 proposal1, ok := input.keeper.GetProposal(ctx, proposalID1) 38 require.True(t, ok) 39 proposal2, ok = input.keeper.GetProposal(ctx, proposalID2) 40 require.True(t, ok) 41 require.True(t, proposal1.Status == StatusDepositPeriod) 42 require.True(t, proposal2.Status == StatusVotingPeriod) 43 44 genAccs := input.mApp.AccountKeeper.GetAllAccounts(ctx) 45 46 // Export the state and import it into a new Mock App 47 genState := ExportGenesis(ctx, input.keeper) 48 input2 := getMockApp(t, 2, genState, genAccs, ProposalHandler) 49 50 header = abci.Header{Height: input.mApp.LastBlockHeight() + 1} 51 input2.mApp.BeginBlock(abci.RequestBeginBlock{Header: header}) 52 53 ctx2 := input2.mApp.BaseApp.NewContext(false, abci.Header{}) 54 55 // Jump the time forward past the DepositPeriod and VotingPeriod 56 ctx2.SetBlockTime(ctx2.BlockHeader().Time.Add(input2.keeper.GetDepositParams(ctx2).MaxDepositPeriod).Add(input2.keeper.GetVotingParams(ctx2).VotingPeriod)) 57 58 // Make sure that they are still in the DepositPeriod and VotingPeriod respectively 59 proposal1, ok = input2.keeper.GetProposal(ctx2, proposalID1) 60 require.True(t, ok) 61 proposal2, ok = input2.keeper.GetProposal(ctx2, proposalID2) 62 require.True(t, ok) 63 require.True(t, proposal1.Status == StatusDepositPeriod) 64 require.True(t, proposal2.Status == StatusVotingPeriod) 65 66 require.Equal(t, input2.keeper.GetDepositParams(ctx2).MinDeposit, input2.keeper.GetGovernanceAccount(ctx2).GetCoins()) 67 68 // Run the endblocker. Check to make sure that proposal1 is removed from state, and proposal2 is finished VotingPeriod. 69 EndBlocker(ctx2, input2.keeper) 70 71 proposal1, ok = input2.keeper.GetProposal(ctx2, proposalID1) 72 require.False(t, ok) 73 proposal2, ok = input2.keeper.GetProposal(ctx2, proposalID2) 74 require.True(t, ok) 75 require.True(t, proposal2.Status == StatusRejected) 76 } 77 78 func TestEqualProposals(t *testing.T) { 79 // Generate mock app and keepers 80 input := getMockApp(t, 2, GenesisState{}, nil, ProposalHandler) 81 SortAddresses(input.addrs) 82 83 header := abci.Header{Height: input.mApp.LastBlockHeight() + 1} 84 input.mApp.BeginBlock(abci.RequestBeginBlock{Header: header}) 85 86 ctx := input.mApp.BaseApp.NewContext(false, abci.Header{}) 87 88 // Submit two proposals 89 proposal := keep.TestProposal 90 proposal1, err := input.keeper.SubmitProposal(ctx, proposal) 91 require.NoError(t, err) 92 proposal2, err := input.keeper.SubmitProposal(ctx, proposal) 93 require.NoError(t, err) 94 95 // They are similar but their IDs should be different 96 require.NotEqual(t, proposal1, proposal2) 97 require.False(t, keep.ProposalEqual(proposal1, proposal2)) 98 99 // Now create two genesis blocks 100 state1 := GenesisState{Proposals: []Proposal{proposal1}} 101 state2 := GenesisState{Proposals: []Proposal{proposal2}} 102 require.NotEqual(t, state1, state2) 103 require.False(t, state1.Equal(state2)) 104 105 // Now make proposals identical by setting both IDs to 55 106 proposal1.ProposalID = 55 107 proposal2.ProposalID = 55 108 require.Equal(t, proposal1, proposal1) 109 require.True(t, keep.ProposalEqual(proposal1, proposal2)) 110 111 // Reassign proposals into state 112 state1.Proposals[0] = proposal1 113 state2.Proposals[0] = proposal2 114 115 // State should be identical now.. 116 require.Equal(t, state1, state2) 117 require.True(t, state1.Equal(state2)) 118 }