test: add foundry tests for LabHelper.sol
This commit is contained in:
parent
403e2292e5
commit
9465e79255
135
test/LabHelper.t.sol
Normal file
135
test/LabHelper.t.sol
Normal file
@ -0,0 +1,135 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.19;
|
||||
|
||||
import "forge-std/Test.sol";
|
||||
import "../contracts/LabHelper.sol";
|
||||
import "./mocks/MockLabRegistry.sol";
|
||||
|
||||
contract LabHelperTest is Test {
|
||||
MockLabRegistry internal mockRegistry;
|
||||
address internal testOwner;
|
||||
address internal testContributor;
|
||||
|
||||
function setUp() public {
|
||||
testOwner = makeAddr("labOwner");
|
||||
testContributor = makeAddr("contributor");
|
||||
mockRegistry = new MockLabRegistry();
|
||||
}
|
||||
|
||||
function test_validateLabCreation_Success() public {
|
||||
uint256 initialFunds = 0.1 ether;
|
||||
bool result = LabHelper.validateLabCreation(testOwner, initialFunds);
|
||||
assertTrue(result, "Lab creation should be valid");
|
||||
}
|
||||
|
||||
function testRevert_validateLabCreation_ZeroAddress() public {
|
||||
uint256 initialFunds = 0.1 ether;
|
||||
vm.expectRevert(abi.encodeWithSignature("InvalidLabConfiguration(string)", "Invalid owner address"));
|
||||
LabHelper.validateLabCreation(address(0), initialFunds);
|
||||
}
|
||||
|
||||
function testRevert_validateLabCreation_InsufficientFunds() public {
|
||||
uint256 initialFunds = 0.001 ether;
|
||||
vm.expectRevert(
|
||||
abi.encodeWithSignature(
|
||||
"InsufficientContribution(uint256,uint256)",
|
||||
0.01 ether,
|
||||
initialFunds
|
||||
)
|
||||
);
|
||||
LabHelper.validateLabCreation(testOwner, initialFunds);
|
||||
}
|
||||
|
||||
function test_calculateContributionScore() public {
|
||||
LabHelper.ContributionRecord[] memory records = new LabHelper.ContributionRecord[](3);
|
||||
|
||||
records[0] = LabHelper.ContributionRecord({
|
||||
contributor: testContributor,
|
||||
amount: 10,
|
||||
timestamp: block.timestamp,
|
||||
contributionType: "code"
|
||||
});
|
||||
|
||||
records[1] = LabHelper.ContributionRecord({
|
||||
contributor: testContributor,
|
||||
amount: 20,
|
||||
timestamp: block.timestamp,
|
||||
contributionType: "research"
|
||||
});
|
||||
|
||||
records[2] = LabHelper.ContributionRecord({
|
||||
contributor: testContributor,
|
||||
amount: 30,
|
||||
timestamp: block.timestamp,
|
||||
contributionType: "documentation"
|
||||
});
|
||||
|
||||
uint256 score = LabHelper.calculateContributionScore(records);
|
||||
assertEq(score, 10 * 3 + 20 * 2 + 30 * 1, "Contribution score calculation incorrect");
|
||||
}
|
||||
|
||||
function testFuzz_calculateContributionScore(
|
||||
uint256 codeAmount,
|
||||
uint256 researchAmount,
|
||||
uint256 docAmount
|
||||
) public {
|
||||
LabHelper.ContributionRecord[] memory records = new LabHelper.ContributionRecord[](3);
|
||||
|
||||
records[0] = LabHelper.ContributionRecord({
|
||||
contributor: testContributor,
|
||||
amount: codeAmount,
|
||||
timestamp: block.timestamp,
|
||||
contributionType: "code"
|
||||
});
|
||||
|
||||
records[1] = LabHelper.ContributionRecord({
|
||||
contributor: testContributor,
|
||||
amount: researchAmount,
|
||||
timestamp: block.timestamp,
|
||||
contributionType: "research"
|
||||
});
|
||||
|
||||
records[2] = LabHelper.ContributionRecord({
|
||||
contributor: testContributor,
|
||||
amount: docAmount,
|
||||
timestamp: block.timestamp,
|
||||
contributionType: "documentation"
|
||||
});
|
||||
|
||||
uint256 score = LabHelper.calculateContributionScore(records);
|
||||
assertGe(score, 0, "Contribution score should be non-negative");
|
||||
}
|
||||
|
||||
function test_validateContributor_Success() public {
|
||||
vm.mockCall(
|
||||
address(mockRegistry),
|
||||
abi.encodeWithSelector(ILabRegistry.isValidContributor.selector, testContributor),
|
||||
abi.encode(true)
|
||||
);
|
||||
|
||||
bool result = LabHelper.validateContributor(testContributor, mockRegistry);
|
||||
assertTrue(result, "Valid contributor should return true");
|
||||
}
|
||||
|
||||
function test_validateContributor_ZeroAddress() public {
|
||||
bool result = LabHelper.validateContributor(address(0), mockRegistry);
|
||||
assertFalse(result, "Zero address should be invalid");
|
||||
}
|
||||
|
||||
function test_generateLabMetadata() public {
|
||||
LabHelper.LabMetadata memory metadata = LabHelper.generateLabMetadata(testOwner);
|
||||
|
||||
assertEq(metadata.owner, testOwner, "Owner address mismatch");
|
||||
assertEq(metadata.isActive, true, "Lab should be active by default");
|
||||
assertEq(metadata.totalContributions, 0, "Initial contributions should be zero");
|
||||
assertGt(metadata.createdAt, 0, "Created timestamp should be set");
|
||||
assertEq(metadata.createdAt, metadata.lastUpdated, "Created and updated timestamps should match");
|
||||
}
|
||||
|
||||
function test_GasBenchmark_CalculateContributionScore() public {
|
||||
LabHelper.ContributionRecord[] memory records = new LabHelper.ContributionRecord[](3);
|
||||
|
||||
records[0] = LabHelper.ContributionRecord({
|
||||
contributor: testContributor,
|
||||
amount: 10,
|
||||
timestamp:
|
||||
Loading…
Reference in New Issue
Block a user