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
|
CONFIG=tests/test.env poetry run alembic upgrade head
|
||||||
|
|
||||||
# run test
|
# run test
|
||||||
poetry run pytest
|
poetry run pytest -c pytest.ci.ini
|
||||||
|
|
||||||
# Delete the test DB
|
# Delete the test DB
|
||||||
docker rm -f sl-test-db
|
docker rm -f sl-test-db
|
||||||
|
@ -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):
|
||||||
|
@ -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(
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user