evidence_scout-contract-lab/test/RepositoryHelper.t.sol
evidence_scout 2a9efae6db
Some checks are pending
CI / build-and-test (push) Waiting to run
CI / slither (push) Waiting to run
test: add foundry tests for RepositoryHelper.sol
2026-04-19 09:08:20 +00:00

162 lines
4.9 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "forge-std/Test.sol";
import "../contracts/helpers/RepositoryHelper.sol";
import "../contracts/interfaces/RepositoryInterface.sol";
contract MockRepository is RepositoryInterface {
address private _owner;
uint256 private _createdAt;
uint256 private _lastUpdated;
bytes32 private _contentHash;
bool private _isActive;
constructor(address owner) {
_owner = owner;
_createdAt = block.timestamp;
_isActive = true;
}
function getOwner() external view returns (address) {
return _owner;
}
function getCreationTimestamp() external view returns (uint256) {
return _createdAt;
}
function getLastUpdateTimestamp() external view returns (uint256) {
return _lastUpdated;
}
function getContentHash() external view returns (bytes32) {
return _contentHash;
}
function isActive() external view returns (bool) {
return _isActive;
}
function isValidRepository() external pure returns (bool) {
return true;
}
function transferOwnership(address newOwner) external {
require(msg.sender == _owner, "Not owner");
_owner = newOwner;
}
function updateContentHash(bytes32 newHash) external {
require(msg.sender == _owner, "Not owner");
_contentHash = newHash;
_lastUpdated = block.timestamp;
}
function setActive(bool active) external {
require(msg.sender == _owner, "Not owner");
_isActive = active;
}
}
contract RepositoryHelperTest is Test {
address internal owner;
address internal newOwner;
MockRepository internal mockRepository;
function setUp() public {
owner = makeAddr("owner");
newOwner = makeAddr("newOwner");
vm.prank(owner);
mockRepository = new MockRepository(owner);
}
function test_ValidateRepository() public {
bool isValid = RepositoryHelper.validateRepository(address(mockRepository));
assertTrue(isValid, "Repository should be valid");
}
function testRevert_ValidateRepository_ZeroAddress() public {
vm.expectRevert(
abi.encodeWithSelector(
RepositoryHelper.InvalidRepositoryAddress.selector,
address(0)
)
);
RepositoryHelper.validateRepository(address(0));
}
function test_GetRepositoryMetadata() public {
RepositoryHelper.RepositoryMetadata memory metadata =
RepositoryHelper.getRepositoryMetadata(address(mockRepository));
assertEq(metadata.owner, owner, "Owner should match");
assertTrue(metadata.createdAt > 0, "Creation timestamp should be set");
assertTrue(metadata.isActive, "Repository should be active");
}
function testRevert_GetRepositoryMetadata_InvalidRepository() public {
address invalidRepo = makeAddr("invalidRepo");
vm.expectRevert(
abi.encodeWithSelector(
RepositoryHelper.InvalidRepositoryAddress.selector,
invalidRepo
)
);
RepositoryHelper.getRepositoryMetadata(invalidRepo);
}
function test_TransferRepositoryOwnership() public {
vm.prank(owner);
RepositoryHelper.transferRepositoryOwnership(
address(mockRepository),
owner,
newOwner
);
RepositoryHelper.RepositoryMetadata memory metadata =
RepositoryHelper.getRepositoryMetadata(address(mockRepository));
assertEq(metadata.owner, newOwner, "Owner should be transferred");
}
function testRevert_TransferRepositoryOwnership_WrongCaller() public {
address unauthorized = makeAddr("unauthorized");
vm.prank(unauthorized);
vm.expectRevert(
abi.encodeWithSelector(
RepositoryHelper.InsufficientPermissions.selector,
unauthorized
)
);
RepositoryHelper.transferRepositoryOwnership(
address(mockRepository),
owner,
newOwner
);
}
function test_UpdateRepositoryContent() public {
bytes32 newContentHash = keccak256("new content");
vm.prank(owner);
RepositoryHelper.updateRepositoryContent(
address(mockRepository),
owner,
newContentHash
);
RepositoryHelper.RepositoryMetadata memory metadata =
RepositoryHelper.getRepositoryMetadata(address(mockRepository));
assertEq(metadata.contentHash, newContentHash, "Content hash should be updated");
}
function testRevert_UpdateRepositoryContent_Unauthorized() public {
bytes32 newContentHash = keccak256("new content");
address unauthorized = makeAddr("unauthorized");
vm.prank(unauthorized);
vm.expectRevert(