diff --git a/README.md b/README.md index 9eae6fff..b14b3c46 100644 --- a/README.md +++ b/README.md @@ -1198,6 +1198,7 @@ Input: - `mailbox_id`: in url - (optional) `default`: boolean. Set a mailbox as default mailbox. - (optional) `email`: email address. Change a mailbox email address. +- (optional) `cancel_email_change`: boolean. Cancel mailbox email change. Output: - 200 if updated successfully diff --git a/app/api/views/mailbox.py b/app/api/views/mailbox.py index 40dc174a..bfebd0d6 100644 --- a/app/api/views/mailbox.py +++ b/app/api/views/mailbox.py @@ -98,6 +98,7 @@ def update_mailbox(mailbox_id): mailbox_id: in url (optional) default: in body. Set a mailbox as the default mailbox. (optional) email: in body. Change a mailbox email. + (optional) cancel_email_change: in body. Cancel mailbox email change. Output: 200 if updated successfully @@ -138,6 +139,12 @@ def update_mailbox(mailbox_id): mailbox.new_email = new_email changed = True + if "cancel_email_change" in data: + cancel_email_change = data.get("cancel_email_change") + if cancel_email_change: + mailbox.new_email = None + changed = True + if changed: db.session.commit() diff --git a/tests/api/test_mailbox.py b/tests/api/test_mailbox.py index a4bc9910..c251668e 100644 --- a/tests/api/test_mailbox.py +++ b/tests/api/test_mailbox.py @@ -121,3 +121,40 @@ def test_update_mailbox_email(flask_client): mb = Mailbox.get(mb.id) assert mb.new_email == "new-email@gmail.com" + + +def test_cancel_mailbox_email_change(flask_client): + user = User.create( + email="a@b.c", password="password", name="Test User", activated=True + ) + db.session.commit() + + # create api_key + api_key = ApiKey.create(user.id, "for test") + db.session.commit() + + # create a mailbox + mb = Mailbox.create(user_id=user.id, email="mb@gmail.com") + db.session.commit() + + # update mailbox email + r = flask_client.put( + url_for("api.delete_mailbox", mailbox_id=mb.id), + headers={"Authentication": api_key.code}, + json={"email": "new-email@gmail.com"}, + ) + assert r.status_code == 200 + + mb = Mailbox.get(mb.id) + assert mb.new_email == "new-email@gmail.com" + + # cancel mailbox email change + r = flask_client.put( + url_for("api.delete_mailbox", mailbox_id=mb.id), + headers={"Authentication": api_key.code}, + json={"cancel_email_change": True}, + ) + assert r.status_code == 200 + + mb = Mailbox.get(mb.id) + assert mb.new_email is None