diff --git a/x/hard/keeper/liquidation.go b/x/hard/keeper/liquidation.go index 0f1f7e0f..d4bed3b4 100644 --- a/x/hard/keeper/liquidation.go +++ b/x/hard/keeper/liquidation.go @@ -268,6 +268,10 @@ func (k Keeper) IsWithinValidLtvRange(ctx sdk.Context, deposit types.Deposit, bo // UpdateBorrowAndLtvIndex updates a borrow and its LTV index value in the store func (k Keeper) UpdateBorrowAndLtvIndex(ctx sdk.Context, borrow types.Borrow, newLtv, oldLtv sdk.Dec) { k.RemoveFromLtvIndex(ctx, oldLtv, borrow.Borrower) + if borrow.Amount.Empty() { + k.DeleteBorrow(ctx, borrow) + return + } k.SetBorrow(ctx, borrow) k.InsertIntoLtvIndex(ctx, newLtv, borrow.Borrower) } @@ -275,6 +279,10 @@ func (k Keeper) UpdateBorrowAndLtvIndex(ctx sdk.Context, borrow types.Borrow, ne // UpdateDepositAndLtvIndex updates a deposit and its LTV index value in the store func (k Keeper) UpdateDepositAndLtvIndex(ctx sdk.Context, deposit types.Deposit, newLtv, oldLtv sdk.Dec) { k.RemoveFromLtvIndex(ctx, oldLtv, deposit.Depositor) + if deposit.Amount.Empty() { + k.DeleteDeposit(ctx, deposit) + return + } k.SetDeposit(ctx, deposit) k.InsertIntoLtvIndex(ctx, newLtv, deposit.Depositor) } diff --git a/x/hard/keeper/repay_test.go b/x/hard/keeper/repay_test.go index 50739d6d..33d20194 100644 --- a/x/hard/keeper/repay_test.go +++ b/x/hard/keeper/repay_test.go @@ -28,8 +28,9 @@ func (suite *KeeperTestSuite) TestRepay() { } type errArgs struct { - expectPass bool - contains string + expectPass bool + expectDelete bool + contains string } type borrowTest struct { @@ -52,8 +53,9 @@ func (suite *KeeperTestSuite) TestRepay() { repayCoins: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(10*KAVA_CF))), }, errArgs{ - expectPass: true, - contains: "", + expectPass: true, + expectDelete: false, + contains: "", }, }, { @@ -67,8 +69,9 @@ func (suite *KeeperTestSuite) TestRepay() { repayCoins: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(50*KAVA_CF))), }, errArgs{ - expectPass: true, - contains: "", + expectPass: true, + expectDelete: true, + contains: "", }, }, { @@ -82,8 +85,9 @@ func (suite *KeeperTestSuite) TestRepay() { repayCoins: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(60*KAVA_CF))), // Exceeds borrowed coins but not user's balance }, errArgs{ - expectPass: true, - contains: "", + expectPass: true, + expectDelete: true, + contains: "", }, }, { @@ -97,8 +101,9 @@ func (suite *KeeperTestSuite) TestRepay() { repayCoins: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(10*KAVA_CF)), sdk.NewCoin("bnb", sdk.NewInt(10*KAVA_CF))), }, errArgs{ - expectPass: false, - contains: "account can only repay up to 0bnb", + expectPass: false, + expectDelete: false, + contains: "account can only repay up to 0bnb", }, }, { @@ -112,8 +117,9 @@ func (suite *KeeperTestSuite) TestRepay() { repayCoins: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(51*KAVA_CF))), // Exceeds user's KAVA balance }, errArgs{ - expectPass: false, - contains: "account can only repay up to 50000000ukava", + expectPass: false, + expectDelete: false, + contains: "account can only repay up to 50000000ukava", }, }, } @@ -232,9 +238,15 @@ func (suite *KeeperTestSuite) TestRepay() { suite.Require().Equal(expectedModuleCoins, mAcc.GetCoins()) // Check user's borrow object - borrow, _ := suite.keeper.GetBorrow(suite.ctx, tc.args.borrower) + borrow, foundBorrow := suite.keeper.GetBorrow(suite.ctx, tc.args.borrower) expectedBorrowCoins := tc.args.borrowCoins.Sub(repaymentCoins) - suite.Require().Equal(expectedBorrowCoins, borrow.Amount) + + if tc.errArgs.expectDelete { + suite.Require().False(foundBorrow) + } else { + suite.Require().True(foundBorrow) + suite.Require().Equal(expectedBorrowCoins, borrow.Amount) + } } else { suite.Require().Error(err) suite.Require().True(strings.Contains(err.Error(), tc.errArgs.contains)) @@ -250,7 +262,8 @@ func (suite *KeeperTestSuite) TestRepay() { suite.Require().Equal(expectedModuleCoins, mAcc.GetCoins()) // Check user's borrow object (no repay coins) - borrow, _ := suite.keeper.GetBorrow(suite.ctx, tc.args.borrower) + borrow, foundBorrow := suite.keeper.GetBorrow(suite.ctx, tc.args.borrower) + suite.Require().True(foundBorrow) suite.Require().Equal(tc.args.borrowCoins, borrow.Amount) } }) diff --git a/x/hard/keeper/withdraw_test.go b/x/hard/keeper/withdraw_test.go index 1907eb95..74654d58 100644 --- a/x/hard/keeper/withdraw_test.go +++ b/x/hard/keeper/withdraw_test.go @@ -24,12 +24,12 @@ func (suite *KeeperTestSuite) TestWithdraw() { createDeposit bool expectedAccountBalance sdk.Coins expectedModAccountBalance sdk.Coins - depositExists bool finalDepositAmount sdk.Coins } type errArgs struct { - expectPass bool - contains string + expectPass bool + expectDelete bool + contains string } type withdrawTest struct { name string @@ -47,12 +47,12 @@ func (suite *KeeperTestSuite) TestWithdraw() { createDeposit: true, expectedAccountBalance: sdk.NewCoins(sdk.NewCoin("bnb", sdk.NewInt(900)), sdk.NewCoin("btcb", sdk.NewInt(1000))), expectedModAccountBalance: sdk.NewCoins(sdk.NewCoin("bnb", sdk.NewInt(100))), - depositExists: true, finalDepositAmount: sdk.NewCoins(sdk.NewCoin("bnb", sdk.NewInt(100))), }, errArgs{ - expectPass: true, - contains: "", + expectPass: true, + expectDelete: false, + contains: "", }, }, { @@ -65,12 +65,12 @@ func (suite *KeeperTestSuite) TestWithdraw() { createDeposit: true, expectedAccountBalance: sdk.NewCoins(sdk.NewCoin("bnb", sdk.NewInt(1000)), sdk.NewCoin("btcb", sdk.NewInt(1000))), expectedModAccountBalance: sdk.Coins(nil), - depositExists: false, finalDepositAmount: sdk.Coins{}, }, errArgs{ - expectPass: true, - contains: "", + expectPass: true, + expectDelete: true, + contains: "", }, }, { @@ -83,12 +83,12 @@ func (suite *KeeperTestSuite) TestWithdraw() { createDeposit: true, expectedAccountBalance: sdk.NewCoins(sdk.NewCoin("bnb", sdk.NewInt(1000)), sdk.NewCoin("btcb", sdk.NewInt(1000))), expectedModAccountBalance: sdk.NewCoins(sdk.NewCoin("bnb", sdk.NewInt(1000))), - depositExists: false, finalDepositAmount: sdk.Coins{}, }, errArgs{ - expectPass: true, - contains: "", + expectPass: true, + expectDelete: true, + contains: "", }, }, { @@ -101,12 +101,12 @@ func (suite *KeeperTestSuite) TestWithdraw() { createDeposit: true, expectedAccountBalance: sdk.Coins{}, expectedModAccountBalance: sdk.Coins{}, - depositExists: false, finalDepositAmount: sdk.Coins{}, }, errArgs{ - expectPass: false, - contains: "no coins of this type deposited", + expectPass: false, + expectDelete: false, + contains: "no coins of this type deposited", }, }, } @@ -198,11 +198,11 @@ func (suite *KeeperTestSuite) TestWithdraw() { mAcc := suite.getModuleAccount(types.ModuleAccountName) suite.Require().Equal(tc.args.expectedModAccountBalance, mAcc.GetCoins()) testDeposit, f := suite.keeper.GetDeposit(suite.ctx, tc.args.depositor) - if tc.args.depositExists { + if tc.errArgs.expectDelete { + suite.Require().False(f) + } else { suite.Require().True(f) suite.Require().Equal(tc.args.finalDepositAmount, testDeposit.Amount) - } else { - suite.Require().False(f) } } else { suite.Require().Error(err)