// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import {Test} from "forge-std/Test.sol"; import {VRFv2ConsumerExperimental, IVRFCoordinatorV2Like} from "../src/experimental/VRFv2ConsumerExperimental.sol"; import {MockVRFCoordinator} from "./mocks/Mocks.sol"; contract VRFv2ConsumerExperimentalTest is Test { MockVRFCoordinator coord; VRFv2ConsumerExperimental c; function setUp() public { coord = new MockVRFCoordinator(); c = new VRFv2ConsumerExperimental(IVRFCoordinatorV2Like(address(coord)), bytes32(uint256(1)), 1); } function test_RequestAndFulfill() public { uint256 id = c.request(2); assertTrue(c.pending(id)); uint256[] memory w = new uint256[](2); w[0] = 7; w[1] = 9; coord.fulfill(address(c), id, w); assertFalse(c.pending(id)); assertEq(c.randomWords(id)[1], 9); } function test_OnlyCoordinatorCanFulfill() public { uint256 id = c.request(1); vm.expectRevert(abi.encodeWithSelector(VRFv2ConsumerExperimental.OnlyCoordinator.selector, address(this))); c.rawFulfillRandomWords(id, new uint256[](1)); } function test_OnlyOwnerRequests() public { vm.prank(address(0xBEEF)); vm.expectRevert(VRFv2ConsumerExperimental.OnlyOwner.selector); c.request(1); } function test_UnknownOrDoubleFulfillReverts() public { uint256 id = c.request(1); coord.fulfill(address(c), id, new uint256[](1)); vm.expectRevert(); coord.fulfill(address(c), id, new uint256[](1)); } }