Skip to content

Commit

Permalink
add unit test (#476)
Browse files Browse the repository at this point in the history
  • Loading branch information
doerfli committed Jul 12, 2024
1 parent 3931e7a commit e2ec3be
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 14 deletions.
28 changes: 16 additions & 12 deletions contracts/pool/PoolService.sol
Original file line number Diff line number Diff line change
Expand Up @@ -118,21 +118,23 @@ contract PoolService is
returns(NftId bundleNftId, Amount netStakedAmount)
{
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());

Amount stakingFeeAmount;
(stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
_getStakingFee(instance.getInstanceReader(), poolNftId),
stakingAmount);

{
InstanceReader instanceReader = instance.getInstanceReader();
IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
if (currentPoolBalance + netStakedAmount > poolInfo.maxBalanceAmount) {
revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, netStakedAmount);
if (currentPoolBalance + stakingAmount > poolInfo.maxBalanceAmount) {
revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, stakingAmount);
}
}


Amount stakingFeeAmount;
(stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
_getStakingFee(instance.getInstanceReader(), poolNftId),
stakingAmount);


bundleNftId = _bundleService.create(
instance,
poolNftId,
Expand Down Expand Up @@ -201,6 +203,13 @@ contract PoolService is
revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
}

{
Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
}
}

// calculate fees
Amount feeAmount;
(
Expand All @@ -210,11 +219,6 @@ contract PoolService is
_getStakingFee(instanceReader, poolNftId),
amount);

Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
if (currentPoolBalance + netAmount > poolInfo.maxBalanceAmount) {
revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, netAmount);
}

// do all the bookkeeping
_componentService.increasePoolBalance(
instance.getInstanceStore(),
Expand Down
41 changes: 41 additions & 0 deletions test/TestBundle.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,47 @@ contract TestBundle is GifTest {
assertEq(instanceReader.getFeeAmount(bundleNftId).toInt(), 0, "bundle fees 0");
}

function test_Bundle_stakeBundle_maxBalanceExceeded() public {
// GIVEN
initialStakingFee = FeeLib.percentageFee(4);
_prepareProduct(false);

IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
vm.startPrank(poolOwner);
pool.setMaxBalanceAmount(AmountLib.toAmount(1500));
vm.stopPrank();

vm.startPrank(investor);
token.approve(address(pool.getTokenHandler()), 2000);

Seconds lifetime = SecondsLib.toSeconds(604800);
(bundleNftId,) = pool.createBundle(
FeeLib.zero(),
1000,
lifetime,
""
);

assertTrue(!bundleNftId.eqz(), "bundle nft id is zero");

uint256 stakeAmount = 1001;
Amount stakeAmt = AmountLib.toAmount(stakeAmount);
Amount stakeNetAmt = AmountLib.toAmount(960);

pool.lockBundle(bundleNftId);

// THEN - expect revert
vm.expectRevert(abi.encodeWithSelector(
IPoolService.ErrorPoolServiceMaxBalanceAmountExceeded.selector,
poolNftId,
AmountLib.toAmount(1500),
AmountLib.toAmount(1000),
AmountLib.toAmount(1001)));

// WHEN - pool is staked with more tokens
pool.stake(bundleNftId, stakeAmt);
}

/// @dev test staking when the allowance is too small
function test_Bundle_stakeBundle_allowanceTooSmall() public {
// GIVEN
Expand Down
4 changes: 2 additions & 2 deletions test/TestPool.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -251,8 +251,8 @@ contract TestPool is GifTest {
vm.expectRevert(abi.encodeWithSelector(
IPoolService.ErrorPoolServiceMaxBalanceAmountExceeded.selector,
poolNftId,
AmountLib.toAmount(10000),
AmountLib.toAmount(10000),
AmountLib.toAmount(15000),
AmountLib.toAmount(100000000000),
AmountLib.toAmount(10000)));

// WHEN
Expand Down

0 comments on commit e2ec3be

Please sign in to comment.