Skip to content

Commit

Permalink
test: add Adminable tests
Browse files Browse the repository at this point in the history
  • Loading branch information
andreivladbrg committed Jan 9, 2025
1 parent bd172de commit 84d4e15
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 0 deletions.
83 changes: 83 additions & 0 deletions tests/unit/adminable/transfer-admin/transferAdmin.t.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
// SPDX-License-Identifier: UNLICENSED
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";

contract TransferAdmin_Unit_Concrete_Test is CommonBase {
AdminableMock internal adminableMock;
address internal admin;
address internal eve;

function setUp() public virtual override {
CommonBase.setUp();

admin = createUser("admin");
eve = createUser("eve");
adminableMock = new AdminableMock(admin);
resetPrank(admin);
}

function test_RevertWhen_CallerNotAdmin() external {
// Make Eve the caller in this test.
resetPrank(eve);

// Run the test.
vm.expectRevert(abi.encodeWithSelector(Errors.CallerNotAdmin.selector, admin, eve));
adminableMock.transferAdmin(eve);
}

modifier whenCallerAdmin() {
_;
}

function test_WhenNewAdminSameAsCurrentAdmin() external whenCallerAdmin {
// It should emit a {TransferAdmin} event.
vm.expectEmit({ emitter: address(adminableMock) });
emit IAdminable.TransferAdmin({ oldAdmin: admin, newAdmin: admin });

// Transfer the admin.
adminableMock.transferAdmin(admin);

// It should keep the same admin.
address actualAdmin = adminableMock.admin();
address expectedAdmin = admin;
assertEq(actualAdmin, expectedAdmin, "admin");
}

modifier whenNewAdminNotSameAsCurrentAdmin() {
_;
}

function test_WhenNewAdminZeroAddress() external whenCallerAdmin whenNewAdminNotSameAsCurrentAdmin {
// It should emit a {TransferAdmin}.
vm.expectEmit({ emitter: address(adminableMock) });
emit IAdminable.TransferAdmin({ oldAdmin: admin, newAdmin: address(0) });

// Transfer the admin.
adminableMock.transferAdmin(address(0));

// It should set the admin to the zero address.
address actualAdmin = adminableMock.admin();
address expectedAdmin = address(0);
assertEq(actualAdmin, expectedAdmin, "admin");
}

function test_WhenNewAdminNotZeroAddress() external whenCallerAdmin whenNewAdminNotSameAsCurrentAdmin {
address alice = createUser("alice");
// It should emit a {TransferAdmin} event.
vm.expectEmit({ emitter: address(adminableMock) });
emit IAdminable.TransferAdmin({ oldAdmin: admin, newAdmin: alice });

// Transfer the admin.
adminableMock.transferAdmin(alice);

// It should set the new admin.
address actualAdmin = adminableMock.admin();
address expectedAdmin = alice;
assertEq(actualAdmin, expectedAdmin, "admin");
}
}
14 changes: 14 additions & 0 deletions tests/unit/adminable/transfer-admin/transferAdmin.tree
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
TransferAdmin_Unit_Concrete_Test
β”œβ”€β”€ when caller not admin
β”‚ └── it should revert
└── when caller admin
β”œβ”€β”€ when new admin same as current admin
β”‚ β”œβ”€β”€ it should keep the same admin
β”‚ └── it should emit a {TransferAdmin} event
└── when new admin not same as current admin
β”œβ”€β”€ when new admin zero address
β”‚ β”œβ”€β”€ it should set the admin to the zero address
β”‚ └── it should emit a {TransferAdmin}
└── when new admin not zero address
β”œβ”€β”€ it should set the new admin
└── it should emit a {TransferAdmin} event

0 comments on commit 84d4e15

Please sign in to comment.