From e2c1af44412639cad83b019f65ef6b669d888a27 Mon Sep 17 00:00:00 2001 From: Andrei Vlad Birgaoanu Date: Thu, 9 Jan 2025 23:43:33 +0200 Subject: [PATCH] test: add transfer admin tests test: add noDelegateCall tests --- tests/mocks/NoDelegateCallMock.sol | 4 ++- .../{transfer-admin => }/transferAdmin.t.sol | 4 +-- .../{transfer-admin => }/transferAdmin.tree | 0 .../no-delegate-call/noDelegateCall.t.sol | 30 +++++++++++++++++++ .../unit/no-delegate-call/noDelegateCall.tree | 5 ++++ 5 files changed, 40 insertions(+), 3 deletions(-) rename tests/unit/adminable/{transfer-admin => }/transferAdmin.t.sol (95%) rename tests/unit/adminable/{transfer-admin => }/transferAdmin.tree (100%) create mode 100644 tests/unit/no-delegate-call/noDelegateCall.t.sol create mode 100644 tests/unit/no-delegate-call/noDelegateCall.tree diff --git a/tests/mocks/NoDelegateCallMock.sol b/tests/mocks/NoDelegateCallMock.sol index 328d85c..2cd54d6 100644 --- a/tests/mocks/NoDelegateCallMock.sol +++ b/tests/mocks/NoDelegateCallMock.sol @@ -5,5 +5,7 @@ import { NoDelegateCall } from "src/NoDelegateCall.sol"; contract NoDelegateCallMock is NoDelegateCall { /// @dev An empty function that uses the `noDelegateCall` modifier. - function foo() public noDelegateCall { } + function foo() public view noDelegateCall returns (uint256) { + return 420; + } } diff --git a/tests/unit/adminable/transfer-admin/transferAdmin.t.sol b/tests/unit/adminable/transferAdmin.t.sol similarity index 95% rename from tests/unit/adminable/transfer-admin/transferAdmin.t.sol rename to tests/unit/adminable/transferAdmin.t.sol index e606de8..25742e8 100644 --- a/tests/unit/adminable/transfer-admin/transferAdmin.t.sol +++ b/tests/unit/adminable/transferAdmin.t.sol @@ -4,8 +4,8 @@ pragma solidity >=0.8.22 <0.9.0; import { IAdminable } from "src/interfaces/IAdminable.sol"; import { Errors } from "src/libraries/Errors.sol"; -import { CommonBase } from "../../../Base.t.sol"; -import { AdminableMock } from "../../../mocks/AdminableMock.sol"; +import { CommonBase } from "../../Base.t.sol"; +import { AdminableMock } from "../../mocks/AdminableMock.sol"; contract TransferAdmin_Unit_Concrete_Test is CommonBase { AdminableMock internal adminableMock; diff --git a/tests/unit/adminable/transfer-admin/transferAdmin.tree b/tests/unit/adminable/transferAdmin.tree similarity index 100% rename from tests/unit/adminable/transfer-admin/transferAdmin.tree rename to tests/unit/adminable/transferAdmin.tree diff --git a/tests/unit/no-delegate-call/noDelegateCall.t.sol b/tests/unit/no-delegate-call/noDelegateCall.t.sol new file mode 100644 index 0000000..74608e7 --- /dev/null +++ b/tests/unit/no-delegate-call/noDelegateCall.t.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.8.22; + +import { Errors } from "src/libraries/Errors.sol"; + +import { CommonBase } from "../../Base.t.sol"; +import { NoDelegateCallMock } from "../../mocks/NoDelegateCallMock.sol"; + +contract NoDelegateCall_Unit_Concrete_Test is CommonBase { + NoDelegateCallMock internal noDelegateCallMock; + + function setUp() public virtual override { + CommonBase.setUp(); + + noDelegateCallMock = new NoDelegateCallMock(); + } + + function test_RevertWhen_DelegateCall() external { + bytes memory callData = abi.encodeCall(noDelegateCallMock.foo, ()); + (bool success, bytes memory returnData) = address(noDelegateCallMock).delegatecall(callData); + assertFalse(success, "delegatecall success"); + assertEq(returnData, abi.encodeWithSelector(Errors.DelegateCall.selector), "delegatecall return data"); + } + + function test_WhenNoDelegateCall() external view { + uint256 actual = noDelegateCallMock.foo(); + uint256 expected = 420; + assertEq(actual, expected, "foo"); + } +} diff --git a/tests/unit/no-delegate-call/noDelegateCall.tree b/tests/unit/no-delegate-call/noDelegateCall.tree new file mode 100644 index 0000000..8e1b664 --- /dev/null +++ b/tests/unit/no-delegate-call/noDelegateCall.tree @@ -0,0 +1,5 @@ +NoDelegateCall_Unit_Concrete_Test +├── when delegate call +│ └── it should revert +└── when no delegate call + └── it should execute the function \ No newline at end of file