// SPDX-License-Identifier: MIT pragma solidity ^0.8.30; import {Love} from "../src/Love.sol"; import {Test} from "forge-std/Test.sol"; contract LoveTest is Test { Love public love; address alice = makeAddr("alice"); address bob = makeAddr("bob"); event LoveSent(address indexed from, address indexed to, uint256 amount); function setUp() public { love = new Love(); } function test_Send() public { vm.prank(alice); love.send(bob, 1); assertEq(love.sent(alice, bob), 1); assertEq(love.received(bob), 1); } function test_SendAccumulates() public { vm.startPrank(alice); love.send(bob, 2); love.send(bob, 3); vm.stopPrank(); assertEq(love.sent(alice, bob), 5); assertEq(love.received(bob), 5); } function test_SendEmitsEvent() public { vm.expectEmit(true, true, false, true); emit LoveSent(alice, bob, 7); vm.prank(alice); love.send(bob, 7); } function test_RevertWhen_SendingToSelf() public { vm.prank(alice); vm.expectRevert(Love.SelfLove.selector); love.send(alice, 1); } function test_RevertWhen_AmountIsZero() public { vm.prank(alice); vm.expectRevert(Love.ZeroAmount.selector); love.send(bob, 0); } function testFuzz_Send(address from, address to, uint256 amount) public { vm.assume(from != to); amount = bound(amount, 1, type(uint256).max); vm.prank(from); love.send(to, amount); assertEq(love.sent(from, to), amount); assertEq(love.received(to), amount); } }