-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: createAndDepositMultiple function
- Loading branch information
1 parent
0d0576a
commit 6cca0e6
Showing
6 changed files
with
155 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
127 changes: 127 additions & 0 deletions
127
test/integration/create-and-deposit-multiple/createAndDepositMultiple.t.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
// SPDX-License-Identifier: UNLICENSED | ||
pragma solidity >=0.8.22; | ||
|
||
import { ISablierV2OpenEnded } from "src/interfaces/ISablierV2OpenEnded.sol"; | ||
import { Errors } from "src/libraries/Errors.sol"; | ||
import { OpenEnded } from "src/types/DataTypes.sol"; | ||
|
||
import { Integration_Test } from "../Integration.t.sol"; | ||
|
||
contract CreateMultiple_Integration_Test is Integration_Test { | ||
address[] internal defaultRecipients; | ||
address[] internal defaultSenders; | ||
uint128[] internal defaultRatesPerSecond; | ||
uint128[] internal defaultDepositAmounts; | ||
|
||
function setUp() public override { | ||
Integration_Test.setUp(); | ||
|
||
defaultRecipients.push(users.recipient); | ||
defaultRecipients.push(users.recipient); | ||
defaultSenders.push(users.sender); | ||
defaultSenders.push(users.sender); | ||
defaultRatesPerSecond.push(RATE_PER_SECOND); | ||
defaultRatesPerSecond.push(RATE_PER_SECOND); | ||
defaultDepositAmounts.push(DEPOSIT_AMOUNT); | ||
defaultDepositAmounts.push(DEPOSIT_AMOUNT); | ||
} | ||
|
||
function test_RevertWhen_DelegateCall() external { | ||
bytes memory callData = abi.encodeCall( | ||
ISablierV2OpenEnded.createAndDepositMultiple, | ||
(defaultRecipients, defaultSenders, defaultRatesPerSecond, dai, defaultDepositAmounts) | ||
); | ||
_test_RevertWhen_DelegateCall(callData); | ||
} | ||
|
||
function test_RevertWhen_DepositAmountsArrayIsNotEqual() external whenNotDelegateCalled whenArrayCountsNotEqual { | ||
uint128[] memory depositAmounts = new uint128[](0); | ||
|
||
vm.expectRevert( | ||
abi.encodeWithSelector( | ||
Errors.SablierV2OpenEnded_DepositArrayCountsNotEqual.selector, | ||
defaultRecipients.length, | ||
depositAmounts.length | ||
) | ||
); | ||
openEnded.createAndDepositMultiple( | ||
defaultRecipients, defaultSenders, defaultRatesPerSecond, dai, depositAmounts | ||
); | ||
} | ||
|
||
function test_CreateAndDepositMultiple() external whenNotDelegateCalled whenArrayCountsEqual { | ||
uint256 beforeNextStreamId = openEnded.nextStreamId(); | ||
|
||
vm.expectEmit({ emitter: address(openEnded) }); | ||
emit CreateOpenEndedStream({ | ||
streamId: beforeNextStreamId, | ||
sender: users.sender, | ||
recipient: users.recipient, | ||
ratePerSecond: RATE_PER_SECOND, | ||
asset: dai, | ||
lastTimeUpdate: uint40(block.timestamp) | ||
}); | ||
vm.expectEmit({ emitter: address(openEnded) }); | ||
emit CreateOpenEndedStream({ | ||
streamId: beforeNextStreamId + 1, | ||
sender: users.sender, | ||
recipient: users.recipient, | ||
ratePerSecond: RATE_PER_SECOND, | ||
asset: dai, | ||
lastTimeUpdate: uint40(block.timestamp) | ||
}); | ||
|
||
vm.expectEmit({ emitter: address(openEnded) }); | ||
emit DepositOpenEndedStream({ | ||
streamId: beforeNextStreamId, | ||
funder: users.sender, | ||
asset: dai, | ||
depositAmount: DEPOSIT_AMOUNT | ||
}); | ||
|
||
vm.expectEmit({ emitter: address(openEnded) }); | ||
emit DepositOpenEndedStream({ | ||
streamId: beforeNextStreamId + 1, | ||
funder: users.sender, | ||
asset: dai, | ||
depositAmount: DEPOSIT_AMOUNT | ||
}); | ||
|
||
expectCallToTransferFrom({ asset: dai, from: users.sender, to: address(openEnded), amount: DEPOSIT_AMOUNT }); | ||
expectCallToTransferFrom({ asset: dai, from: users.sender, to: address(openEnded), amount: DEPOSIT_AMOUNT }); | ||
|
||
uint256[] memory streamIds = openEnded.createAndDepositMultiple( | ||
defaultRecipients, defaultSenders, defaultRatesPerSecond, dai, defaultDepositAmounts | ||
); | ||
|
||
uint256 afterNextStreamId = openEnded.nextStreamId(); | ||
|
||
assertEq(streamIds[0], beforeNextStreamId, "streamIds[0] != beforeNextStreamId"); | ||
assertEq(streamIds[1], beforeNextStreamId + 1, "streamIds[1] != beforeNextStreamId + 1"); | ||
|
||
assertEq(streamIds.length, defaultRecipients.length, "streamIds.length != defaultRecipients.length"); | ||
assertEq( | ||
beforeNextStreamId + defaultRecipients.length, | ||
afterNextStreamId, | ||
"afterNextStreamId != beforeNextStreamId + defaultRecipients.length" | ||
); | ||
|
||
OpenEnded.Stream memory expectedStream = OpenEnded.Stream({ | ||
ratePerSecond: RATE_PER_SECOND, | ||
asset: dai, | ||
assetDecimals: 18, | ||
balance: DEPOSIT_AMOUNT, | ||
lastTimeUpdate: uint40(block.timestamp), | ||
isCanceled: false, | ||
isStream: true, | ||
recipient: users.recipient, | ||
sender: users.sender | ||
}); | ||
|
||
OpenEnded.Stream memory actualStream = openEnded.getStream(streamIds[0]); | ||
assertEq(actualStream, expectedStream); | ||
|
||
actualStream = openEnded.getStream(streamIds[1]); | ||
assertEq(actualStream, expectedStream); | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
test/integration/create-and-deposit-multiple/createAndDepositMultiple.tree
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
createMultiple.t.sol | ||
βββ when delegate called | ||
β βββ it should revert | ||
βββ when not delegate called | ||
βββ when array counts are not equal | ||
β βββ when the deposit amounts array is not equal | ||
β βββ it should revert | ||
βββ when array counts are equal | ||
βββ it should create multiple streams | ||
βββ it should update the stream balance | ||
βββ it should perform the ERC-20 transfer | ||
βββ it should bump the next stream id multiple times | ||
βββ it should emit multiple {CreateOpenEndedStream}, {Transfer} and {DepositOpenEndedStream} events |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters