github.com/KiraCore/sekai@v0.3.43/x/basket/keeper/basket_test.go (about) 1 package keeper_test 2 3 import ( 4 "time" 5 6 "github.com/KiraCore/sekai/x/basket/types" 7 sdk "github.com/cosmos/cosmos-sdk/types" 8 ) 9 10 func (suite *KeeperTestSuite) TestLastBasketIdGetSet() { 11 suite.SetupTest() 12 13 now := time.Now().UTC() 14 suite.ctx = suite.ctx.WithBlockTime(now.Add(time.Hour)) 15 16 suite.app.BasketKeeper.SetLastBasketId(suite.ctx, 1) 17 lastBasketId := suite.app.BasketKeeper.GetLastBasketId(suite.ctx) 18 suite.Require().Equal(lastBasketId, uint64(1)) 19 } 20 21 func (suite *KeeperTestSuite) TestBasketSetGetDelete() { 22 baskets := []types.Basket{ 23 { 24 Id: 1, 25 Suffix: "usd", 26 Description: "usd basket", 27 LimitsPeriod: 1800, 28 Amount: sdk.NewInt(1000), 29 SwapFee: sdk.NewDecWithPrec(1, 2), // 1% 30 SlipppageFeeMin: sdk.NewDecWithPrec(1, 2), // 1% 31 TokensCap: sdk.NewDecWithPrec(9, 1), // 90% 32 MintsMin: sdk.NewInt(1), 33 MintsMax: sdk.NewInt(100000000), 34 MintsDisabled: false, 35 BurnsMin: sdk.NewInt(1), 36 BurnsMax: sdk.NewInt(100000000), 37 BurnsDisabled: false, 38 SwapsMin: sdk.NewInt(1), 39 SwapsMax: sdk.NewInt(100000000), 40 SwapsDisabled: false, 41 Tokens: []types.BasketToken{ 42 { 43 Denom: "usd1", 44 Weight: sdk.NewDec(1), 45 Amount: sdk.NewInt(500), 46 Deposits: true, 47 Withdraws: true, 48 Swaps: true, 49 }, 50 { 51 Denom: "usd2", 52 Weight: sdk.NewDec(10), 53 Amount: sdk.NewInt(50), 54 Deposits: true, 55 Withdraws: true, 56 Swaps: true, 57 }, 58 }, 59 Surplus: sdk.NewCoins(sdk.NewInt64Coin("usd2", 1)), 60 }, 61 { 62 Id: 2, 63 Suffix: "euro", 64 Description: "euro basket", 65 LimitsPeriod: 1800, 66 Amount: sdk.NewInt(1000), 67 SwapFee: sdk.NewDecWithPrec(1, 2), // 1% 68 SlipppageFeeMin: sdk.NewDecWithPrec(1, 2), // 1% 69 TokensCap: sdk.NewDecWithPrec(9, 1), // 90% 70 MintsMin: sdk.NewInt(1), 71 MintsMax: sdk.NewInt(100000000), 72 MintsDisabled: false, 73 BurnsMin: sdk.NewInt(1), 74 BurnsMax: sdk.NewInt(100000000), 75 BurnsDisabled: false, 76 SwapsMin: sdk.NewInt(1), 77 SwapsMax: sdk.NewInt(100000000), 78 SwapsDisabled: false, 79 Tokens: []types.BasketToken{ 80 { 81 Denom: "euro1", 82 Weight: sdk.NewDec(1), 83 Amount: sdk.NewInt(500), 84 Deposits: true, 85 Withdraws: true, 86 Swaps: true, 87 }, 88 { 89 Denom: "euro2", 90 Weight: sdk.NewDec(10), 91 Amount: sdk.NewInt(50), 92 Deposits: true, 93 Withdraws: true, 94 Swaps: true, 95 }, 96 }, 97 Surplus: sdk.NewCoins(sdk.NewInt64Coin("euro2", 1)), 98 }, 99 } 100 101 for _, basket := range baskets { 102 suite.app.BasketKeeper.SetBasket(suite.ctx, basket) 103 } 104 105 for _, basket := range baskets { 106 b, err := suite.app.BasketKeeper.GetBasketById(suite.ctx, basket.Id) 107 suite.Require().NoError(err) 108 suite.Require().Equal(b, basket) 109 110 b, err = suite.app.BasketKeeper.GetBasketByDenom(suite.ctx, basket.GetBasketDenom()) 111 suite.Require().NoError(err) 112 suite.Require().Equal(b, basket) 113 } 114 115 allBaskets := suite.app.BasketKeeper.GetAllBaskets(suite.ctx) 116 suite.Require().Len(allBaskets, 2) 117 118 suite.app.BasketKeeper.DeleteBasket(suite.ctx, baskets[0]) 119 120 allBaskets = suite.app.BasketKeeper.GetAllBaskets(suite.ctx) 121 suite.Require().Len(allBaskets, 1) 122 123 _, err := suite.app.BasketKeeper.GetBasketById(suite.ctx, baskets[0].Id) 124 suite.Require().Error(err) 125 126 _, err = suite.app.BasketKeeper.GetBasketByDenom(suite.ctx, baskets[0].GetBasketDenom()) 127 suite.Require().Error(err) 128 } 129 130 func (suite *KeeperTestSuite) TestCreateBasket() { 131 sampleBasket := types.Basket{ 132 Id: 1, 133 Suffix: "usd", 134 Description: "usd basket", 135 LimitsPeriod: 1800, 136 Amount: sdk.NewInt(1000), 137 SwapFee: sdk.NewDecWithPrec(1, 2), // 1% 138 SlipppageFeeMin: sdk.NewDecWithPrec(1, 2), // 1% 139 TokensCap: sdk.NewDecWithPrec(9, 1), // 90% 140 MintsMin: sdk.NewInt(1), 141 MintsMax: sdk.NewInt(100000000), 142 MintsDisabled: false, 143 BurnsMin: sdk.NewInt(1), 144 BurnsMax: sdk.NewInt(100000000), 145 BurnsDisabled: false, 146 SwapsMin: sdk.NewInt(1), 147 SwapsMax: sdk.NewInt(100000000), 148 SwapsDisabled: false, 149 Tokens: []types.BasketToken{ 150 { 151 Denom: "usd1", 152 Weight: sdk.NewDec(1), 153 Amount: sdk.NewInt(500), 154 Deposits: true, 155 Withdraws: true, 156 Swaps: true, 157 }, 158 { 159 Denom: "usd2", 160 Weight: sdk.NewDec(10), 161 Amount: sdk.NewInt(50), 162 Deposits: true, 163 Withdraws: true, 164 Swaps: true, 165 }, 166 }, 167 Surplus: sdk.NewCoins(sdk.NewInt64Coin("usd2", 1)), 168 } 169 170 err := suite.app.BasketKeeper.CreateBasket(suite.ctx, sampleBasket) 171 suite.Require().NoError(err) 172 173 baskets := suite.app.BasketKeeper.GetAllBaskets(suite.ctx) 174 suite.Require().Len(baskets, 1) 175 176 basket := baskets[0] 177 lastBasketId := suite.app.BasketKeeper.GetLastBasketId(suite.ctx) 178 suite.Require().Equal(lastBasketId, basket.Id) 179 // surplus zero check 180 suite.Require().Nil(basket.Surplus) 181 182 // token amount to be zero 183 for _, token := range basket.Tokens { 184 suite.Require().Equal(token.Amount, sdk.ZeroInt()) 185 } 186 187 // total number of tokens zero check 188 basket = sampleBasket 189 basket.Tokens = []types.BasketToken{} 190 err = suite.app.BasketKeeper.CreateBasket(suite.ctx, basket) 191 suite.Require().Error(err) 192 193 // token weight zero check 194 basket = sampleBasket 195 basket.Tokens[0].Weight = sdk.ZeroDec() 196 err = suite.app.BasketKeeper.CreateBasket(suite.ctx, basket) 197 suite.Require().Error(err) 198 199 // duplicated denom check 200 basket = sampleBasket 201 basket.Tokens[1].Denom = basket.Tokens[0].Denom 202 err = suite.app.BasketKeeper.CreateBasket(suite.ctx, basket) 203 suite.Require().Error(err) 204 205 // invalid denom check 206 basket = sampleBasket 207 basket.Tokens[0].Denom = "1" 208 err = suite.app.BasketKeeper.CreateBasket(suite.ctx, basket) 209 suite.Require().Error(err) 210 } 211 212 func (suite *KeeperTestSuite) TestEditBasket() { 213 sampleBasket := types.Basket{ 214 Id: 1, 215 Suffix: "usd", 216 Description: "usd basket", 217 LimitsPeriod: 1800, 218 Amount: sdk.NewInt(1000), 219 SwapFee: sdk.NewDecWithPrec(1, 2), // 1% 220 SlipppageFeeMin: sdk.NewDecWithPrec(1, 2), // 1% 221 TokensCap: sdk.NewDecWithPrec(9, 1), // 90% 222 MintsMin: sdk.NewInt(1), 223 MintsMax: sdk.NewInt(100000000), 224 MintsDisabled: false, 225 BurnsMin: sdk.NewInt(1), 226 BurnsMax: sdk.NewInt(100000000), 227 BurnsDisabled: false, 228 SwapsMin: sdk.NewInt(1), 229 SwapsMax: sdk.NewInt(100000000), 230 SwapsDisabled: false, 231 Tokens: []types.BasketToken{ 232 { 233 Denom: "usd1", 234 Weight: sdk.NewDec(1), 235 Amount: sdk.NewInt(500), 236 Deposits: true, 237 Withdraws: true, 238 Swaps: true, 239 }, 240 { 241 Denom: "usd2", 242 Weight: sdk.NewDec(10), 243 Amount: sdk.NewInt(50), 244 Deposits: true, 245 Withdraws: true, 246 Swaps: true, 247 }, 248 }, 249 Surplus: sdk.NewCoins(sdk.NewInt64Coin("usd2", 1)), 250 } 251 252 suite.app.BasketKeeper.SetBasket(suite.ctx, sampleBasket) 253 254 // successful update check 255 basket := sampleBasket 256 basket.Tokens[0].Deposits = false 257 err := suite.app.BasketKeeper.EditBasket(suite.ctx, basket) 258 suite.Require().NoError(err) 259 savedBasket, err := suite.app.BasketKeeper.GetBasketById(suite.ctx, basket.Id) 260 suite.Require().NoError(err) 261 suite.Require().Equal(savedBasket, basket) 262 263 // surplus amount does not change check 264 basket = sampleBasket 265 basket.Surplus = sdk.NewCoins(sdk.NewInt64Coin("usd1", 10000000)) 266 err = suite.app.BasketKeeper.EditBasket(suite.ctx, basket) 267 suite.Require().NoError(err) 268 savedBasket, err = suite.app.BasketKeeper.GetBasketById(suite.ctx, basket.Id) 269 suite.Require().NoError(err) 270 suite.Require().Equal(savedBasket.Surplus, sampleBasket.Surplus) 271 272 // token amount derivate from previous state or zero 273 basket.Tokens = append(basket.Tokens, 274 types.BasketToken{ 275 Denom: "usd3", 276 Weight: sdk.NewDec(1), 277 Amount: sdk.NewInt(500), 278 Deposits: true, 279 Withdraws: true, 280 Swaps: true, 281 }) 282 err = suite.app.BasketKeeper.EditBasket(suite.ctx, basket) 283 suite.Require().NoError(err) 284 savedBasket, err = suite.app.BasketKeeper.GetBasketById(suite.ctx, basket.Id) 285 suite.Require().NoError(err) 286 suite.Require().Len(savedBasket.Tokens, 3) 287 suite.Require().Equal(savedBasket.Tokens[0].Amount, sampleBasket.Tokens[0].Amount) 288 suite.Require().Equal(savedBasket.Tokens[1].Amount, sampleBasket.Tokens[1].Amount) 289 suite.Require().Equal(savedBasket.Tokens[2].Amount, sdk.ZeroInt()) 290 291 // basket existance check 292 basket = sampleBasket 293 basket.Id = 1000 294 err = suite.app.BasketKeeper.EditBasket(suite.ctx, basket) 295 suite.Require().Error(err) 296 297 // total number of tokens zero check 298 basket = sampleBasket 299 basket.Tokens = []types.BasketToken{} 300 err = suite.app.BasketKeeper.EditBasket(suite.ctx, basket) 301 suite.Require().Error(err) 302 303 // token weight zero check 304 basket = sampleBasket 305 basket.Tokens[0].Weight = sdk.ZeroDec() 306 err = suite.app.BasketKeeper.EditBasket(suite.ctx, basket) 307 suite.Require().Error(err) 308 309 // duplicated denom check 310 basket = sampleBasket 311 basket.Tokens[1].Denom = basket.Tokens[0].Denom 312 err = suite.app.BasketKeeper.EditBasket(suite.ctx, basket) 313 suite.Require().Error(err) 314 315 // invalid denom check 316 basket = sampleBasket 317 basket.Tokens[0].Denom = "1" 318 err = suite.app.BasketKeeper.EditBasket(suite.ctx, basket) 319 suite.Require().Error(err) 320 }