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

93 lines
3.3 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import "forge-std/Test.sol";
import "../contracts/GreeterFactory.sol";
import "../contracts/Greeter.sol";
contract GreeterFactoryTest is Test {
GreeterFactory public greeterFactory;
address public owner;
address public otherUser;
function setUp() public {
owner = makeAddr("owner");
otherUser = makeAddr("otherUser");
vm.prank(owner);
greeterFactory = new GreeterFactory();
}
function test_CreateGreeter() public {
vm.prank(owner);
string memory initialGreeting = "Hello, ChunkNet!";
address greeterAddress = greeterFactory.createGreeter(initialGreeting);
assertTrue(greeterFactory.isActiveGreeter(greeterAddress), "Greeter should be active");
Greeter greeter = Greeter(greeterAddress);
assertEq(greeter.greeting(), initialGreeting, "Greeting should match initial greeting");
assertEq(greeter.owner(), owner, "Owner should be set correctly");
}
function testRevert_CreateGreeterEmptyGreeting() public {
vm.prank(owner);
vm.expectRevert("Greeting must not be empty");
greeterFactory.createGreeter("");
}
function test_DestroyGreeter() public {
vm.startPrank(owner);
string memory initialGreeting = "Hello, ChunkNet!";
address greeterAddress = greeterFactory.createGreeter(initialGreeting);
greeterFactory.destroyGreeter(greeterAddress);
assertFalse(greeterFactory.isActiveGreeter(greeterAddress), "Greeter should be inactive");
vm.stopPrank();
}
function testRevert_DestroyGreeterNotOwner() public {
vm.prank(owner);
address greeterAddress = greeterFactory.createGreeter("Hello");
vm.prank(otherUser);
vm.expectRevert("Only greeter owner can destroy");
greeterFactory.destroyGreeter(greeterAddress);
}
function testRevert_DestroyNonExistentGreeter() public {
vm.prank(owner);
vm.expectRevert("Greeter does not exist or already destroyed");
greeterFactory.destroyGreeter(address(0x123));
}
function test_GetOwnerGreeterInstances() public {
vm.startPrank(owner);
address greeter1 = greeterFactory.createGreeter("Hello 1");
address greeter2 = greeterFactory.createGreeter("Hello 2");
address[] memory ownerGreeteres = greeterFactory.getOwnerGreeterInstances(owner);
assertEq(ownerGreeteres.length, 2, "Owner should have two greeter instances");
assertEq(ownerGreeteres[0], greeter1, "First greeter should match");
assertEq(ownerGreeteres[1], greeter2, "Second greeter should match");
vm.stopPrank();
}
function testFuzz_CreateMultipleGreeterInstances(string memory greeting) public {
vm.assume(bytes(greeting).length > 0);
vm.prank(owner);
address greeterAddress = greeterFactory.createGreeter(greeting);
assertTrue(greeterFactory.isActiveGreeter(greeterAddress), "Greeter should be active");
Greeter greeter = Greeter(greeterAddress);
assertEq(greeter.greeting(), greeting, "Greeting should match fuzzed input");
}
function test_GasBenchmarkCreateGreeter() public {
vm.prank(owner);
greeterFactory.createGreeter("Hello, ChunkNet!");
}
}