Skip to content

Commit

Permalink
transfer tests
Browse files Browse the repository at this point in the history
  • Loading branch information
namrapatel committed Feb 10, 2022
1 parent 5d7bdfa commit ea1fcb1
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 6 deletions.
4 changes: 4 additions & 0 deletions src/Persona.sol
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ contract Persona is ERC721 {
owner = newContractOwner;
}

function getOwner(uint256 personaId) public view returns (address) {
return ownerOf[personaId];
}

/*///////////////////////////////////////////////////////////////
VIEW
//////////////////////////////////////////////////////////////*/
Expand Down
64 changes: 58 additions & 6 deletions src/test/Persona.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ contract PersonaTest is BaseTest {
}

/// Deauthorization \\\
function testPersonaDeauthorizeConsumerSpecific() public {
function testDeauthorizeConsumerSpecific() public {
uint256 id = _mintTo(personaOwner);
_authorizeConsumerSpecific(id, alice, address(consumer));

Expand All @@ -206,7 +206,7 @@ contract PersonaTest is BaseTest {
assertEq(persona.getAuthorization(id, alice, address(consumer)).authorizedFns.length, uint256(0));
}

function testFailMockConsumerDeauthorizeConsumerSpecific() public {
function testFailMockConsumerCallDeauthorizeConsumerSpecific() public {
uint256 id = _mintTo(personaOwner);
_authorizeConsumerSpecific(id, alice, address(consumer));

Expand All @@ -224,7 +224,7 @@ contract PersonaTest is BaseTest {
vm.stopPrank();
}

function testPersonaDeauthorizeFunctionSpecific() public {
function testDeauthorizeFunctionSpecific() public {
uint256 id = _mintTo(personaOwner);
bytes4[] memory fnSignatures = new bytes4[](1);
bytes4 selector = consumer.foo.selector;
Expand All @@ -244,7 +244,7 @@ contract PersonaTest is BaseTest {
assertTrue(persona.getAuthorization(id, alice, address(consumer)).isAuthorized == false);
}

function testFailMockConsumerDeauthorizeFunctionSpecific() public {
function testFailMockConsumerCallDeauthorizeFunctionSpecific() public {
uint256 id = _mintTo(personaOwner);
bytes4[] memory fnSignatures = new bytes4[](1);
bytes4 selector = consumer.foo.selector;
Expand All @@ -265,8 +265,60 @@ contract PersonaTest is BaseTest {
vm.stopPrank();
}

function testFailConsumerSpecificCallAfterDeimpersonation() public {
uint256 id = _mintTo(personaOwner);
_authorizeConsumerSpecific(id, alice, address(consumer));

vm.startPrank(alice);
persona.impersonate(id, address(consumer));
persona.deimpersonate(address(consumer));
consumer.foo();
vm.stopPrank();
}

function testFailFunctionSpecificCallAfterDeimpersonation() public {
uint256 id = _mintTo(personaOwner);
bytes4[] memory fnSignatures = new bytes4[](1);
bytes4 selector = consumer.foo.selector;
fnSignatures[0] = selector;
_authorizeFunctionSpecific(id, alice, address(consumer), fnSignatures);

vm.startPrank(alice);
persona.impersonate(id, address(consumer));
persona.deimpersonate(address(consumer));
consumer.foo();
vm.stopPrank();
}

/// Transfer \\\
function testTransfer() public {

function testTransferOwnership() public {
uint256 id = _mintTo(personaOwner);

vm.startPrank(personaOwner);
persona.transferFrom(address(personaOwner), address(alice), id);
vm.stopPrank();

assertTrue(persona.getOwner(id) == address(alice));
}

function testTransferRemovesAuthorization() public {
uint256 id = _mintTo(personaOwner);

vm.startPrank(personaOwner);
persona.authorize(id, personaOwner, address(consumer), new bytes4[](0));
persona.transferFrom(personaOwner, address(alice), id);
vm.stopPrank();

assertTrue(persona.getAuthorization(id, personaOwner, address(consumer)).isAuthorized == false);
}

function testFailTransferRemovesImpersonation() public {
uint256 id = _mintTo(personaOwner);

vm.startPrank(personaOwner);
persona.impersonate(id, address(consumer));
persona.transferFrom(personaOwner, address(alice), id);
persona.deimpersonate(address(consumer));
vm.stopPrank();
}
}

0 comments on commit ea1fcb1

Please sign in to comment.