Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions app/db/crud/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,12 @@ async def update_admin(db: AsyncSession, db_admin: Admin, modified_admin: AdminM
if modified_admin.status is not None and modified_admin.status != db_admin.status:
db_admin.status = modified_admin.status
db_admin.last_status_change = datetime.now(UTC)
if modified_admin.data_limit is not None:
db_admin.data_limit = modified_admin.data_limit if modified_admin.data_limit > 0 else None
if "data_limit" in modified_admin.model_fields_set:
db_admin.data_limit = (
modified_admin.data_limit
if modified_admin.data_limit is not None and modified_admin.data_limit > 0
else None
)
# Recompute limited/active based on new data_limit — never touch disabled
if db_admin.status != AdminStatus.disabled:
should_be_limited = (
Expand Down
31 changes: 31 additions & 0 deletions tests/api/test_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -1358,6 +1358,37 @@ def test_admin_data_limit_zero_means_unlimited(access_token):
delete_admin(access_token, admin["username"])


def test_admin_data_limit_null_means_unlimited(access_token):
"""Explicit data_limit=null clears the limit while an omitted field leaves it unchanged."""
admin = create_admin(access_token)
try:
response = client.put(
f"/api/admin/{admin['username']}",
json={"data_limit": 1073741824},
headers=auth_headers(access_token),
)
assert response.status_code == status.HTTP_200_OK
assert response.json()["data_limit"] == 1073741824

response = client.put(
f"/api/admin/{admin['username']}",
json={"note": "keep the existing limit"},
headers=auth_headers(access_token),
)
assert response.status_code == status.HTTP_200_OK
assert response.json()["data_limit"] == 1073741824

response = client.put(
f"/api/admin/{admin['username']}",
json={"data_limit": None},
headers=auth_headers(access_token),
)
assert response.status_code == status.HTTP_200_OK
assert response.json()["data_limit"] is None
finally:
delete_admin(access_token, admin["username"])


def test_admin_status_defaults_to_active(access_token):
"""Newly created admin has status=active."""
admin = create_admin(access_token)
Expand Down