app-MAIL-temp/tests/dashboard/test_subdomain.py

142 lines
4.0 KiB
Python

from flask import url_for
from app.config import MAX_NB_SUBDOMAIN
from app.db import Session
from app.models import SLDomain, CustomDomain, Job
from tests.utils import login
def setup_sl_domain() -> SLDomain:
"""Take the first SLDomain and set its can_use_subdomain=True"""
sl_domain: SLDomain = SLDomain.first()
sl_domain.can_use_subdomain = True
Session.commit()
return sl_domain
def test_create_subdomain(flask_client):
login(flask_client)
sl_domain = setup_sl_domain()
r = flask_client.post(
url_for("dashboard.subdomain_route"),
data={"form-name": "create", "subdomain": "test", "domain": sl_domain.domain},
follow_redirects=True,
)
assert r.status_code == 200
assert f"New subdomain test.{sl_domain.domain} is created" in r.data.decode()
assert CustomDomain.get_by(domain=f"test.{sl_domain.domain}") is not None
def test_delete_subdomain(flask_client):
user = login(flask_client)
sl_domain = setup_sl_domain()
subdomain = CustomDomain.create(
domain=f"test.{sl_domain.domain}",
user_id=user.id,
is_sl_subdomain=True,
commit=True,
)
nb_job = Job.count()
r = flask_client.post(
url_for("dashboard.domain_detail", custom_domain_id=subdomain.id),
data={"form-name": "delete"},
follow_redirects=True,
)
assert r.status_code == 200
assert f"test.{sl_domain.domain} scheduled for deletion." in r.data.decode()
# a domain deletion job is scheduled
assert Job.count() == nb_job + 1
def test_create_subdomain_in_trash(flask_client):
user = login(flask_client)
sl_domain = setup_sl_domain()
subdomain = CustomDomain.create(
domain=f"test.{sl_domain.domain}",
user_id=user.id,
is_sl_subdomain=True,
commit=True,
)
# delete the subdomain
CustomDomain.delete(subdomain.id)
assert CustomDomain.get_by(domain=f"test.{sl_domain.domain}") is None
r = flask_client.post(
url_for("dashboard.subdomain_route"),
data={"form-name": "create", "subdomain": "test", "domain": sl_domain.domain},
follow_redirects=True,
)
assert r.status_code == 200
assert (
f"test.{sl_domain.domain} has been used before and cannot be reused"
in r.data.decode()
)
def test_create_subdomain_out_of_quota(flask_client):
user = login(flask_client)
sl_domain = setup_sl_domain()
for i in range(MAX_NB_SUBDOMAIN):
CustomDomain.create(
domain=f"test{i}.{sl_domain.domain}",
user_id=user.id,
is_sl_subdomain=True,
commit=True,
)
assert CustomDomain.filter_by(user_id=user.id).count() == MAX_NB_SUBDOMAIN
flask_client.post(
url_for("dashboard.subdomain_route"),
data={"form-name": "create", "subdomain": "test", "domain": sl_domain.domain},
follow_redirects=True,
)
# no new subdomain is created
assert CustomDomain.filter_by(user_id=user.id).count() == MAX_NB_SUBDOMAIN
def test_create_subdomain_invalid(flask_client):
user = login(flask_client)
sl_domain = setup_sl_domain()
# subdomain can't end with dash (-)
flask_client.post(
url_for("dashboard.subdomain_route"),
data={"form-name": "create", "subdomain": "test-", "domain": sl_domain.domain},
follow_redirects=True,
)
assert CustomDomain.filter_by(user_id=user.id).count() == 0
# subdomain can't contain underscore (_)
flask_client.post(
url_for("dashboard.subdomain_route"),
data={
"form-name": "create",
"subdomain": "test_test",
"domain": sl_domain.domain,
},
follow_redirects=True,
)
assert CustomDomain.filter_by(user_id=user.id).count() == 0
# subdomain must have at least 3 characters
flask_client.post(
url_for("dashboard.subdomain_route"),
data={"form-name": "create", "subdomain": "te", "domain": sl_domain.domain},
follow_redirects=True,
)
assert CustomDomain.filter_by(user_id=user.id).count() == 0