Skip to content

Commit

Permalink
feat: add more unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
khayss committed Aug 24, 2024
1 parent 0d5a2b9 commit f591680
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 13 deletions.
9 changes: 9 additions & 0 deletions src/Crowdfund.sol
Original file line number Diff line number Diff line change
Expand Up @@ -156,4 +156,13 @@ contract Crowdfund {
) external view returns (Campaign memory) {
return campaigns[campaignId];
}

/// @notice Gets the amount raised for a specific campaign.
/// @param campaignId The ID of the campaign.
/// @return The amount raised for the campaign.
function getCampaignAmountRaised(
uint campaignId
) external view returns (uint) {
return campaigns[campaignId].amountRaised;
}
}
76 changes: 63 additions & 13 deletions test/Crowdfund.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,36 +9,86 @@ contract CrowdfundTest is Test {
address fakeUser = vm.addr(1);

function setUp() public {
vm.deal(fakeUser, 1 ether);
crowdfund = new Crowdfund();
}

function test_IsInitializedCorrectly() public view {
assertEq(crowdfund.getTotalCampaigns(), 0);
assertEq(crowdfund.getTotalFunding(), 0);
assertEq(crowdfund.getUserCampaigns(fakeUser).length, 0);
}

function test_CanCreateCampaign() public {
vm.deal(fakeUser, 1 ether);

function newCampaign() public returns (uint campaignId) {
string memory title = "Test Campaign";
string memory description = "This is a test campaign.";
uint goal = 1 ether;
uint deadline = 1 minutes;

vm.prank(fakeUser);
uint campaignId = crowdfund.createCampaign(
campaignId = crowdfund.createCampaign(
title,
description,
goal,
deadline
);

}

function test_IsInitializedCorrectly() public view {
assertEq(crowdfund.getTotalCampaigns(), 0);
assertEq(crowdfund.getTotalFunding(), 0);
assertEq(crowdfund.getUserCampaigns(fakeUser).length, 0);
}

function test_CanCreateCampaign() public {
uint campaignId = newCampaign();
uint[] memory userCampaigns = crowdfund.getUserCampaigns(fakeUser);

assertEq(campaignId, 0);
assertEq(crowdfund.getTotalCampaigns(), 1);
assertEq(crowdfund.getTotalFunding(), 0);
// assertEq(crowdfund.getUserCampaigns(fakeUser).length, 1);
// console.log(crowdfund.getUserCampaigns(fakeUser));
assertEq(userCampaigns.length, 1);
}

function test_CanDonateToCampaign() 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);

assertEq(crowdfund.getTotalFunding(), amountToDonate * 2);
assertEq(
crowdfund.getCampaignAmountRaised(campaignId),
amountToDonate * 2
);
}

function test_CannotDonateZero() public {
uint amount = 10 ether;
address fakeDonor = vm.addr(2);
vm.deal(fakeDonor, amount);
uint campaignId = newCampaign();

vm.expectRevert(Crowdfund.Crowdfund_CannotDonateZero.selector);
vm.prank(fakeDonor);
crowdfund.donateToCampaign{value: 0}(campaignId);
}

function test_CannotDonateToInvalidCampaign() public {
uint campaignId = 1;
address fakeDonor = vm.addr(2);
uint amount = 10 ether;
uint amountToDonate = 1 ether;

vm.deal(fakeDonor, amount);

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

0 comments on commit f591680

Please sign in to comment.