github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/gov/genesis_test.go (about) 1 package gov 2 3 import ( 4 "testing" 5 "time" 6 7 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 8 "github.com/stretchr/testify/require" 9 10 "github.com/fibonacci-chain/fbc/x/gov/keeper" 11 "github.com/fibonacci-chain/fbc/x/gov/types" 12 ) 13 14 func TestInitGenesisState(t *testing.T) { 15 ctx, _, gk, _, _ := keeper.CreateTestInput(t, false, 1000) 16 17 initialDeposit := sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 50)} 18 deposits := types.Deposits{ 19 {ProposalID: 1, Depositor: keeper.Addrs[0], Amount: initialDeposit}, 20 } 21 votes := types.Votes{ 22 {ProposalID: 2, Voter: keeper.Addrs[1], Option: types.OptionYes}, 23 } 24 proposals := types.Proposals{ 25 types.Proposal{ 26 ProposalID: 1, 27 Status: StatusDepositPeriod, 28 FinalTallyResult: EmptyTallyResult(sdk.ZeroDec()), 29 }, 30 types.Proposal{ 31 ProposalID: 2, 32 Status: StatusVotingPeriod, 33 FinalTallyResult: EmptyTallyResult(sdk.ZeroDec()), 34 }, 35 } 36 waitingProposals := map[string]uint64{"2": 1234} 37 38 data := GenesisState{ 39 StartingProposalID: 3, 40 Deposits: deposits, 41 Votes: votes, 42 Proposals: proposals, 43 WaitingProposals: waitingProposals, 44 } 45 46 InitGenesis(ctx, gk, gk.SupplyKeeper(), data) 47 // 0x00 48 proposal0, ok := gk.GetProposal(ctx, data.Proposals[0].ProposalID) 49 require.True(t, ok) 50 proposal1, ok := gk.GetProposal(ctx, data.Proposals[1].ProposalID) 51 require.True(t, ok) 52 require.Equal(t, data.Proposals[0], proposal0) 53 require.Equal(t, data.Proposals[1], proposal1) 54 // 0x01 55 var activeProposal types.Proposal 56 gk.IterateActiveProposalsQueue(ctx, time.Now(), func(proposal types.Proposal, 57 ) (stop bool) { 58 activeProposal = proposal 59 return false 60 }) 61 require.Equal(t, data.Proposals[1], activeProposal) 62 // 0x02 63 gk.IterateInactiveProposalsQueue(ctx, time.Now(), func(proposal types.Proposal, 64 ) (stop bool) { 65 activeProposal = proposal 66 return false 67 }) 68 require.Equal(t, data.Proposals[0], activeProposal) 69 // 0x03 70 pid, err := gk.GetProposalID(ctx) 71 require.NoError(t, err) 72 require.Equal(t, data.Proposals[1].ProposalID+1, pid) 73 // 0x10 74 deposit, ok := gk.GetDeposit(ctx, data.Deposits[0].ProposalID, data.Deposits[0].Depositor) 75 require.True(t, ok) 76 require.Equal(t, data.Deposits[0], deposit) 77 // 0x11 78 // getProposalDepositCnt not public method 79 // Referenced by other methods,such as GetDeposit and GetProposal 80 // 0x20 81 require.Equal(t, types.Votes(nil), gk.GetVotes(ctx, data.Proposals[0].ProposalID)) 82 require.Equal(t, data.Votes, gk.GetVotes(ctx, data.Proposals[1].ProposalID)) 83 // 0x21 84 // getProposalVoteCnt not public method 85 // Referenced by other methods,such as GetVotes 86 // 0x30 87 var waitingProposal types.Proposal 88 gk.IterateWaitingProposalsQueue(ctx, 1234, func(proposal types.Proposal, 89 ) (stop bool) { 90 waitingProposal = proposal 91 return false 92 }) 93 require.Equal(t, data.Proposals[1], waitingProposal) 94 95 inactiveQueue := gk.InactiveProposalQueueIterator(ctx, ctx.BlockHeader().Time) 96 require.True(t, inactiveQueue.Valid()) 97 inactiveQueue.Close() 98 activeQueue := gk.ActiveProposalQueueIterator(ctx, ctx.BlockHeader().Time) 99 require.True(t, activeQueue.Valid()) 100 activeQueue.Close() 101 102 exportGenesis := ExportGenesis(ctx, gk) 103 require.Equal(t, data.Deposits, exportGenesis.Deposits) 104 require.Equal(t, data.Votes, exportGenesis.Votes) 105 106 newCtx, _, newgk, _, _ := keeper.CreateTestInput(t, false, 1000) 107 InitGenesis(newCtx, newgk, newgk.SupplyKeeper(), exportGenesis) 108 // 0x00 109 proposal0, ok = newgk.GetProposal(newCtx, exportGenesis.Proposals[0].ProposalID) 110 require.True(t, ok) 111 proposal1, ok = newgk.GetProposal(newCtx, exportGenesis.Proposals[1].ProposalID) 112 require.True(t, ok) 113 require.Equal(t, exportGenesis.Proposals[0], proposal0) 114 require.Equal(t, exportGenesis.Proposals[1], proposal1) 115 // 0x01 116 newgk.IterateActiveProposalsQueue(newCtx, time.Now(), func(proposal types.Proposal, 117 ) (stop bool) { 118 activeProposal = proposal 119 return false 120 }) 121 require.Equal(t, exportGenesis.Proposals[1], activeProposal) 122 // 0x02 123 newgk.IterateInactiveProposalsQueue(newCtx, time.Now(), func(proposal types.Proposal, 124 ) (stop bool) { 125 activeProposal = proposal 126 return false 127 }) 128 require.Equal(t, exportGenesis.Proposals[0], activeProposal) 129 // 0x03 130 pid, err = newgk.GetProposalID(newCtx) 131 require.NoError(t, err) 132 require.Equal(t, exportGenesis.Proposals[1].ProposalID+1, pid) 133 // 0x10 134 deposit, ok = newgk.GetDeposit(newCtx, exportGenesis.Deposits[0].ProposalID, exportGenesis.Deposits[0].Depositor) 135 require.True(t, ok) 136 require.Equal(t, exportGenesis.Deposits[0], deposit) 137 // 0x11 138 // getProposalDepositCnt not public method 139 // Referenced by other methods,such as GetDeposit and GetProposal 140 // 0x20 141 require.Equal(t, types.Votes(nil), newgk.GetVotes(newCtx, exportGenesis.Proposals[0].ProposalID)) 142 require.Equal(t, exportGenesis.Votes, newgk.GetVotes(newCtx, exportGenesis.Proposals[1].ProposalID)) 143 // 0x21 144 // getProposalVoteCnt not public method 145 // Referenced by other methods,such as GetVotes 146 // 0x30 147 newgk.IterateWaitingProposalsQueue(newCtx, 1234, func(proposal types.Proposal, 148 ) (stop bool) { 149 waitingProposal = proposal 150 return false 151 }) 152 require.Equal(t, exportGenesis.Proposals[1], waitingProposal) 153 154 } 155 156 func TestValidateGenesis(t *testing.T) { 157 data := GenesisState{} 158 var err sdk.Error 159 data.TallyParams.Threshold, err = sdk.NewDecFromStr("-23") 160 require.Nil(t, err) 161 require.NotNil(t, ValidateGenesis(data)) 162 163 data.TallyParams.Threshold = sdk.NewDecWithPrec(334, 3) 164 data.TallyParams.Veto, err = sdk.NewDecFromStr("-23") 165 require.Nil(t, err) 166 require.NotNil(t, ValidateGenesis(data)) 167 168 data.TallyParams.Veto = sdk.NewDecWithPrec(334, 3) 169 data.TallyParams.Quorum, err = sdk.NewDecFromStr("-23") 170 require.Nil(t, err) 171 require.NotNil(t, ValidateGenesis(data)) 172 173 data.TallyParams.Quorum = sdk.NewDecWithPrec(334, 3) 174 data.TallyParams.YesInVotePeriod, err = sdk.NewDecFromStr("-23") 175 require.Nil(t, err) 176 require.NotNil(t, ValidateGenesis(data)) 177 178 data.TallyParams.YesInVotePeriod = sdk.NewDecWithPrec(334, 3) 179 coin, err := sdk.NewDecFromStr("-23") 180 require.Nil(t, err) 181 data.DepositParams.MinDeposit = sdk.SysCoins{sdk.SysCoin{Denom: sdk.DefaultBondDenom, Amount: coin}} 182 require.NotNil(t, ValidateGenesis(data)) 183 } 184 185 func TestGenesisState_Equal(t *testing.T) { 186 var minDeposit = sdk.SysCoins{sdk.NewDecCoin(sdk.DefaultBondDenom, sdk.NewInt(100))} 187 expected := GenesisState{ 188 StartingProposalID: 1, 189 Proposals: []types.Proposal{}, 190 DepositParams: DepositParams{ 191 MinDeposit: minDeposit, 192 MaxDepositPeriod: time.Hour * 24, 193 }, 194 VotingParams: VotingParams{ 195 VotingPeriod: time.Hour * 72, 196 }, 197 TallyParams: TallyParams{ 198 Quorum: sdk.NewDecWithPrec(334, 3), 199 Threshold: sdk.NewDecWithPrec(5, 1), 200 Veto: sdk.NewDecWithPrec(334, 3), 201 YesInVotePeriod: sdk.NewDecWithPrec(667, 3), 202 }, 203 } 204 require.True(t, expected.equal(DefaultGenesisState())) 205 } 206 207 func TestGenesisState_IsEmpty(t *testing.T) { 208 require.True(t, GenesisState{}.isEmpty()) 209 }