diff --git a/app/mailbox_utils.py b/app/mailbox_utils.py index 47755223..ad37b718 100644 --- a/app/mailbox_utils.py +++ b/app/mailbox_utils.py @@ -22,6 +22,16 @@ class MailboxError(Exception): self.msg = msg +class OnlyPaidError(MailboxError): + def __init__(self): + self.msg = "Only available for paid plans" + + +class CannotVerifyError(MailboxError): + def __init__(self, msg: str): + self.msg = msg + + MAX_ACTIVATION_TRIES = 3 @@ -36,7 +46,7 @@ def create_mailbox( LOG.i( f"User {user} has tried to create mailbox with {email} but is not premium" ) - raise MailboxError("Only premium plan can add additional mailbox") + raise OnlyPaidError() if not is_valid_email(email): LOG.i( f"User {user} has tried to create mailbox with {email} but is not valid email" @@ -162,20 +172,20 @@ def verify_mailbox_code(user: User, mailbox_id: int, code: str) -> Mailbox: if activation.tries >= MAX_ACTIVATION_TRIES: LOG.i(f"User {user} failed to verify mailbox {mailbox_id} more than 3 times") clear_activation_codes_for_mailbox(mailbox) - raise MailboxError("Invalid activation code. Please request another code.") + raise CannotVerifyError("Invalid activation code. Please request another code.") if activation.created_at < arrow.now().shift(minutes=-15): LOG.i( f"User {user} failed to verify mailbox {mailbox_id} because code is too old" ) clear_activation_codes_for_mailbox(mailbox) - raise MailboxError("Invalid activation code. Please request another code.") + raise CannotVerifyError("Invalid activation code. Please request another code.") if code != activation.code: LOG.i( f"User {user} failed to verify mailbox {mailbox_id} because code does not match" ) activation.tries = activation.tries + 1 Session.commit() - raise MailboxError("Invalid activation code") + raise CannotVerifyError("Invalid activation code") LOG.i(f"User {user} has verified mailbox {mailbox_id}") mailbox.verified = True clear_activation_codes_for_mailbox(mailbox) diff --git a/tests/api/test_mailbox.py b/tests/api/test_mailbox.py index 813eb3cd..085a42aa 100644 --- a/tests/api/test_mailbox.py +++ b/tests/api/test_mailbox.py @@ -42,7 +42,7 @@ def test_create_mailbox_fail_for_free_user(flask_client): ) assert r.status_code == 400 - assert r.json == {"error": "Only premium plan can add additional mailbox"} + assert r.json == {"error": "Only available for paid plans"} def test_delete_mailbox(flask_client): diff --git a/tests/test_mailbox_utils.py b/tests/test_mailbox_utils.py index 7e076955..1b37345d 100644 --- a/tests/test_mailbox_utils.py +++ b/tests/test_mailbox_utils.py @@ -30,7 +30,7 @@ def test_free_user_cannot_add_mailbox(): user.lifetime = False email = random_email() try: - with pytest.raises(mailbox_utils.MailboxError): + with pytest.raises(mailbox_utils.OnlyPaidError): mailbox_utils.create_mailbox(user, email) finally: user.lifetime = True @@ -214,7 +214,7 @@ def test_verify_fail(): try: mailbox_utils.verify_mailbox_code(user, mailbox.id, "9999999") assert False, f"test {i}" - except mailbox_utils.MailboxError: + except mailbox_utils.CannotVerifyError: activation = MailboxActivation.get_by(mailbox_id=mailbox.id) assert activation.tries == i + 1 @@ -225,7 +225,7 @@ def test_verify_too_may(): activation = MailboxActivation.get_by(mailbox_id=mailbox.id) activation.tries = mailbox_utils.MAX_ACTIVATION_TRIES Session.commit() - with pytest.raises(mailbox_utils.MailboxError): + with pytest.raises(mailbox_utils.CannotVerifyError): mailbox_utils.verify_mailbox_code(user, mailbox.id, activation.code) @@ -235,7 +235,7 @@ def test_verify_too_old_code(): activation = MailboxActivation.get_by(mailbox_id=mailbox.id) activation.created_at = arrow.now().shift(minutes=-30) Session.commit() - with pytest.raises(mailbox_utils.MailboxError): + with pytest.raises(mailbox_utils.CannotVerifyError): mailbox_utils.verify_mailbox_code(user, mailbox.id, activation.code)