Skip to content

Commit

Permalink
add test for close
Browse files Browse the repository at this point in the history
  • Loading branch information
Nenad committed Jun 13, 2024
1 parent d32fe93 commit d6a7d0a
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 1 deletion.
4 changes: 3 additions & 1 deletion listings/applications/crowdfunding/src/campaign.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ pub mod Campaign {
#[derive(Drop, starknet::Event)]
pub struct Closed {
pub reason: ByteArray,
pub status: Status,
}

#[derive(Drop, starknet::Event)]
Expand Down Expand Up @@ -221,8 +222,9 @@ pub mod Campaign {
}

self._refund_all(reason.clone());
let status = self.status.read();

self.emit(Event::Closed(Closed { reason }));
self.emit(Event::Closed(Closed { reason, status }));
}

fn contribute(ref self: ContractState, amount: u256) {
Expand Down
102 changes: 102 additions & 0 deletions listings/applications/crowdfunding/src/tests.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -285,3 +285,105 @@ fn test_upgrade_class_hash() {
);
}

#[test]
fn test_close() {
let contract_class = declare("Campaign").unwrap();
let token_class = declare("ERC20").unwrap();
let duration: u64 = 60;

// test closed campaign
let (campaign, token) = deploy_with_token(contract_class, token_class);
let mut spy = spy_events(SpyOn::One(campaign.contract_address));
let creator = contract_address_const::<'creator'>();
let contributor_1 = contract_address_const::<'contributor_1'>();
let contributor_2 = contract_address_const::<'contributor_2'>();
let contributor_3 = contract_address_const::<'contributor_3'>();
let prev_balance_contributor_1 = token.balance_of(contributor_1);
let prev_balance_contributor_2 = token.balance_of(contributor_2);
let prev_balance_contributor_3 = token.balance_of(contributor_3);

start_cheat_caller_address(campaign.contract_address, creator);
campaign.start(duration);
start_cheat_caller_address(campaign.contract_address, contributor_1);
campaign.contribute(3000);
start_cheat_caller_address(campaign.contract_address, contributor_2);
campaign.contribute(1000);
start_cheat_caller_address(campaign.contract_address, contributor_3);
campaign.contribute(2000);
let total_contributions = campaign.get_details().total_contributions;

start_cheat_caller_address(campaign.contract_address, creator);
campaign.close("testing");
stop_cheat_caller_address(campaign.contract_address);

assert_eq!(prev_balance_contributor_1, token.balance_of(contributor_1));
assert_eq!(prev_balance_contributor_2, token.balance_of(contributor_2));
assert_eq!(prev_balance_contributor_3, token.balance_of(contributor_3));
assert_eq!(campaign.get_details().total_contributions, total_contributions);
assert_eq!(campaign.get_details().status, Status::CLOSED);

spy
.assert_emitted(
@array![
(
campaign.contract_address,
Campaign::Event::RefundedAll(Campaign::RefundedAll { reason: "testing" })
),
(
campaign.contract_address,
Campaign::Event::Closed(
Campaign::Closed { reason: "testing", status: Status::CLOSED }
)
)
]
);

// test failed campaign
let (campaign, token) = deploy_with_token(contract_class, token_class);
let mut spy = spy_events(SpyOn::One(campaign.contract_address));
let creator = contract_address_const::<'creator'>();
let contributor_1 = contract_address_const::<'contributor_1'>();
let contributor_2 = contract_address_const::<'contributor_2'>();
let contributor_3 = contract_address_const::<'contributor_3'>();
let prev_balance_contributor_1 = token.balance_of(contributor_1);
let prev_balance_contributor_2 = token.balance_of(contributor_2);
let prev_balance_contributor_3 = token.balance_of(contributor_3);

start_cheat_caller_address(campaign.contract_address, creator);
campaign.start(duration);
start_cheat_caller_address(campaign.contract_address, contributor_1);
campaign.contribute(3000);
start_cheat_caller_address(campaign.contract_address, contributor_2);
campaign.contribute(1000);
start_cheat_caller_address(campaign.contract_address, contributor_3);
campaign.contribute(2000);
let total_contributions = campaign.get_details().total_contributions;

cheat_block_timestamp_global(duration);

start_cheat_caller_address(campaign.contract_address, creator);
campaign.close("testing");
stop_cheat_caller_address(campaign.contract_address);

assert_eq!(prev_balance_contributor_1, token.balance_of(contributor_1));
assert_eq!(prev_balance_contributor_2, token.balance_of(contributor_2));
assert_eq!(prev_balance_contributor_3, token.balance_of(contributor_3));
assert_eq!(campaign.get_details().total_contributions, total_contributions);
assert_eq!(campaign.get_details().status, Status::FAILED);

spy
.assert_emitted(
@array![
(
campaign.contract_address,
Campaign::Event::RefundedAll(Campaign::RefundedAll { reason: "testing" })
),
(
campaign.contract_address,
Campaign::Event::Closed(
Campaign::Closed { reason: "testing", status: Status::FAILED }
)
)
]
);
}

0 comments on commit d6a7d0a

Please sign in to comment.