From 6e0394d980906a0693864affd54a6c5a395bb355 Mon Sep 17 00:00:00 2001 From: Son NK <> Date: Tue, 3 Nov 2020 15:10:57 +0100 Subject: [PATCH] fix filter not working when alias has several mailboxes --- app/api/serializer.py | 34 +++++++++++++++++++++++----------- tests/api/test_serializer.py | 3 +++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/app/api/serializer.py b/app/api/serializer.py index 362ed662..26305f58 100644 --- a/app/api/serializer.py +++ b/app/api/serializer.py @@ -223,18 +223,30 @@ def get_alias_infos_with_pagination_v3( .subquery() ) - mailboxes_sub = ( - db.session.query( - Alias.id, - func.count(AliasMailbox.id).label("nb_matched_mailboxes"), - ) - .join(AliasMailbox, Alias.id == AliasMailbox.alias_id, isouter=True) - .join(Mailbox, AliasMailbox.mailbox_id == Mailbox.id, isouter=True) - ) - if query: - mailboxes_sub = mailboxes_sub.filter( - or_(Mailbox.email == None, Mailbox.email.ilike(f"%{query}%")) + mailboxes_sub = ( + db.session.query( + Alias.id, + func.count(Mailbox.id).label("nb_matched_mailboxes"), + ) + .join(AliasMailbox, Alias.id == AliasMailbox.alias_id, isouter=True) + .join( + Mailbox, + and_( + AliasMailbox.mailbox_id == Mailbox.id, + Mailbox.email.ilike(f"%{query}%"), + ), + isouter=True, + ) + ) + else: + mailboxes_sub = ( + db.session.query( + Alias.id, + func.count(Mailbox.id).label("nb_matched_mailboxes"), + ) + .join(AliasMailbox, Alias.id == AliasMailbox.alias_id, isouter=True) + .join(Mailbox, AliasMailbox.mailbox_id == Mailbox.id, isouter=True) ) mailboxes_sub = mailboxes_sub.group_by(Alias.id).subquery() diff --git a/tests/api/test_serializer.py b/tests/api/test_serializer.py index a3632e76..4a8167ba 100644 --- a/tests/api/test_serializer.py +++ b/tests/api/test_serializer.py @@ -81,6 +81,9 @@ def test_get_alias_infos_with_pagination_v3_query_alias_mailboxes(flask_client): alias_infos = get_alias_infos_with_pagination_v3(user, query=mb.email) assert len(alias_infos) == 1 + alias_infos = get_alias_infos_with_pagination_v3(user, query=alias.email) + assert len(alias_infos) == 1 + def test_get_alias_infos_with_pagination_v3_query_alias_note(flask_client): """test the query on the alias note"""