Skip to content

Commit

Permalink
Re-add acceptGuardian & processRecovery tests
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnGuilding committed Jun 17, 2024
1 parent 259f91d commit 7661bc4
Show file tree
Hide file tree
Showing 4 changed files with 200 additions and 205 deletions.
8 changes: 4 additions & 4 deletions src/EmailRecoveryManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -353,17 +353,17 @@ contract EmailRecoveryManager is EmailAccountRecoveryNew, Initializable, IEmailR
subjectHandler
).validateRecoverySubject(templateIdx, subjectParams, address(this));

if (IRecoveryModule(emailRecoveryModule).getAllowedValidators(account).length == 0) {
revert RecoveryModuleNotInstalled();
}

// This check ensures GuardianStatus is correct and also implicitly that the
// account in email is a valid account
GuardianStorage memory guardianStorage = getGuardian(account, guardian);
if (guardianStorage.status != GuardianStatus.ACCEPTED) {
revert InvalidGuardianStatus(guardianStorage.status, GuardianStatus.ACCEPTED);
}

if (IRecoveryModule(emailRecoveryModule).getAllowedValidators(account).length == 0) {
revert RecoveryModuleNotInstalled();
}

RecoveryRequest storage recoveryRequest = recoveryRequests[account];

recoveryRequest.currentWeight += guardianStorage.weight;
Expand Down
1 change: 1 addition & 0 deletions src/handlers/EmailRecoverySubjectHandler.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ pragma solidity ^0.8.25;

import { IEmailRecoverySubjectHandler } from "../interfaces/IEmailRecoverySubjectHandler.sol";
import { EmailRecoveryManager } from "../EmailRecoveryManager.sol";
import "forge-std/console2.sol";

/**
* Handler contract that defines subject templates and how to validate them
Expand Down
158 changes: 86 additions & 72 deletions test/unit/EmailRecoveryManager/acceptGuardian.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,85 +2,99 @@
pragma solidity ^0.8.25;

import "forge-std/console2.sol";
import { ModuleKitHelpers, ModuleKitUserOp } from "modulekit/ModuleKit.sol";
import { MODULE_TYPE_EXECUTOR } from "modulekit/external/ERC7579.sol";
import { EmailRecoveryModule } from "src/modules/EmailRecoveryModule.sol";
import { IEmailRecoveryManager } from "src/interfaces/IEmailRecoveryManager.sol";
import { GuardianStorage, GuardianStatus } from "src/libraries/EnumerableGuardianMap.sol";
import { UnitBase } from "../UnitBase.t.sol";

contract ZkEmailRecovery_acceptGuardian_Test is UnitBase {
contract EmailRecoveryManager_acceptGuardian_Test is UnitBase {
using ModuleKitHelpers for *;
using ModuleKitUserOp for *;

bytes[] subjectParams;
bytes32 nullifier;

function setUp() public override {
super.setUp();

subjectParams = new bytes[](1);
subjectParams[0] = abi.encode(accountAddress);
nullifier = keccak256(abi.encode("nullifier 1"));
}

function test_AcceptGuardian_RevertWhen_InvalidTemplateIndex() public {
uint256 invalidTemplateIdx = 1;

vm.expectRevert(IEmailRecoveryManager.InvalidTemplateIndex.selector);
emailRecoveryManager.exposed_acceptGuardian(
guardian1, invalidTemplateIdx, subjectParams, nullifier
);
}

function test_AcceptGuardian_RevertWhen_AlreadyRecovering() public {
acceptGuardian(accountSalt1);
vm.warp(12 seconds);
handleRecovery(recoveryModuleAddress, calldataHash, accountSalt1);

vm.expectRevert(IEmailRecoveryManager.RecoveryInProcess.selector);
emailRecoveryManager.exposed_acceptGuardian(
guardian1, templateIdx, subjectParams, nullifier
);
}

function test_AcceptGuardian_RevertWhen_RecoveryModuleNotInstalled() public {
vm.prank(accountAddress);
instance.uninstallModule(MODULE_TYPE_EXECUTOR, recoveryModuleAddress, "");
vm.stopPrank();

vm.expectRevert(IEmailRecoveryManager.RecoveryModuleNotInstalled.selector);
emailRecoveryManager.exposed_acceptGuardian(
guardian1, templateIdx, subjectParams, nullifier
);
}

function test_AcceptGuardian_RevertWhen_GuardianStatusIsNONE() public {
address invalidGuardian = address(1);

vm.expectRevert(
abi.encodeWithSelector(
IEmailRecoveryManager.InvalidGuardianStatus.selector,
uint256(GuardianStatus.NONE),
uint256(GuardianStatus.REQUESTED)
)
);
emailRecoveryManager.exposed_acceptGuardian(
invalidGuardian, templateIdx, subjectParams, nullifier
);
}

// function test_AcceptGuardian_RevertWhen_AlreadyRecovering() public {
// acceptGuardian(accountSalt1);
// vm.warp(12 seconds);
// handleRecovery(recoveryModuleAddress, accountSalt1);

// bytes[] memory subjectParams = new bytes[](1);
// subjectParams[0] = abi.encode(accountAddress);
// bytes32 nullifier = keccak256(abi.encode("nullifier 1"));

// vm.expectRevert(IEmailRecoveryManager.RecoveryInProcess.selector);
// emailRecoveryManager.exposed_acceptGuardian(
// guardian1, templateIdx, subjectParams, nullifier
// );
// }

// function test_AcceptGuardian_RevertWhen_GuardianStatusIsNONE() public {
// bytes[] memory subjectParams = new bytes[](1);
// subjectParams[0] = abi.encode(accountAddress);
// bytes32 nullifier = keccak256(abi.encode("nullifier 1"));

// vm.prank(accountAddress);
// instance.uninstallModule(MODULE_TYPE_EXECUTOR, recoveryModuleAddress, "");
// vm.stopPrank();

// vm.expectRevert(
// abi.encodeWithSelector(
// IEmailRecoveryManager.InvalidGuardianStatus.selector,
// uint256(GuardianStatus.NONE),
// uint256(GuardianStatus.REQUESTED)
// )
// );
// emailRecoveryManager.exposed_acceptGuardian(
// guardian1, templateIdx, subjectParams, nullifier
// );
// }

// function test_AcceptGuardian_RevertWhen_GuardianStatusIsACCEPTED() public {
// bytes[] memory subjectParams = new bytes[](1);
// subjectParams[0] = abi.encode(accountAddress);
// bytes32 nullifier = keccak256(abi.encode("nullifier 1"));

// emailRecoveryManager.exposed_acceptGuardian(
// guardian1, templateIdx, subjectParams, nullifier
// );

// vm.expectRevert(
// abi.encodeWithSelector(
// IEmailRecoveryManager.InvalidGuardianStatus.selector,
// uint256(GuardianStatus.ACCEPTED),
// uint256(GuardianStatus.REQUESTED)
// )
// );
// emailRecoveryManager.exposed_acceptGuardian(
// guardian1, templateIdx, subjectParams, nullifier
// );
// }

// function test_AcceptGuardian_Succeeds() public {
// bytes[] memory subjectParams = new bytes[](1);
// subjectParams[0] = abi.encode(accountAddress);
// bytes32 nullifier = keccak256(abi.encode("nullifier 1"));

// emailRecoveryManager.exposed_acceptGuardian(
// guardian1, templateIdx, subjectParams, nullifier
// );

// GuardianStorage memory guardianStorage =
// emailRecoveryManager.getGuardian(accountAddress, guardian1);
// assertEq(uint256(guardianStorage.status), uint256(GuardianStatus.ACCEPTED));
// assertEq(guardianStorage.weight, uint256(1));
// }
function test_AcceptGuardian_RevertWhen_GuardianStatusIsACCEPTED() public {
emailRecoveryManager.exposed_acceptGuardian(
guardian1, templateIdx, subjectParams, nullifier
);

vm.expectRevert(
abi.encodeWithSelector(
IEmailRecoveryManager.InvalidGuardianStatus.selector,
uint256(GuardianStatus.ACCEPTED),
uint256(GuardianStatus.REQUESTED)
)
);
emailRecoveryManager.exposed_acceptGuardian(
guardian1, templateIdx, subjectParams, nullifier
);
}

function test_AcceptGuardian_Succeeds() public {
emailRecoveryManager.exposed_acceptGuardian(
guardian1, templateIdx, subjectParams, nullifier
);

GuardianStorage memory guardianStorage =
emailRecoveryManager.getGuardian(accountAddress, guardian1);
assertEq(uint256(guardianStorage.status), uint256(GuardianStatus.ACCEPTED));
assertEq(guardianStorage.weight, uint256(1));
}
}
Loading

0 comments on commit 7661bc4

Please sign in to comment.