Skip to content

Commit

Permalink
feat: add unit test for end campaign
Browse files Browse the repository at this point in the history
  • Loading branch information
khayss committed Aug 24, 2024
1 parent f591680 commit 0e73a21
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 2 deletions.
2 changes: 1 addition & 1 deletion script/Crowdfund.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pragma solidity ^0.8.26;
import {Crowdfund} from "../src/Crowdfund.sol";
import {Script, console} from "forge-std/Script.sol";

contract CrowdfundDeploy is Script {
contract DeployCrowdfund is Script {
function run() external returns (Crowdfund) {
vm.startBroadcast();

Expand Down
89 changes: 88 additions & 1 deletion test/Crowdfund.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,95 @@ contract CrowdfundTest is Test {

vm.deal(fakeDonor, amount);

vm.expectRevert(abi.encodeWithSelector(Crowdfund.Crowdfund_InvalidCampaign.selector, campaignId));
vm.expectRevert(
abi.encodeWithSelector(
Crowdfund.Crowdfund_InvalidCampaign.selector,
campaignId
)
);
vm.prank(fakeDonor);
crowdfund.donateToCampaign{value: amountToDonate}(campaignId);
}

function test_BenefactorCanWithdrawWhenCampaignEnd() public {
uint campaignId = newCampaign();
uint amount = 10 ether;
uint amountToDonate = 1 ether;

address fakeDonor1 = vm.addr(2);
address fakeDonor2 = vm.addr(3);

vm.deal(fakeDonor1, amount);
vm.deal(fakeDonor2, amount);

vm.prank(fakeDonor1);
crowdfund.donateToCampaign{value: amountToDonate}(campaignId);

vm.prank(fakeDonor2);
crowdfund.donateToCampaign{value: amountToDonate}(campaignId);

vm.warp(block.timestamp + 2 minutes);
vm.roll(block.number + 4);

uint userBalanceBefore = fakeUser.balance;

vm.prank(fakeUser);
crowdfund.endCampaign(campaignId);

assertEq(crowdfund.getTotalFunding(), 0);
assertEq(fakeUser.balance, userBalanceBefore + amountToDonate * 2);
}

function test_CannotEndCampaignBeforeDeadline() public {
uint campaignId = newCampaign();
uint amount = 10 ether;
uint amountToDonate = 1 ether;

address fakeDonor1 = vm.addr(2);
address fakeDonor2 = vm.addr(3);

vm.deal(fakeDonor1, amount);
vm.deal(fakeDonor2, amount);

vm.prank(fakeDonor1);
crowdfund.donateToCampaign{value: amountToDonate}(campaignId);

vm.prank(fakeDonor2);
crowdfund.donateToCampaign{value: amountToDonate}(campaignId);

vm.expectRevert(
abi.encodeWithSelector(
Crowdfund.Crowdfund_CampaignNotEnded.selector,
block.timestamp + 60
)
);
vm.prank(fakeUser);
crowdfund.endCampaign(campaignId);
}

function test_CannotDonateAfterCampaignEnd() public {
uint campaignId = newCampaign();
uint amount = 10 ether;
uint amountToDonate = 1 ether;

address fakeDonor1 = vm.addr(2);
address fakeDonor2 = vm.addr(3);

vm.deal(fakeDonor1, amount);
vm.deal(fakeDonor2, amount);

vm.prank(fakeDonor1);
crowdfund.donateToCampaign{value: amountToDonate}(campaignId);

vm.warp(block.timestamp + 2 minutes);
vm.roll(block.number + 4);

vm.expectRevert(
abi.encodeWithSelector(
Crowdfund.Crowdfund_CampaignInactive.selector
)
);
vm.prank(fakeDonor2);
crowdfund.donateToCampaign{value: amountToDonate}(campaignId);
}
}

0 comments on commit 0e73a21

Please sign in to comment.