diff --git a/test/trinity/BorrowerOperations_FeesTest.js b/test/trinity/BorrowerOperations_FeesTest.js index c3f9c8f..5f1c633 100644 --- a/test/trinity/BorrowerOperations_FeesTest.js +++ b/test/trinity/BorrowerOperations_FeesTest.js @@ -10,7 +10,7 @@ const {_1e18BN} = testHelpers.MoneyValues contract("BorrowerOperations_Fees", async accounts => { - const [owner, alice, treasury] = accounts + const [owner, alice, bob, treasury] = accounts let contracts let snapshotId @@ -29,6 +29,17 @@ contract("BorrowerOperations_Fees", async accounts => { }) } + async function closeVessel(account) { + const {borrowerOperations, erc20} = contracts.core + return borrowerOperations.closeVessel(erc20.address, { + from: account, + }) + } + + async function mintDebtTokens(account, amount) { + return contracts.core.debtToken.unprotectedMint(account, amount) + } + async function skipToNextEpoch() { await th.fastForwardTime(SECONDS_IN_ONE_WEEK, web3.currentProvider) } @@ -196,6 +207,43 @@ contract("BorrowerOperations_Fees", async accounts => { }) }) + describe('closeVessel', () => { + it('does not add fees mid epoch', async () => { + const {erc20, debtToken, borrowerOperations} = contracts.core + await openVessel(alice) + await openVessel(bob) + await skipToNextEpoch() + + await borrowerOperations.collectVesselFee(erc20.address, alice) + + const treasuryBalanceBefore = await debtToken.balanceOf(treasury) + + await mintDebtTokens(alice, vesselTotalDebt) + await closeVessel(alice) + + const treasuryBalanceAfter = await debtToken.balanceOf(treasury) + + assert.isTrue(treasuryBalanceBefore.eq(treasuryBalanceAfter)) + }) + + it('skips due fee payment when called before collectVesselFee', async () => { + const {debtToken} = contracts.core + await openVessel(alice) + await openVessel(bob) + + const treasuryBalanceBefore = await debtToken.balanceOf(treasury) + + await skipToNextEpoch() + + await mintDebtTokens(alice, vesselTotalDebt) + await closeVessel(alice) + + const treasuryBalanceAfter = await debtToken.balanceOf(treasury) + + assert.isTrue(treasuryBalanceBefore.eq(treasuryBalanceAfter)) + }) + }) + describe('collectVesselFee', () => { it('does nothing if called twice in single epoch', async () => { const {erc20, borrowerOperations, vesselManager} = contracts.core