source_weaver_3-contract-lab/test/RepositoryExplorer.t.sol
source_weaver_3 d0cea2434c
Some checks are pending
CI / build-and-test (push) Waiting to run
CI / slither (push) Waiting to run
test: add foundry tests for RepositoryExplorer.sol
2026-04-19 09:09:47 +00:00

127 lines
4.9 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "forge-std/Test.sol";
import "../contracts/RepositoryExplorer.sol";
import "../contracts/Repository.sol";
contract RepositoryExplorerTest is Test {
RepositoryExplorer public repositoryExplorer;
address public owner;
address public contributor1;
address public contributor2;
function setUp() public {
owner = makeAddr("owner");
contributor1 = makeAddr("contributor1");
contributor2 = makeAddr("contributor2");
vm.prank(owner);
repositoryExplorer = new RepositoryExplorer();
}
function test_CreateRepository() public {
vm.startPrank(contributor1);
address[] memory initialContributors = new address[](1);
initialContributors[0] = contributor1;
address repoAddress = repositoryExplorer.createRepository(
"TestRepo",
"A test repository",
initialContributors
);
assertNotEq(repoAddress, address(0), "Repository creation should return a valid address");
assertEq(repositoryExplorer.totalRepositories(), 1, "Total repositories should increment");
assertTrue(repositoryExplorer.registeredRepositories(repoAddress), "Repository should be registered");
vm.stopPrank();
}
function testRevert_CreateRepositoryEmptyName() public {
vm.expectRevert("Repository name cannot be empty");
repositoryExplorer.createRepository("", "Description", new address[](0));
}
function testRevert_CreateRepositoryEmptyDescription() public {
vm.expectRevert("Repository description cannot be empty");
repositoryExplorer.createRepository("TestRepo", "", new address[](0));
}
function test_RemoveRepository() public {
vm.startPrank(owner);
address[] memory initialContributors = new address[](1);
initialContributors[0] = contributor1;
address repoAddress = repositoryExplorer.createRepository(
"TestRepo",
"A test repository",
initialContributors
);
repositoryExplorer.removeRepository(0);
assertEq(repositoryExplorer.totalRepositories(), 0, "Total repositories should decrement");
assertFalse(repositoryExplorer.registeredRepositories(repoAddress), "Repository should be unregistered");
vm.stopPrank();
}
function testRevert_RemoveRepositoryUnauthorized() public {
vm.expectRevert();
repositoryExplorer.removeRepository(0);
}
function test_GetRepositoryDetails() public {
vm.startPrank(contributor1);
address[] memory initialContributors = new address[](2);
initialContributors[0] = contributor1;
initialContributors[1] = contributor2;
repositoryExplorer.createRepository(
"TestRepo",
"A test repository",
initialContributors
);
(string memory name, string memory description, address repoOwner, uint256 contributorCount) =
repositoryExplorer.getRepositoryDetails(0);
assertEq(name, "TestRepo", "Repository name should match");
assertEq(description, "A test repository", "Repository description should match");
assertEq(repoOwner, contributor1, "Repository owner should be creator");
assertEq(contributorCount, 2, "Contributor count should be correct");
vm.stopPrank();
}
function testFuzz_CreateMultipleRepositories(string memory name, string memory description) public {
vm.assume(bytes(name).length > 0);
vm.assume(bytes(description).length > 0);
address[] memory initialContributors = new address[](1);
initialContributors[0] = contributor1;
vm.prank(contributor1);
address repoAddress = repositoryExplorer.createRepository(name, description, initialContributors);
assertNotEq(repoAddress, address(0), "Repository creation should return a valid address");
assertEq(repositoryExplorer.totalRepositories(), 1, "Total repositories should increment");
}
function test_SearchRepositoriesByName() public {
vm.startPrank(contributor1);
address[] memory initialContributors = new address[](1);
initialContributors[0] = contributor1;
repositoryExplorer.createRepository("ChunkNet Repo", "First repo", initialContributors);
repositoryExplorer.createRepository("ChunkNet Alpha", "Second repo", initialContributors);
repositoryExplorer.createRepository("Different Repo", "Third repo", initialContributors);
Repository[] memory results = repositoryExplorer.searchRepositoriesByName("ChunkNet");
assertEq(results.length, 2, "Should find 2 repositories with 'ChunkNet'");
vm.stopPrank();
}
function test_ListRepositories() public {
vm.startPrank(contributor1);
address[] memory initialContributors = new address[](1);
initialContributors