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  }