feat: Executor permissions validation moved to LensHub when following

This commit is contained in:
donosonaumczuk
2023-01-18 18:30:54 -03:00
parent 16dc0b5a63
commit bcc60005b0
8 changed files with 32 additions and 92 deletions

View File

@@ -72,7 +72,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: MINT_NEW_TOKEN
});
}
@@ -85,7 +84,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: alreadyFollowingProfileId,
executor: alreadyFollowingProfileOwner,
followerProfileOwner: alreadyFollowingProfileOwner,
isExecutorApproved: false,
followTokenId: MINT_NEW_TOKEN
});
}
@@ -104,7 +102,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: unexistentTokenId
});
}
@@ -113,25 +110,7 @@ contract FollowNFTTest is BaseTest, ERC721Test {
// Follow - Minting new token - Negatives
//////////////////////////////////////////////////////////
function testCannotFollowMintingNewTokenIfExecutorIsNotTheProfileOwnerOrHisApprovedExecutor(
address executor
) public {
vm.assume(executor != followerProfileOwner);
vm.assume(executor != address(0));
vm.assume(!hub.isDelegatedExecutorApproved(followerProfileOwner, executor));
vm.prank(address(hub));
vm.expectRevert(IFollowNFT.DoesNotHavePermissions.selector);
followNFT.follow({
followerProfileId: followerProfileId,
executor: executor,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: MINT_NEW_TOKEN
});
}
// No negatives when minting a new token, all the failing cases will occur at LensHub level. See `FollowTest.t.sol`.
//////////////////////////////////////////////////////////
// Follow - Minting new token - Scenarios
@@ -144,7 +123,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: MINT_NEW_TOKEN
});
@@ -158,7 +136,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: MINT_NEW_TOKEN
});
@@ -179,7 +156,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: MINT_NEW_TOKEN
});
@@ -198,7 +174,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: MINT_NEW_TOKEN
});
@@ -231,7 +206,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: executor,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: followTokenId
});
}
@@ -252,7 +226,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: alreadyFollowingProfileOwner,
followerProfileOwner: alreadyFollowingProfileOwner,
isExecutorApproved: false,
followTokenId: followTokenId
});
@@ -273,7 +246,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: alreadyFollowingProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: true,
followTokenId: followTokenId
});
@@ -298,7 +270,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: followTokenId
});
@@ -327,7 +298,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: executorAsApprovedDelegatee,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: true,
followTokenId: followTokenId
});
@@ -362,7 +332,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: executor,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: followTokenId
});
}
@@ -388,7 +357,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: followTokenId
});
@@ -418,7 +386,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: executorAsApprovedDelegatee,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: true,
followTokenId: followTokenId
});
@@ -452,7 +419,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: executorAsApprovedDelegatee,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: true,
followTokenId: followTokenId
});
@@ -479,7 +445,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: followTokenId
});
@@ -510,7 +475,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: executorAsApprovedDelegatee,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: true,
followTokenId: followTokenId
});
@@ -538,7 +502,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: followTokenId
});
@@ -570,7 +533,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: executorAsApprovedDelegatee,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: true,
followTokenId: followTokenId
});
@@ -606,7 +568,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: alreadyFollowingProfileId,
executor: alreadyFollowingProfileOwner,
followerProfileOwner: alreadyFollowingProfileOwner,
isExecutorApproved: false,
followTokenId: followTokenId
});
@@ -890,7 +851,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: MINT_NEW_TOKEN
});
@@ -1025,7 +985,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
followerProfileId: followerProfileId,
executor: followerProfileOwner,
followerProfileOwner: followerProfileOwner,
isExecutorApproved: false,
followTokenId: MINT_NEW_TOKEN
});

View File

@@ -95,6 +95,27 @@ contract FollowTest is BaseTest, AssumptionHelpers {
});
}
function testCannotFollowIfExecutorIsNotTheProfileOwnerOrHisApprovedExecutor(uint256 executorPk)
public
{
vm.assume(_isValidPk(executorPk));
address executor = vm.addr(executorPk);
vm.assume(executor != address(0));
vm.assume(executor != followerProfileOwner);
vm.assume(!hub.isDelegatedExecutorApproved(followerProfileOwner, executor));
vm.expectRevert(Errors.ExecutorInvalid.selector);
_follow({
pk: executorPk,
isFollowerProfileOwner: false,
followerProfileId: followerProfileId,
idsOfProfilesToFollow: _toUint256Array(targetProfileId),
followTokenIds: _toUint256Array(MINT_NEW_TOKEN),
datas: _toBytesArray('', '')
});
}
function testCannotFollowIfAmountOfTokenIdsPassedDiffersFromAmountOfProfilesToFollow() public {
vm.expectRevert(Errors.ArrayMismatch.selector);
@@ -235,13 +256,7 @@ contract FollowTest is BaseTest, AssumptionHelpers {
targetFollowNFTAddress,
abi.encodeCall(
followNFT.follow,
(
followerProfileId,
followerProfileOwner,
followerProfileOwner,
false,
MINT_NEW_TOKEN
)
(followerProfileId, followerProfileOwner, followerProfileOwner, MINT_NEW_TOKEN)
)
);
@@ -304,13 +319,7 @@ contract FollowTest is BaseTest, AssumptionHelpers {
targetFollowNFTAddress,
abi.encodeCall(
followNFT.follow,
(
followerProfileId,
approvedDelegatedExecutor,
followerProfileOwner,
true,
MINT_NEW_TOKEN
)
(followerProfileId, approvedDelegatedExecutor, followerProfileOwner, MINT_NEW_TOKEN)
)
);

View File

@@ -62,7 +62,7 @@ contract SetBlockStatusTest is BaseTest, AssumptionHelpers {
vm.prank(statusSetterProfileOwner);
hub.burn(statusSetterProfileId);
vm.expectRevert(Errors.ExecutorInvalid.selector);
vm.expectRevert(Errors.TokenDoesNotExist.selector);
_setBlockStatus({
pk: statusSetterProfileOwnerPk,
@@ -359,21 +359,6 @@ contract SetBlockStatusMetaTxTest is SetBlockStatusTest, MetaTxNegatives {
});
}
function testCannotSetBlockStatusIfSetterProfileDoesNotExist() public override {
vm.prank(statusSetterProfileOwner);
hub.burn(statusSetterProfileId);
vm.expectRevert(Errors.SignatureInvalid.selector);
_setBlockStatus({
pk: statusSetterProfileOwnerPk,
isStatusSetterProfileOwner: true,
byProfileId: statusSetterProfileId,
idsOfProfilesToSetBlockStatus: _toUint256Array(blockeeProfileId),
blockStatus: _toBoolArray(true)
});
}
function testCannotSetBlockStatusIfNotOwnerOrApprovedDelegatedExecutorOfSetterProfile(
uint256 nonOwnerNorDelegatedExecutorPk
) public override {