diff --git a/tests/api/test_alias.py b/tests/api/test_alias.py index 17431bda..62b9efbe 100644 --- a/tests/api/test_alias.py +++ b/tests/api/test_alias.py @@ -4,6 +4,7 @@ from app.config import PAGE_LIMIT from app.db import Session from app.email_utils import is_reverse_alias from app.models import User, ApiKey, Alias, Contact, EmailLog, Mailbox +from tests.api.utils import get_new_user_and_api_key from tests.utils import login @@ -209,14 +210,7 @@ def test_delete_alias(flask_client): def test_toggle_alias(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() alias = Alias.create_new_random(user) Session.commit() @@ -231,14 +225,7 @@ def test_toggle_alias(flask_client): def test_alias_activities(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() alias = Alias.create_new_random(user) Session.commit() @@ -292,14 +279,7 @@ def test_alias_activities(flask_client): def test_update_alias(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() alias = Alias.create_new_random(user) Session.commit() @@ -314,17 +294,10 @@ def test_update_alias(flask_client): def test_update_alias_mailbox(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() + user, api_key = get_new_user_and_api_key() mb = Mailbox.create(user_id=user.id, email="ab@cd.com", verified=True) - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() - alias = Alias.create_new_random(user) Session.commit() @@ -346,14 +319,7 @@ def test_update_alias_mailbox(flask_client): def test_update_alias_name(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() alias = Alias.create_new_random(user) Session.commit() @@ -379,18 +345,11 @@ def test_update_alias_name(flask_client): def test_update_alias_mailboxes(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() + user, api_key = get_new_user_and_api_key() mb1 = Mailbox.create(user_id=user.id, email="ab1@cd.com", verified=True) mb2 = Mailbox.create(user_id=user.id, email="ab2@cd.com", verified=True) - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() - alias = Alias.create_new_random(user) Session.commit() @@ -416,14 +375,7 @@ def test_update_alias_mailboxes(flask_client): def test_update_disable_pgp(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() alias = Alias.create_new_random(user) Session.commit() @@ -564,14 +516,7 @@ def test_create_contact_route_invalid_contact_email(flask_client): def test_delete_contact(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() alias = Alias.create_new_random(user) Session.commit() @@ -594,14 +539,7 @@ def test_delete_contact(flask_client): def test_get_alias(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() # create more aliases than PAGE_LIMIT alias = Alias.create_new_random(user) diff --git a/tests/api/test_alias_options.py b/tests/api/test_alias_options.py index e55a5148..de253cb7 100644 --- a/tests/api/test_alias_options.py +++ b/tests/api/test_alias_options.py @@ -1,19 +1,13 @@ from flask import url_for from app.db import Session -from app.models import User, ApiKey, AliasUsedOn, Alias +from app.models import AliasUsedOn, Alias +from tests.api.utils import get_new_user_and_api_key from tests.utils import login def test_different_scenarios_v4(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() # <<< without hostname >>> r = flask_client.get( @@ -51,14 +45,7 @@ def test_different_scenarios_v4(flask_client): def test_different_scenarios_v4_2(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() # <<< without hostname >>> r = flask_client.get( diff --git a/tests/api/test_apple.py b/tests/api/test_apple.py index 4351ef50..7d2e2e97 100644 --- a/tests/api/test_apple.py +++ b/tests/api/test_apple.py @@ -1,18 +1,10 @@ from flask import url_for -from app.db import Session -from app.models import User, ApiKey +from tests.api.utils import get_new_user_and_api_key def test_apple_process_payment(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() receipt_data = """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""" @@ -28,14 +20,7 @@ def test_apple_process_payment(flask_client): def test_apple_update_notification(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() payload = { "unified_receipt": { diff --git a/tests/api/test_auth_mfa.py b/tests/api/test_auth_mfa.py index b27077c8..99c74413 100644 --- a/tests/api/test_auth_mfa.py +++ b/tests/api/test_auth_mfa.py @@ -3,20 +3,13 @@ from flask import url_for from itsdangerous import Signer from app.config import FLASK_SECRET -from app.db import Session -from app.models import User +from tests.utils import create_new_user def test_auth_mfa_success(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - enable_otp=True, - otp_secret="base32secret3232", - ) - Session.commit() + user = create_new_user() + user.enable_otp = True + user.otp_secret = "base32secret3232" totp = pyotp.TOTP(user.otp_secret) s = Signer(FLASK_SECRET) @@ -34,15 +27,9 @@ def test_auth_mfa_success(flask_client): def test_auth_wrong_mfa_key(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - enable_otp=True, - otp_secret="base32secret3232", - ) - Session.commit() + user = create_new_user() + user.enable_otp = True + user.otp_secret = "base32secret3232" totp = pyotp.TOTP(user.otp_secret) diff --git a/tests/api/test_notification.py b/tests/api/test_notification.py index d1c8faed..597d2e46 100644 --- a/tests/api/test_notification.py +++ b/tests/api/test_notification.py @@ -1,18 +1,12 @@ from flask import url_for from app.db import Session -from app.models import User, ApiKey, Notification +from app.models import Notification +from tests.api.utils import get_new_user_and_api_key def test_get_notifications(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() # create some notifications Notification.create(user_id=user.id, message="Test message 1") @@ -44,14 +38,7 @@ def test_get_notifications(flask_client): def test_mark_notification_as_read(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() Notification.create(id=1, user_id=user.id, message="Test message 1") Session.commit() diff --git a/tests/api/test_serializer.py b/tests/api/test_serializer.py index 56340bf2..2628136e 100644 --- a/tests/api/test_serializer.py +++ b/tests/api/test_serializer.py @@ -1,18 +1,12 @@ 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 User, Alias, Mailbox, Contact -from tests.utils import create_random_user +from app.models import Alias, Mailbox, Contact +from tests.utils import create_new_user def test_get_alias_infos_with_pagination_v3(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + 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) @@ -32,13 +26,7 @@ def test_get_alias_infos_with_pagination_v3(flask_client): def test_get_alias_infos_with_pagination_v3_query_alias_email(flask_client): """test the query on the alias email""" - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.first() @@ -51,13 +39,7 @@ def test_get_alias_infos_with_pagination_v3_query_alias_email(flask_client): def test_get_alias_infos_with_pagination_v3_query_alias_mailbox(flask_client): """test the query on the alias mailbox email""" - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.first() alias_infos = get_alias_infos_with_pagination_v3(user, mailbox_id=alias.mailbox_id) assert len(alias_infos) == 1 @@ -65,13 +47,7 @@ def test_get_alias_infos_with_pagination_v3_query_alias_mailbox(flask_client): def test_get_alias_infos_with_pagination_v3_query_alias_mailboxes(flask_client): """test the query on the alias additional mailboxes""" - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.first() mb = Mailbox.create(user_id=user.id, email="mb@gmail.com") alias._mailboxes.append(mb) @@ -86,13 +62,7 @@ def test_get_alias_infos_with_pagination_v3_query_alias_mailboxes(flask_client): def test_get_alias_infos_with_pagination_v3_query_alias_note(flask_client): """test the query on the alias note""" - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.first() alias.note = "test note" @@ -104,13 +74,7 @@ def test_get_alias_infos_with_pagination_v3_query_alias_note(flask_client): def test_get_alias_infos_with_pagination_v3_query_alias_name(flask_client): """test the query on the alias name""" - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.first() alias.name = "Test Name" @@ -124,13 +88,7 @@ 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 = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.first() mb = Mailbox.create(user_id=user.id, email="mb@gmail.com") @@ -147,7 +105,7 @@ def test_get_alias_infos_with_pagination_v3_no_duplicate_when_empty_contact( """ Make sure an alias is returned once when it has 2 contacts that have no email log activity """ - user = create_random_user() + user = create_new_user() alias = Alias.first() Contact.create( @@ -170,13 +128,7 @@ def test_get_alias_infos_with_pagination_v3_no_duplicate_when_empty_contact( def test_get_alias_infos_pinned_alias(flask_client): """Different scenarios with pinned alias""" - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + 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): diff --git a/tests/api/test_user_info.py b/tests/api/test_user_info.py index ed030c2b..f5ebbaa6 100644 --- a/tests/api/test_user_info.py +++ b/tests/api/test_user_info.py @@ -1,19 +1,12 @@ from flask import url_for -from app.db import Session -from app.models import User, ApiKey +from app.models import User +from tests.api.utils import get_new_user_and_api_key from tests.utils import login def test_user_in_trial(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() - - # create api_key - api_key = ApiKey.create(user.id, "for test") - Session.commit() + user, api_key = get_new_user_and_api_key() r = flask_client.get( url_for("api.user_info"), headers={"Authentication": api_key.code} @@ -23,7 +16,7 @@ def test_user_in_trial(flask_client): assert r.json == { "is_premium": True, "name": "Test User", - "email": "a@b.c", + "email": user.email, "in_trial": True, "profile_picture_url": None, } @@ -40,16 +33,7 @@ def test_wrong_api_key(flask_client): def test_create_api_key(flask_client): - # create user, user is activated - User.create(email="a@b.c", password="password", name="Test User", activated=True) - Session.commit() - - # login user - flask_client.post( - url_for("auth.login"), - data={"email": "a@b.c", "password": "password"}, - follow_redirects=True, - ) + login(flask_client) # create api key r = flask_client.post(url_for("api.create_api_key"), json={"device": "Test device"}) @@ -59,16 +43,7 @@ def test_create_api_key(flask_client): def test_logout(flask_client): - # create user, user is activated - User.create(email="a@b.c", password="password", name="Test User", activated=True) - Session.commit() - - # login user - flask_client.post( - url_for("auth.login"), - data={"email": "a@b.c", "password": "password"}, - follow_redirects=True, - ) + login(flask_client) # logout r = flask_client.get( diff --git a/tests/api/utils.py b/tests/api/utils.py new file mode 100644 index 00000000..eefeef2e --- /dev/null +++ b/tests/api/utils.py @@ -0,0 +1,13 @@ +from typing import Tuple + +from app.models import User, ApiKey +from tests.utils import create_new_user + + +def get_new_user_and_api_key() -> Tuple[User, ApiKey]: + user = create_new_user() + + # create api_key + api_key = ApiKey.create(user.id, "for test", commit=True) + + return user, api_key diff --git a/tests/auth/test_login.py b/tests/auth/test_login.py index 5c5ae515..fb28ba3f 100644 --- a/tests/auth/test_login.py +++ b/tests/auth/test_login.py @@ -1,19 +1,17 @@ from flask import url_for from app.db import Session -from app.models import User +from tests.utils import create_new_user def test_unactivated_user_login(flask_client): - """Start with a blank database.""" - - # create user, user is not activated - User.create(email="a@b.c", password="password", name="Test User") + user = create_new_user() + user.activated = False Session.commit() r = flask_client.post( url_for("auth.login"), - data={"email": "a@b.c", "password": "password"}, + data={"email": user.email, "password": "password"}, follow_redirects=True, ) @@ -25,15 +23,11 @@ def test_unactivated_user_login(flask_client): def test_activated_user_login(flask_client): - """Start with a blank database.""" - - # create user, user is activated - User.create(email="a@b.c", password="password", name="Test User", activated=True) - Session.commit() + user = create_new_user() r = flask_client.post( url_for("auth.login"), - data={"email": "a@b.c", "password": "password"}, + data={"email": user.email, "password": "password"}, follow_redirects=True, ) diff --git a/tests/dashboard/test_custom_domain.py b/tests/dashboard/test_custom_domain.py index a143bceb..a5cca193 100644 --- a/tests/dashboard/test_custom_domain.py +++ b/tests/dashboard/test_custom_domain.py @@ -1,6 +1,7 @@ from flask import url_for from app.db import Session +from app.email_utils import get_email_domain_part from app.models import Mailbox from tests.utils import login @@ -28,7 +29,7 @@ def test_add_domain_same_as_user_email(flask_client): r = flask_client.post( url_for("dashboard.custom_domain"), - data={"form-name": "create", "domain": "b.c"}, # user email is a@b.c + data={"form-name": "create", "domain": get_email_domain_part(user.email)}, follow_redirects=True, ) diff --git a/tests/email_tests/test_rate_limit.py b/tests/email_tests/test_rate_limit.py index 30722e25..e08573c7 100644 --- a/tests/email_tests/test_rate_limit.py +++ b/tests/email_tests/test_rate_limit.py @@ -9,14 +9,12 @@ from app.email.rate_limit import ( rate_limited_for_mailbox, rate_limited_reply_phase, ) -from app.models import User, Alias, EmailLog, Contact +from app.models import Alias, EmailLog, Contact +from tests.utils import create_new_user def test_rate_limited_forward_phase_for_alias(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() + user = create_new_user() # no rate limiting for a new alias alias = Alias.create_new_random(user) @@ -43,10 +41,7 @@ def test_rate_limited_forward_phase_for_alias(flask_client): def test_rate_limited_forward_phase_for_mailbox(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() + user = create_new_user() alias = Alias.create_new_random(user) Session.commit() @@ -88,10 +83,7 @@ def test_rate_limited_reply_phase(flask_client): # no rate limiting when reply_email does not exist assert not rate_limited_reply_phase("not-exist-reply@alias.com") - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() + user = create_new_user() alias = Alias.create_new_random(user) Session.commit() diff --git a/tests/models/test_user.py b/tests/models/test_user.py index dc87b519..4304d6b4 100644 --- a/tests/models/test_user.py +++ b/tests/models/test_user.py @@ -1,13 +1,7 @@ -from app.models import User +from tests.utils import create_new_user def test_available_sl_domains(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() assert set(user.available_sl_domains()) == {"d1.test", "d2.test", "sl.local"} diff --git a/tests/oauth/test_authorize.py b/tests/oauth/test_authorize.py index fed7a708..705f5692 100644 --- a/tests/oauth/test_authorize.py +++ b/tests/oauth/test_authorize.py @@ -117,7 +117,7 @@ def test_authorize_page_login_user(flask_client): html = r.get_data(as_text=True) assert r.status_code == 200 - assert "a@b.c (Personal Email)" in html + assert f"{user.email} (Personal Email)" in html def test_authorize_code_flow_no_openid_scope(flask_client): diff --git a/tests/test_alias_utils.py b/tests/test_alias_utils.py index a9d48aff..f5dcaa6e 100644 --- a/tests/test_alias_utils.py +++ b/tests/test_alias_utils.py @@ -1,16 +1,11 @@ from app.alias_utils import delete_alias, check_alias_prefix from app.db import Session -from app.models import User, Alias, DeletedAlias +from app.models import Alias, DeletedAlias +from tests.utils import create_new_user def test_delete_alias(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.create( user_id=user.id, email="first@d1.test", @@ -26,13 +21,7 @@ def test_delete_alias(flask_client): def test_delete_alias_already_in_trash(flask_client): """delete an alias that's already in alias trash""" - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.create( user_id=user.id, email="first@d1.test", diff --git a/tests/test_cron.py b/tests/test_cron.py index ce6d9f8b..a881e1db 100644 --- a/tests/test_cron.py +++ b/tests/test_cron.py @@ -1,16 +1,12 @@ import arrow -from app.models import User, CoinbaseSubscription +from app.models import CoinbaseSubscription from cron import notify_manual_sub_end +from tests.utils import create_new_user def test_notify_manual_sub_end(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - ) + user = create_new_user() CoinbaseSubscription.create( user_id=user.id, end_at=arrow.now().shift(days=13, hours=2), commit=True diff --git a/tests/test_email_handler.py b/tests/test_email_handler.py index f1aff34c..524a7f18 100644 --- a/tests/test_email_handler.py +++ b/tests/test_email_handler.py @@ -10,7 +10,6 @@ from app.config import BOUNCE_EMAIL, EMAIL_DOMAIN, ALERT_DMARC_FAILED_REPLY_PHAS from app.db import Session from app.email import headers, status from app.models import ( - User, Alias, AuthorizedAddress, IgnoredEmail, @@ -24,17 +23,11 @@ from email_handler import ( should_ignore, is_automatic_out_of_office, ) -from tests.utils import load_eml_file, create_random_user +from tests.utils import load_eml_file, create_new_user def test_get_mailbox_from_mail_from(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.create( user_id=user.id, email="first@d1.test", @@ -42,8 +35,8 @@ def test_get_mailbox_from_mail_from(flask_client): commit=True, ) - mb = get_mailbox_from_mail_from("a@b.c", alias) - assert mb.email == "a@b.c" + mb = get_mailbox_from_mail_from(user.email, alias) + assert mb.email == user.email mb = get_mailbox_from_mail_from("unauthorized@gmail.com", alias) assert mb is None @@ -56,7 +49,7 @@ def test_get_mailbox_from_mail_from(flask_client): commit=True, ) mb = get_mailbox_from_mail_from("unauthorized@gmail.com", alias) - assert mb.email == "a@b.c" + assert mb.email == user.email def test_should_ignore(flask_client): @@ -82,7 +75,7 @@ def test_is_automatic_out_of_office(): def test_dmarc_forward_quarantine(flask_client): - user = create_random_user() + user = create_new_user() alias = Alias.create_new_random(user) msg = load_eml_file("dmarc_quarantine.eml", {"alias_email": alias.email}) envelope = Envelope() @@ -105,7 +98,7 @@ def test_dmarc_forward_quarantine(flask_client): def test_gmail_dmarc_softfail(flask_client): - user = create_random_user() + user = create_new_user() alias = Alias.create_new_random(user) msg = load_eml_file("dmarc_gmail_softfail.eml", {"alias_email": alias.email}) envelope = Envelope() @@ -119,7 +112,7 @@ def test_gmail_dmarc_softfail(flask_client): def test_prevent_5xx_from_spf(flask_client): - user = create_random_user() + user = create_new_user() alias = Alias.create_new_random(user) msg = load_eml_file( "5xx_overwrite_spf.eml", @@ -133,7 +126,7 @@ def test_prevent_5xx_from_spf(flask_client): def test_preserve_5xx_with_valid_spf(flask_client): - user = create_random_user() + user = create_new_user() alias = Alias.create_new_random(user) msg = load_eml_file( "5xx_overwrite_spf.eml", @@ -147,7 +140,7 @@ def test_preserve_5xx_with_valid_spf(flask_client): def test_preserve_5xx_with_no_header(flask_client): - user = create_random_user() + user = create_new_user() alias = Alias.create_new_random(user) msg = load_eml_file( "no_spamd_header.eml", @@ -166,7 +159,7 @@ def generate_dmarc_result() -> List: @pytest.mark.parametrize("dmarc_result", generate_dmarc_result()) def test_dmarc_reply_quarantine(flask_client, dmarc_result): - user = create_random_user() + user = create_new_user() alias = Alias.create_new_random(user) Session.commit() contact = Contact.create( diff --git a/tests/test_email_utils.py b/tests/test_email_utils.py index 27e99b37..94b57e0b 100644 --- a/tests/test_email_utils.py +++ b/tests/test_email_utils.py @@ -38,7 +38,6 @@ from app.email_utils import ( is_invalid_mailbox_domain, ) from app.models import ( - User, CustomDomain, Alias, Contact, @@ -48,7 +47,7 @@ from app.models import ( ) # flake8: noqa: E101, W191 -from tests.utils import login, load_eml_file +from tests.utils import login, load_eml_file, create_new_user def test_get_email_domain_part(): @@ -74,13 +73,7 @@ def test_can_be_used_as_personal_email(flask_client): assert not email_can_be_used_as_mailbox("hey@d1.test") # custom domain - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() CustomDomain.create(user_id=user.id, domain="ab.cd", verified=True, commit=True) assert not email_can_be_used_as_mailbox("hey@ab.cd") @@ -153,10 +146,7 @@ def test_parse_full_address(): def test_send_email_with_rate_control(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() + user = create_new_user() for _ in range(MAX_ALERT_24H): assert send_email_with_rate_control( @@ -496,12 +486,7 @@ def test_to_bytes(): def test_generate_reply_email(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - ) + user = create_new_user() reply_email = generate_reply_email("test@example.org", user) assert reply_email.endswith(EMAIL_DOMAIN) @@ -511,13 +496,9 @@ def test_generate_reply_email(flask_client): def test_generate_reply_email_include_sender_in_reverse_alias(flask_client): # user enables include_sender_in_reverse_alias - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - include_sender_in_reverse_alias=True, - ) + user = create_new_user() + user.include_sender_in_reverse_alias = True + reply_email = generate_reply_email("test@example.org", user) assert reply_email.startswith("test.at.example.org") assert reply_email.endswith(EMAIL_DOMAIN) @@ -600,13 +581,7 @@ def test_decode_text(): def test_should_disable(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - include_sender_in_reverse_alias=True, - ) + user = create_new_user() alias = Alias.create_new_random(user) Session.commit() diff --git a/tests/test_jose_utils.py b/tests/test_jose_utils.py index 5e4387fb..d8a20c73 100644 --- a/tests/test_jose_utils.py +++ b/tests/test_jose_utils.py @@ -1,13 +1,11 @@ from app.db import Session from app.jose_utils import make_id_token, verify_id_token -from app.models import ClientUser, User, Client +from app.models import ClientUser, Client +from tests.utils import create_new_user def test_encode_decode(flask_client): - user = User.create( - email="a@b.c", password="password", name="Test User", activated=True - ) - Session.commit() + user = create_new_user() client1 = Client.create_new(name="Demo", user_id=user.id) client1.oauth_client_id = "client-id" diff --git a/tests/test_models.py b/tests/test_models.py index 2506f476..1fb8f5f0 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -7,14 +7,13 @@ from app.db import Session from app.email_utils import parse_full_address from app.models import ( generate_email, - User, Alias, Contact, Mailbox, SenderFormatEnum, EnumE, ) -from tests.utils import login +from tests.utils import login, create_new_user def test_generate_email(flask_client): @@ -29,27 +28,15 @@ def test_generate_email(flask_client): def test_profile_picture_url(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() assert user.profile_picture_url() == "http://sl.test/static/default-avatar.png" def test_suggested_emails_for_user_who_cannot_create_new_alias(flask_client): # make sure user is not in trial - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - trial_end=None, - commit=True, - ) + user = create_new_user() + user.trial_end = None # make sure user runs out of quota to create new email for _ in range(MAX_NB_EMAIL_FREE_PLAN): @@ -67,26 +54,14 @@ def test_suggested_emails_for_user_who_cannot_create_new_alias(flask_client): def test_alias_create_random(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.create_new_random(user) assert alias.email.endswith(EMAIL_DOMAIN) def test_website_send_to(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() alias = Alias.create_new_random(user) Session.commit() @@ -230,13 +205,7 @@ def test_new_addr_unicode(flask_client): def test_mailbox_delete(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() m1 = Mailbox.create( user_id=user.id, email="m1@example.com", verified=True, commit=True diff --git a/tests/test_server.py b/tests/test_server.py index ee1b1301..bc69880d 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -1,8 +1,9 @@ import arrow from app.db import Session -from app.models import User, CoinbaseSubscription +from app.models import CoinbaseSubscription from server import handle_coinbase_event +from tests.utils import create_new_user def test_redirect_login_page(flask_client): @@ -19,13 +20,7 @@ def test_coinbase_webhook(flask_client): def test_handle_coinbase_event_new_subscription(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - commit=True, - ) + user = create_new_user() handle_coinbase_event( {"data": {"code": "AAAAAA", "metadata": {"user_id": str(user.id)}}} ) @@ -37,12 +32,7 @@ def test_handle_coinbase_event_new_subscription(flask_client): def test_handle_coinbase_event_extend_subscription(flask_client): - user = User.create( - email="a@b.c", - password="password", - name="Test User", - activated=True, - ) + user = create_new_user() user.trial_end = None Session.commit() diff --git a/tests/utils.py b/tests/utils.py index 3b4c7e56..15d9bf56 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -11,20 +11,32 @@ from flask import url_for from app.models import User +# keep track of the number of user +_nb_user = 0 -def login(flask_client) -> User: - # create user, user is activated + +def create_new_user() -> User: + global _nb_user + _nb_user += 1 + + # new user has a different email address user = User.create( - email="a@b.c", + email=f"{_nb_user}@mailbox.test", password="password", name="Test User", activated=True, - commit=True, + flush=True, ) + return user + + +def login(flask_client) -> User: + user = create_new_user() + r = flask_client.post( url_for("auth.login"), - data={"email": "a@b.c", "password": "password"}, + data={"email": user.email, "password": "password"}, follow_redirects=True, ) @@ -38,17 +50,6 @@ def random_token(length: int = 10) -> str: return "".join(random.choices(string.ascii_lowercase + string.digits, k=length)) -def create_random_user() -> User: - random_email = "{}@{}.com".format(random_token(), random_token()) - return User.create( - email=random_email, - password="password", - name="Test {}".format(random_token()), - activated=True, - commit=True, - ) - - def pretty(d): """pretty print as json""" print(json.dumps(d, indent=2))