Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[test] Test issued when the fund contract receives a donation #177

Merged
merged 2 commits into from
Nov 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion contracts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,29 @@
asdf install starknet-foundry 0.27.0
```
```bash
asdf install starknet-foundry 0.27.0
asdf global starknet-foundry 0.27.0
```
**Setup your environment(Different option for macOS)**

- Scarb v2.6.5 : [here](https://docs.swmansion.com/scarb/download.html#install-via-asdf).
```bash
curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh -s -- -v 2.6.5
```
Place it in the path:
```bash
export PATH="$HOME/.local/bin:$PATH"
```
It is recommended to restart the terminal.
- Starknet Foundry v0.27.0: [here](https://foundry-rs.github.io/starknet-foundry/getting-started/installation.html).
```bash
curl -L https://raw.githubusercontent.com/foundry-rs/starknet-foundry/master/scripts/install.sh | sh -s -- -v 0.27.0
```
Place it in the path:
```bash
echo 'export PATH="$HOME/.asdf/shims:$HOME/.asdf/bin:$PATH"' >> ~/.zshrc
```
```bash
echo 'export PATH="$HOME/.foundry/bin:$PATH"' >> ~/.zshrc
3. **Compile Go Stark Me Backend 🛠️**

To build the contracts, run the command:
Expand Down
52 changes: 52 additions & 0 deletions contracts/tests/test_fund.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -342,3 +342,55 @@ fn test_withdraw() {
assert(owner_balance_after == (owner_balance_before + goal), 'wrong owner balance');
assert((fund_balance_before - goal) == fund_balance_after, 'wrong fund balance');
}

#[test]
#[fork("Mainnet")]
fn test_emit_event_donation_received() {
//Initial configuration of contract addresses and donation targets
let contract_address = _setup_();
let goal: u256 = 10;
let dispatcher = IFundDispatcher { contract_address };
let minter_address = contract_address_const::<StarknetConstants::STRK_TOKEN_MINTER_ADDRESS>();
let token_address = contract_address_const::<StarknetConstants::STRK_TOKEN_ADDRESS>();
let token_dispatcher = IERC20Dispatcher { contract_address: token_address };

//Donation target configuration in the dispatcher
dispatcher.setState(2);
start_cheat_caller_address(contract_address, FUND_MANAGER());
dispatcher.setGoal(goal);

//Provision of STRK token to the fund manager
cheat_caller_address(token_address, minter_address, CheatSpan::TargetCalls(1));
let mut calldata = array![];
calldata.append_serde(FUND_MANAGER());
calldata.append_serde(goal);
call_contract_syscall(token_address, selector!("permissioned_mint"), calldata.span()).unwrap();

//Approve
cheat_caller_address(token_address, FUND_MANAGER(), CheatSpan::TargetCalls(1));
token_dispatcher.approve(contract_address, goal);
let mut spy = spy_events();

//Receipt of the donation at the dispatcher
dispatcher.receiveDonation(goal);
start_cheat_caller_address_global(FUND_MANAGER());

//Verification of the current balance and issuance of the expected event
let current_balance = dispatcher.get_current_goal_state();
spy
.assert_emitted(
@array![
(
contract_address,
Fund::Event::DonationReceived(
Fund::DonationReceived {
current_balance,
donated_strks: goal,
donator_address: FUND_MANAGER(),
fund_contract_address: contract_address,
}
)
)
]
);
}
Loading