Skip to content

Commit 37320cb

Browse files
Omid BodaghiOmid Bodaghi
authored andcommitted
Add performUpkeep test
1 parent 927ce36 commit 37320cb

File tree

2 files changed

+47
-7
lines changed

2 files changed

+47
-7
lines changed

src/Raffle.sol

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ contract Raffle is VRFConsumerBaseV2Plus {
4242
/* Events */
4343
event RaffleEntered(address indexed player);
4444
event WinnerPicked(address indexed winner);
45+
event RequestedRaffleWinner(uint256 indexed requestId);
4546

4647
constructor(
4748
uint256 entranceFee,
@@ -114,7 +115,8 @@ contract Raffle is VRFConsumerBaseV2Plus {
114115
extraArgs: VRFV2PlusClient._argsToBytes(VRFV2PlusClient.ExtraArgsV1({nativePayment: false}))
115116
});
116117

117-
s_vrfCoordinator.requestRandomWords(request);
118+
uint256 requestId = s_vrfCoordinator.requestRandomWords(request);
119+
emit RequestedRaffleWinner(requestId);
118120
}
119121

120122
function fulfillRandomWords(uint256, /* requestId */ uint256[] calldata randomWords) internal override {

test/unit/RaffleTest.s.sol

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {Test} from "forge-std/Test.sol";
55
import {DeployRaffle} from "../../script/DeployRaffle.s.sol";
66
import {HelperConfig} from "../../script/HelperConfig.s.sol";
77
import {Raffle} from "../../src/Raffle.sol";
8+
import {Vm} from "forge-std/Vm.sol";
89

910
contract RaffleTest is Test {
1011
Raffle public raffle;
@@ -37,6 +38,15 @@ contract RaffleTest is Test {
3738
callbackGasLimit = config.callbackGasLimit;
3839
}
3940

41+
modifier raffleEntered() {
42+
vm.prank(PLAYER);
43+
vm.deal(PLAYER, STARTING_PLAYER_BALANCE);
44+
raffle.enterRaffle{value: entranceFee}();
45+
vm.warp(block.timestamp + interval + 1);
46+
vm.roll(block.number + 1);
47+
_;
48+
}
49+
4050
function testRaffleInitializesInOpesState() public view {
4151
assert(raffle.getRaffleState() == Raffle.RaffleState.OPEN);
4252
}
@@ -65,7 +75,7 @@ contract RaffleTest is Test {
6575
raffle.enterRaffle{value: entranceFee}();
6676
}
6777

68-
function testDontAllowPlayersToEnterWhileRaffleIsCalculting() public {
78+
function testDontAllowPlayersToEnterWhileRaffleIsCalculting() public raffleEntered {
6979
vm.prank(PLAYER);
7080
vm.deal(PLAYER, STARTING_PLAYER_BALANCE);
7181
raffle.enterRaffle{value: entranceFee}();
@@ -87,15 +97,43 @@ contract RaffleTest is Test {
8797
assert(!upkeepNeeded);
8898
}
8999

90-
function testCheckUpkeepReturnsFalseIfRaffleIsntOpen() public {
100+
function testCheckUpkeepReturnsFalseIfRaffleIsntOpen() public raffleEntered {
101+
raffle.performUpkeep("");
102+
103+
(bool upkeepNeeded,) = raffle.checkUpKeep("");
104+
assert(!upkeepNeeded);
105+
}
106+
107+
// TEST PERFORM UPKEEP
108+
function testPerformUpkeepCanOnlyRunIfCheckUpkeepIsTrue() public raffleEntered {
109+
raffle.performUpkeep("");
110+
}
111+
112+
function testPerformUpkeepRevertsIfCheckUpkeepIsFalse() public {
113+
uint256 currentBalance = 0;
114+
uint256 numPlayers = 0;
115+
Raffle.RaffleState rState = raffle.getRaffleState();
116+
91117
vm.prank(PLAYER);
92118
vm.deal(PLAYER, STARTING_PLAYER_BALANCE);
93119
raffle.enterRaffle{value: entranceFee}();
94-
vm.warp(block.timestamp + interval + 1);
95-
vm.roll(block.number + 1);
120+
currentBalance += entranceFee;
121+
numPlayers = 1;
122+
123+
vm.expectRevert(
124+
abi.encodeWithSelector(Raffle.Raffle__UpkeepNotNeeded.selector, currentBalance, numPlayers, rState)
125+
);
96126
raffle.performUpkeep("");
127+
}
97128

98-
(bool upkeepNeeded,) = raffle.checkUpKeep("");
99-
assert(!upkeepNeeded);
129+
function testPerformUpkeepUpdatesRaffleStateAndEmitsRequestId() public raffleEntered {
130+
vm.recordLogs();
131+
raffle.performUpkeep("");
132+
Vm.Log[] memory entries = vm.getRecordedLogs();
133+
bytes32 requestId = entries[1].topics[1];
134+
135+
Raffle.RaffleState raffleState = raffle.getRaffleState();
136+
assert(uint256(requestId) > 0);
137+
assert(uint256(raffleState) == 1);
100138
}
101139
}

0 commit comments

Comments
 (0)