mirror of
https://github.com/simple-login/app.git
synced 2024-11-14 08:01:13 +01:00
141 lines
3.9 KiB
Python
141 lines
3.9 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.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.count() == MAX_NB_SUBDOMAIN
|
|
|
|
|
|
def test_create_subdomain_invalid(flask_client):
|
|
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.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.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.count() == 0
|