@@ -9,6 +9,12 @@ import (
99
1010 "github.com/cosmos/cosmos-sdk/simapp"
1111 sdk "github.com/cosmos/cosmos-sdk/types"
12+ "github.com/cosmos/cosmos-sdk/x/gov/types"
13+ )
14+
15+ const (
16+ baseDepositTestAmount = 100
17+ baseDepositTestPercent = 25
1218)
1319
1420func TestDeposits (t * testing.T ) {
@@ -108,3 +114,102 @@ func TestDeposits(t *testing.T) {
108114 deposits = app .GovKeeper .GetDeposits (ctx , proposalID )
109115 require .Len (t , deposits , 0 )
110116}
117+
118+ func TestValidateInitialDeposit (t * testing.T ) {
119+ testcases := map [string ]struct {
120+ minDeposit sdk.Coins
121+ minInitialDepositPercent int64
122+ initialDeposit sdk.Coins
123+
124+ expectError bool
125+ }{
126+ "min deposit * initial percent == initial deposit: success" : {
127+ minDeposit : sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount ))),
128+ minInitialDepositPercent : baseDepositTestPercent ,
129+ initialDeposit : sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount * baseDepositTestPercent / 100 ))),
130+ },
131+ "min deposit * initial percent < initial deposit: success" : {
132+ minDeposit : sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount ))),
133+ minInitialDepositPercent : baseDepositTestPercent ,
134+ initialDeposit : sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount * baseDepositTestPercent / 100 + 1 ))),
135+ },
136+ "min deposit * initial percent > initial deposit: error" : {
137+ minDeposit : sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount ))),
138+ minInitialDepositPercent : baseDepositTestPercent ,
139+ initialDeposit : sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount * baseDepositTestPercent / 100 - 1 ))),
140+
141+ expectError : true ,
142+ },
143+ "min deposit * initial percent == initial deposit (non-base values and denom): success" : {
144+ minDeposit : sdk .NewCoins (sdk .NewCoin ("uosmo" , sdk .NewInt (56912 ))),
145+ minInitialDepositPercent : 50 ,
146+ initialDeposit : sdk .NewCoins (sdk .NewCoin ("uosmo" , sdk .NewInt (56912 / 2 + 10 ))),
147+ },
148+ "min deposit * initial percent == initial deposit but different denoms: error" : {
149+ minDeposit : sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount ))),
150+ minInitialDepositPercent : baseDepositTestPercent ,
151+ initialDeposit : sdk .NewCoins (sdk .NewCoin ("uosmo" , sdk .NewInt (baseDepositTestAmount * baseDepositTestPercent / 100 ))),
152+
153+ expectError : true ,
154+ },
155+ "min deposit * initial percent == initial deposit (multiple coins): success" : {
156+ minDeposit : sdk .NewCoins (
157+ sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount )),
158+ sdk .NewCoin ("uosmo" , sdk .NewInt (baseDepositTestAmount * 2 ))),
159+ minInitialDepositPercent : baseDepositTestPercent ,
160+ initialDeposit : sdk .NewCoins (
161+ sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount * baseDepositTestPercent / 100 )),
162+ sdk .NewCoin ("uosmo" , sdk .NewInt (baseDepositTestAmount * 2 * baseDepositTestPercent / 100 )),
163+ ),
164+ },
165+ "min deposit * initial percent > initial deposit (multiple coins): error" : {
166+ minDeposit : sdk .NewCoins (
167+ sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount )),
168+ sdk .NewCoin ("uosmo" , sdk .NewInt (baseDepositTestAmount * 2 ))),
169+ minInitialDepositPercent : baseDepositTestPercent ,
170+ initialDeposit : sdk .NewCoins (
171+ sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount * baseDepositTestPercent / 100 )),
172+ sdk .NewCoin ("uosmo" , sdk .NewInt (baseDepositTestAmount * 2 * baseDepositTestPercent / 100 - 1 )),
173+ ),
174+
175+ expectError : true ,
176+ },
177+ "min deposit * initial percent < initial deposit (multiple coins - coin not required by min deposit): success" : {
178+ minDeposit : sdk .NewCoins (
179+ sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount ))),
180+ minInitialDepositPercent : baseDepositTestPercent ,
181+ initialDeposit : sdk .NewCoins (
182+ sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount * baseDepositTestPercent / 100 )),
183+ sdk .NewCoin ("uosmo" , sdk .NewInt (baseDepositTestAmount * baseDepositTestPercent / 100 - 1 )),
184+ ),
185+ },
186+ "0 initial percent: success" : {
187+ minDeposit : sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount ))),
188+ minInitialDepositPercent : 0 ,
189+ initialDeposit : sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , sdk .NewInt (baseDepositTestAmount * baseDepositTestPercent / 100 ))),
190+ },
191+ }
192+
193+ for name , tc := range testcases {
194+ t .Run (name , func (t * testing.T ) {
195+ app := simapp .Setup (false )
196+ ctx := app .BaseApp .NewContext (false , tmproto.Header {})
197+
198+ govKeeper := app .GovKeeper
199+
200+ params := types .DefaultDepositParams ()
201+ params .MinDeposit = tc .minDeposit
202+ params .MinInitialDepositRatio = sdk .NewDec (tc .minInitialDepositPercent ).Quo (sdk .NewDec (100 ))
203+
204+ govKeeper .SetDepositParams (ctx , params )
205+
206+ err := govKeeper .ValidateInitialDeposit (ctx , tc .initialDeposit )
207+
208+ if tc .expectError {
209+ require .Error (t , err )
210+ return
211+ }
212+ require .NoError (t , err )
213+ })
214+ }
215+ }
0 commit comments