mirror of
https://github.com/simple-login/app.git
synced 2024-11-16 00:48:32 +01:00
50c130a3a3
* Store the latest email_log id in the alias to simplify dashboard query * Fix test * Add script to migrate users last email_log_id to alias * Always update the alias last_email_log_id automatically * Only set the alias_id if it is set * Fix test with randomization * Fix notification test * Also remove explicit set on tests * Rate limit alias creation to prevent abuse (#2021) * Rate limit alias creation to prevent abuse * Limit in secs * Calculate bucket time * fix exception * Tune limits * Move rate limit config to configuration (#2023) * Fix dropdown item in header (#2024) * Add option for admin to stop trial (#2026) * Fix: if redis is not configured do not enable rate limit (#2027) * support product IDs for the new Mac app (#2028) Co-authored-by: Son NK <son@simplelogin.io> * Add metrics to rate limit (#2029) * Order domains alphabetically when retrieving them (#2030) * Removed unused import * Remove debug info --------- Co-authored-by: D-Bao <49440133+D-Bao@users.noreply.github.com> Co-authored-by: Son Nguyen Kim <son.nguyen@proton.ch> Co-authored-by: Son NK <son@simplelogin.io>
200 lines
6.5 KiB
Python
200 lines
6.5 KiB
Python
from app.api.serializer import get_alias_infos_with_pagination_v3
|
|
from app.config import PAGE_LIMIT
|
|
from app.db import Session
|
|
from app.models import Alias, Mailbox, Contact, EmailLog
|
|
from tests.utils import create_new_user, random_email
|
|
|
|
|
|
def test_get_alias_infos_with_pagination_v3(flask_client):
|
|
user = create_new_user()
|
|
|
|
# user has 1 alias that's automatically created when the account is created
|
|
alias_infos = get_alias_infos_with_pagination_v3(user)
|
|
assert len(alias_infos) == 1
|
|
alias_info = alias_infos[0]
|
|
|
|
alias = Alias.filter_by(user_id=user.id).first()
|
|
assert alias_info.alias == alias
|
|
assert alias_info.mailbox == user.default_mailbox
|
|
assert alias_info.mailboxes == [user.default_mailbox]
|
|
assert alias_info.nb_forward == 0
|
|
assert alias_info.nb_blocked == 0
|
|
assert alias_info.nb_reply == 0
|
|
assert alias_info.latest_email_log is None
|
|
assert alias_info.latest_contact is None
|
|
|
|
|
|
def test_get_alias_infos_with_pagination_v3_query_alias_email(flask_client):
|
|
"""test the query on the alias email"""
|
|
user = create_new_user()
|
|
|
|
alias = Alias.filter_by(user_id=user.id).first()
|
|
|
|
alias_infos = get_alias_infos_with_pagination_v3(user, query=alias.email)
|
|
assert len(alias_infos) == 1
|
|
|
|
alias_infos = get_alias_infos_with_pagination_v3(user, query="no match")
|
|
assert len(alias_infos) == 0
|
|
|
|
|
|
def test_get_alias_infos_with_pagination_v3_query_alias_mailbox(flask_client):
|
|
"""test the query on the alias mailbox email"""
|
|
user = create_new_user()
|
|
alias = Alias.filter_by(user_id=user.id).first()
|
|
alias_infos = get_alias_infos_with_pagination_v3(user, mailbox_id=alias.mailbox_id)
|
|
assert len(alias_infos) == 1
|
|
|
|
|
|
def test_get_alias_infos_with_pagination_v3_query_alias_mailboxes(flask_client):
|
|
"""test the query on the alias additional mailboxes"""
|
|
user = create_new_user()
|
|
alias = Alias.filter_by(user_id=user.id).first()
|
|
mb = Mailbox.create(user_id=user.id, email="mb@gmail.com")
|
|
alias._mailboxes.append(mb)
|
|
Session.commit()
|
|
|
|
alias_infos = get_alias_infos_with_pagination_v3(user, mailbox_id=mb.id)
|
|
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"""
|
|
user = create_new_user()
|
|
|
|
alias = Alias.filter_by(user_id=user.id).first()
|
|
alias.note = "test note"
|
|
Session.commit()
|
|
|
|
alias_infos = get_alias_infos_with_pagination_v3(user, query="test note")
|
|
assert len(alias_infos) == 1
|
|
|
|
|
|
def test_get_alias_infos_with_pagination_v3_query_alias_name(flask_client):
|
|
"""test the query on the alias name"""
|
|
user = create_new_user()
|
|
|
|
alias = Alias.filter_by(user_id=user.id).first()
|
|
alias.name = "Test Name"
|
|
Session.commit()
|
|
|
|
alias_infos = get_alias_infos_with_pagination_v3(user, query="test name")
|
|
assert len(alias_infos) == 1
|
|
|
|
|
|
def test_get_alias_infos_with_pagination_v3_no_duplicate(flask_client):
|
|
"""When an alias belongs to multiple mailboxes, make sure get_alias_infos_with_pagination_v3
|
|
returns no duplicates
|
|
"""
|
|
user = create_new_user()
|
|
|
|
alias = Alias.first()
|
|
mb = Mailbox.create(user_id=user.id, email="mb@gmail.com")
|
|
alias._mailboxes.append(mb)
|
|
Session.commit()
|
|
|
|
alias_infos = get_alias_infos_with_pagination_v3(user)
|
|
assert len(alias_infos) == 1
|
|
|
|
|
|
def test_get_alias_infos_with_pagination_v3_no_duplicate_when_empty_contact(
|
|
flask_client,
|
|
):
|
|
"""
|
|
Make sure an alias is returned once when it has 2 contacts that have no email log activity
|
|
"""
|
|
user = create_new_user()
|
|
alias = Alias.first()
|
|
|
|
Contact.create(
|
|
user_id=user.id,
|
|
alias_id=alias.id,
|
|
website_email="contact@example.com",
|
|
reply_email="rep@sl.local",
|
|
)
|
|
|
|
Contact.create(
|
|
user_id=user.id,
|
|
alias_id=alias.id,
|
|
website_email="contact2@example.com",
|
|
reply_email="rep2@sl.local",
|
|
)
|
|
|
|
alias_infos = get_alias_infos_with_pagination_v3(user)
|
|
assert len(alias_infos) == 1
|
|
|
|
|
|
def test_get_alias_infos_pinned_alias(flask_client):
|
|
"""Different scenarios with pinned alias"""
|
|
user = create_new_user()
|
|
|
|
# to have 3 pages: 2*PAGE_LIMIT + the alias automatically created for a new account
|
|
for _ in range(2 * PAGE_LIMIT):
|
|
Alias.create_new_random(user)
|
|
|
|
first_alias = Alias.filter_by(user_id=user.id).order_by(Alias.id).first()
|
|
|
|
# should return PAGE_LIMIT alias
|
|
alias_infos = get_alias_infos_with_pagination_v3(user)
|
|
assert len(alias_infos) == PAGE_LIMIT
|
|
# make sure first_alias is not returned as the default order is alias creation date
|
|
assert first_alias not in [ai.alias for ai in alias_infos]
|
|
|
|
# pin the first alias
|
|
first_alias.pinned = True
|
|
Session.commit()
|
|
|
|
alias_infos = get_alias_infos_with_pagination_v3(user)
|
|
# now first_alias is the first result
|
|
assert first_alias == alias_infos[0].alias
|
|
# and the page size is still the same
|
|
assert len(alias_infos) == PAGE_LIMIT
|
|
|
|
# pinned alias isn't included in the search
|
|
alias_infos = get_alias_infos_with_pagination_v3(user, query="no match")
|
|
assert len(alias_infos) == 0
|
|
|
|
|
|
def test_get_alias_infos_with_no_last_email_log(flask_client):
|
|
user = create_new_user()
|
|
alias_infos = get_alias_infos_with_pagination_v3(user)
|
|
assert len(alias_infos) == 1
|
|
row = alias_infos[0]
|
|
assert row.alias.id == user.newsletter_alias_id
|
|
assert row.latest_contact is None
|
|
assert row.latest_email_log is None
|
|
|
|
|
|
def test_get_alias_infos_with_email_log_no_contact():
|
|
user = create_new_user()
|
|
contact = Contact.create(
|
|
user_id=user.id,
|
|
alias_id=user.newsletter_alias_id,
|
|
website_email="a@a.com",
|
|
reply_email=random_email(),
|
|
flush=True,
|
|
)
|
|
Contact.create(
|
|
user_id=user.id,
|
|
alias_id=user.newsletter_alias_id,
|
|
website_email="unused@a.com",
|
|
reply_email=random_email(),
|
|
flush=True,
|
|
)
|
|
EmailLog.create(
|
|
user_id=user.id,
|
|
alias_id=user.newsletter_alias_id,
|
|
contact_id=contact.id,
|
|
commit=True,
|
|
)
|
|
alias_infos = get_alias_infos_with_pagination_v3(user)
|
|
assert len(alias_infos) == 1
|
|
row = alias_infos[0]
|
|
assert row.alias.id == user.newsletter_alias_id
|
|
assert row.latest_contact is not None
|
|
assert row.latest_contact.id == contact.id
|
|
assert row.latest_email_log is not None
|
|
alias = Alias.get(id=user.newsletter_alias_id)
|
|
assert row.latest_email_log.id == alias.last_email_log_id
|