93 lines
3.3 KiB
Solidity
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!");
|
|
}
|
|
} |