mirror of
https://github.com/simple-login/app.git
synced 2024-09-28 20:51:29 +02:00
Merge pull request #1011 from simple-login/ac-fix-recurrent-tests
Fix tests to allow re-running them locally without colliding with previous runs
This commit is contained in:
commit
d879a0c62b
File diff suppressed because it is too large
Load Diff
2
scripts/run-test.sh
Normal file → Executable file
2
scripts/run-test.sh
Normal file → Executable file
@ -13,7 +13,7 @@ sleep 3
|
||||
CONFIG=tests/test.env poetry run alembic upgrade head
|
||||
|
||||
# run test
|
||||
poetry run pytest
|
||||
poetry run pytest -c pytest.ci.ini
|
||||
|
||||
# Delete the test DB
|
||||
docker rm -f sl-test-db
|
||||
|
@ -1,10 +1,12 @@
|
||||
import csv
|
||||
from io import StringIO
|
||||
|
||||
from flask import url_for
|
||||
|
||||
from app import alias_utils
|
||||
from app.db import Session
|
||||
from app.import_utils import import_from_csv
|
||||
from app.models import (
|
||||
User,
|
||||
CustomDomain,
|
||||
Mailbox,
|
||||
Alias,
|
||||
@ -12,15 +14,13 @@ from app.models import (
|
||||
BatchImport,
|
||||
File,
|
||||
)
|
||||
from tests.utils import login
|
||||
from tests.utils import login, create_new_user, random_domain, random_token
|
||||
|
||||
|
||||
def test_export(flask_client):
|
||||
# Create users
|
||||
user1 = login(flask_client)
|
||||
user2 = User.create(
|
||||
email="x@y.z", password="password", name="Wrong user", activated=True
|
||||
)
|
||||
user2 = create_new_user()
|
||||
Session.commit()
|
||||
|
||||
# Remove onboarding aliases
|
||||
@ -31,44 +31,44 @@ def test_export(flask_client):
|
||||
Session.commit()
|
||||
|
||||
# Create domains
|
||||
CustomDomain.create(
|
||||
user_id=user1.id, domain="my-destination-domain.com", verified=True
|
||||
ok_domain = CustomDomain.create(
|
||||
user_id=user1.id, domain=random_domain(), verified=True
|
||||
)
|
||||
CustomDomain.create(
|
||||
user_id=user2.id, domain="bad-destionation-domain.com", verified=True
|
||||
bad_domain = CustomDomain.create(
|
||||
user_id=user2.id, domain=random_domain(), verified=True
|
||||
)
|
||||
Session.commit()
|
||||
|
||||
# Create mailboxes
|
||||
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(
|
||||
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(
|
||||
user_id=user2.id,
|
||||
email="baddestination@bad-destination-domain.com",
|
||||
email=f"{random_token()}@{bad_domain.domain}",
|
||||
verified=True,
|
||||
)
|
||||
Session.commit()
|
||||
|
||||
# Create aliases
|
||||
Alias.create(
|
||||
alias1 = Alias.create(
|
||||
user_id=user1.id,
|
||||
email="ebay@my-domain.com",
|
||||
email=f"{random_token()}@my-domain.com",
|
||||
note="Used on eBay",
|
||||
mailbox_id=mailbox1.id,
|
||||
)
|
||||
alias2 = Alias.create(
|
||||
user_id=user1.id,
|
||||
email="facebook@my-domain.com",
|
||||
email=f"{random_token()}@my-domain.com",
|
||||
note="Used on Facebook, Instagram.",
|
||||
mailbox_id=mailbox1.id,
|
||||
)
|
||||
Alias.create(
|
||||
user_id=user2.id,
|
||||
email="notmine@my-domain.com",
|
||||
email=f"{random_token()}@my-domain.com",
|
||||
note="Should not appear",
|
||||
mailbox_id=badmailbox1.id,
|
||||
)
|
||||
@ -85,15 +85,21 @@ def test_export(flask_client):
|
||||
r = flask_client.get(url_for("api.export_aliases"))
|
||||
assert r.status_code == 200
|
||||
assert r.mimetype == "text/csv"
|
||||
assert (
|
||||
r.data
|
||||
== """alias,note,enabled,mailboxes
|
||||
ebay@my-domain.com,Used on eBay,True,destination@my-destination-domain.com
|
||||
facebook@my-domain.com,"Used on Facebook, Instagram.",True,destination@my-destination-domain.com destination2@my-destination-domain.com
|
||||
""".replace(
|
||||
"\n", "\r\n"
|
||||
).encode()
|
||||
)
|
||||
csv_data = csv.DictReader(StringIO(r.data.decode("utf-8")))
|
||||
found_aliases = set()
|
||||
for row in csv_data:
|
||||
found_aliases.add(row["alias"])
|
||||
if row["alias"] == alias1.email:
|
||||
assert alias1.note == row["note"]
|
||||
assert "True" == row["enabled"]
|
||||
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):
|
||||
|
@ -1,3 +1,5 @@
|
||||
from random import random
|
||||
|
||||
from flask import url_for, g
|
||||
|
||||
from app.alias_utils import delete_alias
|
||||
@ -19,7 +21,7 @@ from app.models import (
|
||||
SLDomain,
|
||||
)
|
||||
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):
|
||||
@ -27,7 +29,7 @@ def test_add_alias_success(flask_client):
|
||||
|
||||
alias_suffix = AliasSuffix(
|
||||
is_custom=False,
|
||||
suffix=f".12345@{EMAIL_DOMAIN}",
|
||||
suffix=f".{int(random()*100000)}@{EMAIL_DOMAIN}",
|
||||
is_premium=False,
|
||||
domain=EMAIL_DOMAIN,
|
||||
)
|
||||
@ -44,7 +46,7 @@ def test_add_alias_success(flask_client):
|
||||
follow_redirects=True,
|
||||
)
|
||||
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()
|
||||
assert not alias._mailboxes
|
||||
@ -56,7 +58,7 @@ def test_add_alias_multiple_mailboxes(flask_client):
|
||||
|
||||
alias_suffix = AliasSuffix(
|
||||
is_custom=False,
|
||||
suffix=f".12345@{EMAIL_DOMAIN}",
|
||||
suffix=f".{int(random()*100000)}@{EMAIL_DOMAIN}",
|
||||
is_premium=False,
|
||||
domain=EMAIL_DOMAIN,
|
||||
)
|
||||
@ -76,7 +78,7 @@ def test_add_alias_multiple_mailboxes(flask_client):
|
||||
follow_redirects=True,
|
||||
)
|
||||
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()
|
||||
assert alias._mailboxes
|
||||
@ -214,13 +216,7 @@ def test_add_alias_in_global_trash(flask_client):
|
||||
user = login(flask_client)
|
||||
Session.commit()
|
||||
|
||||
another_user = User.create(
|
||||
email="a2@b.c",
|
||||
password="password",
|
||||
name="Test User",
|
||||
activated=True,
|
||||
commit=True,
|
||||
)
|
||||
another_user = create_new_user()
|
||||
|
||||
word = random_word()
|
||||
suffix = f".{word}@{EMAIL_DOMAIN}"
|
||||
@ -237,9 +233,9 @@ def test_add_alias_in_global_trash(flask_client):
|
||||
commit=True,
|
||||
)
|
||||
|
||||
assert DeletedAlias.count() == 0
|
||||
prev_deleted = DeletedAlias.count()
|
||||
delete_alias(alias, another_user)
|
||||
assert DeletedAlias.count() == 1
|
||||
assert prev_deleted + 1 == DeletedAlias.count()
|
||||
|
||||
# create the same alias, should return error
|
||||
r = flask_client.post(
|
||||
|
@ -22,35 +22,27 @@ from tests.utils import create_new_user, random_domain, random_token
|
||||
|
||||
def test_delete_alias(flask_client):
|
||||
user = create_new_user()
|
||||
alias = Alias.create(
|
||||
user_id=user.id,
|
||||
email="first@d1.test",
|
||||
mailbox_id=user.default_mailbox_id,
|
||||
commit=True,
|
||||
)
|
||||
assert Alias.get_by(email="first@d1.test")
|
||||
alias = Alias.create_new_random(user)
|
||||
Session.commit()
|
||||
assert Alias.get_by(email=alias.email)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
def test_delete_alias_already_in_trash(flask_client):
|
||||
"""delete an alias that's already in alias trash"""
|
||||
user = create_new_user()
|
||||
alias = Alias.create(
|
||||
user_id=user.id,
|
||||
email="first@d1.test",
|
||||
mailbox_id=user.default_mailbox_id,
|
||||
commit=True,
|
||||
)
|
||||
alias = Alias.create_new_random(user)
|
||||
Session.commit()
|
||||
|
||||
# add the alias to global trash
|
||||
Session.add(DeletedAlias(email=alias.email))
|
||||
Session.commit()
|
||||
|
||||
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):
|
||||
|
@ -31,12 +31,8 @@ from tests.utils import load_eml_file, create_new_user
|
||||
|
||||
def test_get_mailbox_from_mail_from(flask_client):
|
||||
user = create_new_user()
|
||||
alias = Alias.create(
|
||||
user_id=user.id,
|
||||
email="first@d1.test",
|
||||
mailbox_id=user.default_mailbox_id,
|
||||
commit=True,
|
||||
)
|
||||
alias = Alias.create_new_random(user)
|
||||
Session.commit()
|
||||
|
||||
mb = get_mailbox_from_mail_from(user.email, alias)
|
||||
assert mb.email == user.email
|
||||
|
Loading…
Reference in New Issue
Block a user