feat(l4d2-web): accept hostname on server update, default empty on create
This commit is contained in:
parent
0a7f48f174
commit
69d93dda4f
2 changed files with 109 additions and 0 deletions
|
|
@ -128,6 +128,8 @@ def update_server_form(server_id: int) -> Response:
|
||||||
if server is None:
|
if server is None:
|
||||||
return Response(status=404)
|
return Response(status=404)
|
||||||
server.name = name
|
server.name = name
|
||||||
|
if "hostname" in request.form:
|
||||||
|
server.hostname = request.form["hostname"]
|
||||||
try:
|
try:
|
||||||
db.flush()
|
db.flush()
|
||||||
except IntegrityError as exc:
|
except IntegrityError as exc:
|
||||||
|
|
|
||||||
|
|
@ -608,3 +608,110 @@ def test_reset_operation_enqueues_job_and_stops_desired_state(user_client_with_b
|
||||||
).all()
|
).all()
|
||||||
assert len(jobs) == 1
|
assert len(jobs) == 1
|
||||||
assert jobs[0].state == "queued"
|
assert jobs[0].state == "queued"
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_server_hostname_defaults_empty(user_client_with_blueprints) -> None:
|
||||||
|
from sqlalchemy import select
|
||||||
|
from l4d2web.models import Server
|
||||||
|
|
||||||
|
client, data = user_client_with_blueprints
|
||||||
|
response = client.post(
|
||||||
|
"/servers",
|
||||||
|
data={"name": "alpha", "port": "27015", "blueprint_id": str(data["blueprint_id"])},
|
||||||
|
headers={"X-CSRF-Token": "test-token"},
|
||||||
|
)
|
||||||
|
assert response.status_code == 302
|
||||||
|
|
||||||
|
with session_scope() as session:
|
||||||
|
server = session.scalar(select(Server).where(Server.name == "alpha"))
|
||||||
|
assert server is not None
|
||||||
|
assert server.hostname == ""
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_server_hostname_via_form(user_client_with_blueprints) -> None:
|
||||||
|
from sqlalchemy import select
|
||||||
|
from l4d2web.models import Server
|
||||||
|
|
||||||
|
client, data = user_client_with_blueprints
|
||||||
|
create = client.post(
|
||||||
|
"/servers",
|
||||||
|
data={"name": "alpha", "port": "27015", "blueprint_id": str(data["blueprint_id"])},
|
||||||
|
headers={"X-CSRF-Token": "test-token"},
|
||||||
|
)
|
||||||
|
server_id = create.headers["Location"].rsplit("/", 1)[1]
|
||||||
|
|
||||||
|
update = client.post(
|
||||||
|
f"/servers/{server_id}",
|
||||||
|
data={"name": "alpha", "hostname": "My Cool Server"},
|
||||||
|
headers={"X-CSRF-Token": "test-token"},
|
||||||
|
)
|
||||||
|
assert update.status_code == 302
|
||||||
|
|
||||||
|
with session_scope() as session:
|
||||||
|
server = session.scalar(select(Server).where(Server.name == "alpha"))
|
||||||
|
assert server is not None
|
||||||
|
assert server.hostname == "My Cool Server"
|
||||||
|
|
||||||
|
|
||||||
|
def test_rename_preserves_hostname(user_client_with_blueprints) -> None:
|
||||||
|
from sqlalchemy import select
|
||||||
|
from l4d2web.models import Server
|
||||||
|
|
||||||
|
client, data = user_client_with_blueprints
|
||||||
|
create = client.post(
|
||||||
|
"/servers",
|
||||||
|
data={"name": "alpha", "port": "27015", "blueprint_id": str(data["blueprint_id"])},
|
||||||
|
headers={"X-CSRF-Token": "test-token"},
|
||||||
|
)
|
||||||
|
server_id = create.headers["Location"].rsplit("/", 1)[1]
|
||||||
|
|
||||||
|
# Set hostname first
|
||||||
|
client.post(
|
||||||
|
f"/servers/{server_id}",
|
||||||
|
data={"name": "alpha", "hostname": "My Cool Server"},
|
||||||
|
headers={"X-CSRF-Token": "test-token"},
|
||||||
|
)
|
||||||
|
|
||||||
|
# Rename without sending hostname (simulates rename modal)
|
||||||
|
client.post(
|
||||||
|
f"/servers/{server_id}",
|
||||||
|
data={"name": "beta"},
|
||||||
|
headers={"X-CSRF-Token": "test-token"},
|
||||||
|
)
|
||||||
|
|
||||||
|
with session_scope() as session:
|
||||||
|
server = session.scalar(select(Server).where(Server.name == "beta"))
|
||||||
|
assert server is not None
|
||||||
|
assert server.hostname == "My Cool Server", "rename must not wipe hostname"
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_server_clears_hostname(user_client_with_blueprints) -> None:
|
||||||
|
from sqlalchemy import select
|
||||||
|
from l4d2web.models import Server
|
||||||
|
|
||||||
|
client, data = user_client_with_blueprints
|
||||||
|
create = client.post(
|
||||||
|
"/servers",
|
||||||
|
data={"name": "alpha", "port": "27015", "blueprint_id": str(data["blueprint_id"])},
|
||||||
|
headers={"X-CSRF-Token": "test-token"},
|
||||||
|
)
|
||||||
|
server_id = create.headers["Location"].rsplit("/", 1)[1]
|
||||||
|
|
||||||
|
# Set hostname first
|
||||||
|
client.post(
|
||||||
|
f"/servers/{server_id}",
|
||||||
|
data={"name": "alpha", "hostname": "My Cool Server"},
|
||||||
|
headers={"X-CSRF-Token": "test-token"},
|
||||||
|
)
|
||||||
|
|
||||||
|
# Clear it
|
||||||
|
client.post(
|
||||||
|
f"/servers/{server_id}",
|
||||||
|
data={"name": "alpha", "hostname": ""},
|
||||||
|
headers={"X-CSRF-Token": "test-token"},
|
||||||
|
)
|
||||||
|
|
||||||
|
with session_scope() as session:
|
||||||
|
server = session.scalar(select(Server).where(Server.name == "alpha"))
|
||||||
|
assert server is not None
|
||||||
|
assert server.hostname == ""
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue