Fix tests to allow re-running them locally without colliding with previous runs

This commit is contained in:
Adrià Casajús 2022-05-20 14:39:07 +02:00
parent 0e3be23acc
commit 220f21bb2a
No known key found for this signature in database
GPG Key ID: F0033226A5AFC9B9
6 changed files with 8330 additions and 62 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
[pytest] [pytest]
addopts = xaddopts =
--cov --cov
--cov-config coverage.ini --cov-config coverage.ini
--cov-report=html:htmlcov --cov-report=html:htmlcov

View File

@ -1,10 +1,12 @@
import csv
from io import StringIO
from flask import url_for from flask import url_for
from app import alias_utils from app import alias_utils
from app.db import Session from app.db import Session
from app.import_utils import import_from_csv from app.import_utils import import_from_csv
from app.models import ( from app.models import (
User,
CustomDomain, CustomDomain,
Mailbox, Mailbox,
Alias, Alias,
@ -12,15 +14,13 @@ from app.models import (
BatchImport, BatchImport,
File, File,
) )
from tests.utils import login from tests.utils import login, create_new_user, random_domain, random_token
def test_export(flask_client): def test_export(flask_client):
# Create users # Create users
user1 = login(flask_client) user1 = login(flask_client)
user2 = User.create( user2 = create_new_user()
email="x@y.z", password="password", name="Wrong user", activated=True
)
Session.commit() Session.commit()
# Remove onboarding aliases # Remove onboarding aliases
@ -31,44 +31,44 @@ def test_export(flask_client):
Session.commit() Session.commit()
# Create domains # Create domains
CustomDomain.create( ok_domain = CustomDomain.create(
user_id=user1.id, domain="my-destination-domain.com", verified=True user_id=user1.id, domain=random_domain(), verified=True
) )
CustomDomain.create( bad_domain = CustomDomain.create(
user_id=user2.id, domain="bad-destionation-domain.com", verified=True user_id=user2.id, domain=random_domain(), verified=True
) )
Session.commit() Session.commit()
# Create mailboxes # Create mailboxes
mailbox1 = Mailbox.create( mailbox1 = Mailbox.create(
user_id=user1.id, email="destination@my-destination-domain.com", verified=True user_id=user1.id, email=f"{random_token()}@{ok_domain.domain}", verified=True
) )
mailbox2 = Mailbox.create( mailbox2 = Mailbox.create(
user_id=user1.id, email="destination2@my-destination-domain.com", verified=True user_id=user1.id, email=f"{random_token()}@{ok_domain.domain}", verified=True
) )
badmailbox1 = Mailbox.create( badmailbox1 = Mailbox.create(
user_id=user2.id, user_id=user2.id,
email="baddestination@bad-destination-domain.com", email=f"{random_token()}@{bad_domain.domain}",
verified=True, verified=True,
) )
Session.commit() Session.commit()
# Create aliases # Create aliases
Alias.create( alias1 = Alias.create(
user_id=user1.id, user_id=user1.id,
email="ebay@my-domain.com", email=f"{random_token()}@my-domain.com",
note="Used on eBay", note="Used on eBay",
mailbox_id=mailbox1.id, mailbox_id=mailbox1.id,
) )
alias2 = Alias.create( alias2 = Alias.create(
user_id=user1.id, user_id=user1.id,
email="facebook@my-domain.com", email=f"{random_token()}@my-domain.com",
note="Used on Facebook, Instagram.", note="Used on Facebook, Instagram.",
mailbox_id=mailbox1.id, mailbox_id=mailbox1.id,
) )
Alias.create( Alias.create(
user_id=user2.id, user_id=user2.id,
email="notmine@my-domain.com", email=f"{random_token()}@my-domain.com",
note="Should not appear", note="Should not appear",
mailbox_id=badmailbox1.id, mailbox_id=badmailbox1.id,
) )
@ -85,15 +85,21 @@ def test_export(flask_client):
r = flask_client.get(url_for("api.export_aliases")) r = flask_client.get(url_for("api.export_aliases"))
assert r.status_code == 200 assert r.status_code == 200
assert r.mimetype == "text/csv" assert r.mimetype == "text/csv"
assert ( csv_data = csv.DictReader(StringIO(r.data.decode("utf-8")))
r.data found_aliases = set()
== """alias,note,enabled,mailboxes for row in csv_data:
ebay@my-domain.com,Used on eBay,True,destination@my-destination-domain.com found_aliases.add(row["alias"])
facebook@my-domain.com,"Used on Facebook, Instagram.",True,destination@my-destination-domain.com destination2@my-destination-domain.com if row["alias"] == alias1.email:
""".replace( assert alias1.note == row["note"]
"\n", "\r\n" assert "True" == row["enabled"]
).encode() assert mailbox1.email == row["mailboxes"]
) elif row["alias"] == alias2.email:
assert alias2.note == row["note"]
assert "True" == row["enabled"]
assert f"{mailbox1.email} {mailbox2.email}" == row["mailboxes"]
else:
raise AssertionError("Unknown alias")
assert set((alias1.email, alias2.email)) == found_aliases
def test_import_no_mailboxes_no_domains(flask_client): def test_import_no_mailboxes_no_domains(flask_client):

View File

@ -1,3 +1,5 @@
from random import random
from flask import url_for, g from flask import url_for, g
from app.alias_utils import delete_alias from app.alias_utils import delete_alias
@ -19,7 +21,7 @@ from app.models import (
SLDomain, SLDomain,
) )
from app.utils import random_word from app.utils import random_word
from tests.utils import login, random_domain from tests.utils import login, random_domain, create_new_user
def test_add_alias_success(flask_client): def test_add_alias_success(flask_client):
@ -27,7 +29,7 @@ def test_add_alias_success(flask_client):
alias_suffix = AliasSuffix( alias_suffix = AliasSuffix(
is_custom=False, is_custom=False,
suffix=f".12345@{EMAIL_DOMAIN}", suffix=f".{int(random()*100000)}@{EMAIL_DOMAIN}",
is_premium=False, is_premium=False,
domain=EMAIL_DOMAIN, domain=EMAIL_DOMAIN,
) )
@ -44,7 +46,7 @@ def test_add_alias_success(flask_client):
follow_redirects=True, follow_redirects=True,
) )
assert r.status_code == 200 assert r.status_code == 200
assert f"Alias prefix.12345@{EMAIL_DOMAIN} has been created" in str(r.data) assert f"Alias prefix{alias_suffix.suffix} has been created" in str(r.data)
alias = Alias.order_by(Alias.created_at.desc()).first() alias = Alias.order_by(Alias.created_at.desc()).first()
assert not alias._mailboxes assert not alias._mailboxes
@ -56,7 +58,7 @@ def test_add_alias_multiple_mailboxes(flask_client):
alias_suffix = AliasSuffix( alias_suffix = AliasSuffix(
is_custom=False, is_custom=False,
suffix=f".12345@{EMAIL_DOMAIN}", suffix=f".{int(random()*100000)}@{EMAIL_DOMAIN}",
is_premium=False, is_premium=False,
domain=EMAIL_DOMAIN, domain=EMAIL_DOMAIN,
) )
@ -76,7 +78,7 @@ def test_add_alias_multiple_mailboxes(flask_client):
follow_redirects=True, follow_redirects=True,
) )
assert r.status_code == 200 assert r.status_code == 200
assert f"Alias prefix.12345@{EMAIL_DOMAIN} has been created" in str(r.data) assert f"Alias prefix{alias_suffix.suffix} has been created" in str(r.data)
alias = Alias.order_by(Alias.created_at.desc()).first() alias = Alias.order_by(Alias.created_at.desc()).first()
assert alias._mailboxes assert alias._mailboxes
@ -214,13 +216,7 @@ def test_add_alias_in_global_trash(flask_client):
user = login(flask_client) user = login(flask_client)
Session.commit() Session.commit()
another_user = User.create( another_user = create_new_user()
email="a2@b.c",
password="password",
name="Test User",
activated=True,
commit=True,
)
word = random_word() word = random_word()
suffix = f".{word}@{EMAIL_DOMAIN}" suffix = f".{word}@{EMAIL_DOMAIN}"
@ -237,9 +233,9 @@ def test_add_alias_in_global_trash(flask_client):
commit=True, commit=True,
) )
assert DeletedAlias.count() == 0 prev_deleted = DeletedAlias.count()
delete_alias(alias, another_user) delete_alias(alias, another_user)
assert DeletedAlias.count() == 1 assert prev_deleted + 1 == DeletedAlias.count()
# create the same alias, should return error # create the same alias, should return error
r = flask_client.post( r = flask_client.post(

View File

@ -22,35 +22,27 @@ from tests.utils import create_new_user, random_domain, random_token
def test_delete_alias(flask_client): def test_delete_alias(flask_client):
user = create_new_user() user = create_new_user()
alias = Alias.create( alias = Alias.create_new_random(user)
user_id=user.id, Session.commit()
email="first@d1.test", assert Alias.get_by(email=alias.email)
mailbox_id=user.default_mailbox_id,
commit=True,
)
assert Alias.get_by(email="first@d1.test")
delete_alias(alias, user) delete_alias(alias, user)
assert Alias.get_by(email="first@d1.test") is None assert Alias.get_by(email=alias.email) is None
assert DeletedAlias.get_by(email=alias.email) assert DeletedAlias.get_by(email=alias.email)
def test_delete_alias_already_in_trash(flask_client): def test_delete_alias_already_in_trash(flask_client):
"""delete an alias that's already in alias trash""" """delete an alias that's already in alias trash"""
user = create_new_user() user = create_new_user()
alias = Alias.create( alias = Alias.create_new_random(user)
user_id=user.id, Session.commit()
email="first@d1.test",
mailbox_id=user.default_mailbox_id,
commit=True,
)
# add the alias to global trash # add the alias to global trash
Session.add(DeletedAlias(email=alias.email)) Session.add(DeletedAlias(email=alias.email))
Session.commit() Session.commit()
delete_alias(alias, user) delete_alias(alias, user)
assert Alias.get_by(email="first@d1.test") is None assert Alias.get_by(email=alias.email) is None
def test_check_alias_prefix(flask_client): def test_check_alias_prefix(flask_client):

View File

@ -31,12 +31,8 @@ from tests.utils import load_eml_file, create_new_user
def test_get_mailbox_from_mail_from(flask_client): def test_get_mailbox_from_mail_from(flask_client):
user = create_new_user() user = create_new_user()
alias = Alias.create( alias = Alias.create_new_random(user)
user_id=user.id, Session.commit()
email="first@d1.test",
mailbox_id=user.default_mailbox_id,
commit=True,
)
mb = get_mailbox_from_mail_from(user.email, alias) mb = get_mailbox_from_mail_from(user.email, alias)
assert mb.email == user.email assert mb.email == user.email