137 lines
4.0 KiB
Solidity
137 lines
4.0 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.19;
|
|
|
|
import "forge-std/Test.sol";
|
|
import "../contracts/interfaces/ILabRegistry.sol";
|
|
import "@openzeppelin/contracts/mocks/ERC20Mock.sol";
|
|
|
|
contract ILabRegistryTest is Test {
|
|
ILabRegistry public labRegistry;
|
|
address public owner;
|
|
address public researcher1;
|
|
address public researcher2;
|
|
|
|
function setUp() public {
|
|
owner = makeAddr("owner");
|
|
researcher1 = makeAddr("researcher1");
|
|
researcher2 = makeAddr("researcher2");
|
|
|
|
vm.prank(owner);
|
|
labRegistry = ILabRegistry(address(new ERC20Mock())); // Placeholder deployment
|
|
}
|
|
|
|
function test_RegisterLab() public {
|
|
vm.prank(owner);
|
|
uint256 labId = labRegistry.registerLab(
|
|
"ChunkLabs",
|
|
"Advanced blockchain research",
|
|
keccak256("metadata")
|
|
);
|
|
|
|
ILabRegistry.LabEntity memory lab = labRegistry.getLab(labId);
|
|
|
|
assertEq(lab.name, "ChunkLabs", "Lab name should match");
|
|
assertEq(lab.owner, owner, "Lab owner should be msg.sender");
|
|
assertTrue(lab.isActive, "Lab should be active after registration");
|
|
}
|
|
|
|
function testFuzz_RegisterLabWithVariedNames(string memory name) public {
|
|
vm.assume(bytes(name).length > 0 && bytes(name).length < 50);
|
|
|
|
vm.prank(owner);
|
|
uint256 labId = labRegistry.registerLab(
|
|
name,
|
|
"Research lab",
|
|
keccak256(abi.encodePacked(name))
|
|
);
|
|
|
|
ILabRegistry.LabEntity memory lab = labRegistry.getLab(labId);
|
|
assertEq(lab.name, name, "Fuzzy lab name should match input");
|
|
}
|
|
|
|
function test_UpdateLabDetails() public {
|
|
vm.prank(owner);
|
|
uint256 labId = labRegistry.registerLab(
|
|
"InitialName",
|
|
"Initial description",
|
|
keccak256("initial")
|
|
);
|
|
|
|
vm.prank(owner);
|
|
labRegistry.updateLabDetails(
|
|
labId,
|
|
"UpdatedName",
|
|
"Updated description",
|
|
keccak256("updated")
|
|
);
|
|
|
|
ILabRegistry.LabEntity memory updatedLab = labRegistry.getLab(labId);
|
|
|
|
assertEq(updatedLab.name, "UpdatedName", "Lab name should be updated");
|
|
assertEq(updatedLab.description, "Updated description", "Lab description should be updated");
|
|
}
|
|
|
|
function test_AddRemoveResearcher() public {
|
|
vm.prank(owner);
|
|
uint256 labId = labRegistry.registerLab(
|
|
"ResearchLab",
|
|
"Researcher management",
|
|
keccak256("metadata")
|
|
);
|
|
|
|
vm.prank(owner);
|
|
labRegistry.addResearcher(labId, researcher1);
|
|
|
|
assertTrue(
|
|
labRegistry.isAuthorizedResearcher(labId, researcher1),
|
|
"Researcher should be authorized"
|
|
);
|
|
|
|
vm.prank(owner);
|
|
labRegistry.removeResearcher(labId, researcher1);
|
|
|
|
assertFalse(
|
|
labRegistry.isAuthorizedResearcher(labId, researcher1),
|
|
"Researcher should be unauthorized"
|
|
);
|
|
}
|
|
|
|
function testRevert_UnauthorizedLabUpdate() public {
|
|
vm.prank(owner);
|
|
uint256 labId = labRegistry.registerLab(
|
|
"SecureLab",
|
|
"Restricted updates",
|
|
keccak256("metadata")
|
|
);
|
|
|
|
vm.expectRevert("Unauthorized");
|
|
vm.prank(researcher1);
|
|
labRegistry.updateLabDetails(
|
|
labId,
|
|
"HackedName",
|
|
"Unauthorized update",
|
|
keccak256("hacked")
|
|
);
|
|
}
|
|
|
|
function testRevert_DeactivatedLabModification() public {
|
|
vm.prank(owner);
|
|
uint256 labId = labRegistry.registerLab(
|
|
"ClosedLab",
|
|
"Soon to be deactivated",
|
|
keccak256("metadata")
|
|
);
|
|
|
|
vm.prank(owner);
|
|
labRegistry.deactivateLab(labId);
|
|
|
|
vm.expectRevert("Lab is not active");
|
|
vm.prank(owner);
|
|
labRegistry.updateLabDetails(
|
|
labId,
|
|
"WontWork",
|
|
"Deactivated lab",
|
|
keccak256("wontupdate")
|
|
);
|
|
}
|
|
} |