diff --git a/README.md b/README.md index 3472bf0f..905c01eb 100644 --- a/README.md +++ b/README.md @@ -1242,9 +1242,9 @@ Return 409 if contact is already added. ### Mailbox endpoints -#### GET /api/mailboxes +#### GET /api/v2/mailboxes -Get user verified mailboxes. +Get user's mailboxes, including unverified ones. Input: - `Authentication` header that contains the api key diff --git a/app/api/views/mailbox.py b/app/api/views/mailbox.py index 4704663a..e3ca02f2 100644 --- a/app/api/views/mailbox.py +++ b/app/api/views/mailbox.py @@ -153,9 +153,9 @@ def update_mailbox(mailbox_id): @require_api_auth def get_mailboxes(): """ - Get mailboxes + Get verified mailboxes Output: - - mailboxes: list of alias dict + - mailboxes: list of mailbox dict """ user = g.user @@ -163,3 +163,23 @@ def get_mailboxes(): jsonify(mailboxes=[mailbox_to_dict(mb) for mb in user.mailboxes()]), 200, ) + + +@api_bp.route("/v2/mailboxes", methods=["GET"]) +@require_api_auth +def get_mailboxes_v2(): + """ + Get all mailboxes - including unverified mailboxes + Output: + - mailboxes: list of mailbox dict + """ + user = g.user + mailboxes = [] + + for mailbox in Mailbox.query.filter_by(user_id=user.id): + mailboxes.append(mailbox) + + return ( + jsonify(mailboxes=[mailbox_to_dict(mb) for mb in mailboxes]), + 200, + ) diff --git a/tests/api/test_mailbox.py b/tests/api/test_mailbox.py index 24c58aac..cccfecd2 100644 --- a/tests/api/test_mailbox.py +++ b/tests/api/test_mailbox.py @@ -2,6 +2,7 @@ from flask import url_for from app.extensions import db from app.models import User, ApiKey, Mailbox +from tests.utils import login def test_create_mailbox(flask_client): @@ -190,3 +191,26 @@ def test_get_mailboxes(flask_client): assert "creation_timestamp" in mb assert "nb_alias" in mb assert "verified" in mb + + +def test_get_mailboxes_v2(flask_client): + user = login(flask_client) + + Mailbox.create(user_id=user.id, email="m1@example.com", verified=True) + Mailbox.create(user_id=user.id, email="m2@example.com", verified=False) + db.session.commit() + + r = flask_client.get( + "/api/v2/mailboxes", + ) + assert r.status_code == 200 + # 3 mailboxes: the default, m1 and m2 + assert len(r.json["mailboxes"]) == 3 + + for mb in r.json["mailboxes"]: + assert "email" in mb + assert "id" in mb + assert "default" in mb + assert "creation_timestamp" in mb + assert "nb_alias" in mb + assert "verified" in mb