intervall
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from app.db.repositories import SystemLogRepository
|
||||
from app.db.repositories import SchedulerSettingsRepository, SystemLogRepository
|
||||
|
||||
|
||||
def test_manual_sync_calls_shared_manager(authenticated_client, fake_sync_manager) -> None:
|
||||
@@ -89,3 +89,115 @@ def test_system_page_shows_recorded_log_entries(app, authenticated_client) -> No
|
||||
assert response.status_code == 200
|
||||
assert "email_notification" in response.text
|
||||
assert "SMTP timeout" in response.text
|
||||
|
||||
|
||||
def _extract_csrf(html: str) -> str:
|
||||
marker = 'name="csrf_token" value="'
|
||||
start = html.index(marker) + len(marker)
|
||||
end = html.index('"', start)
|
||||
return html[start:end]
|
||||
|
||||
|
||||
def test_scheduler_settings_page_prefills_defaults(app, authenticated_client) -> None:
|
||||
app.state.scheduler = _FakeScheduler()
|
||||
|
||||
response = authenticated_client.get("/system")
|
||||
|
||||
assert response.status_code == 200
|
||||
assert 'id="day_start_hour"' in response.text
|
||||
assert 'value="6"' in response.text
|
||||
assert 'value="22"' in response.text
|
||||
|
||||
|
||||
def test_update_scheduler_settings_persists_and_takes_effect_next_tick(app, authenticated_client) -> None:
|
||||
app.state.scheduler = _FakeScheduler()
|
||||
page = authenticated_client.get("/system")
|
||||
csrf = _extract_csrf(page.text)
|
||||
|
||||
response = authenticated_client.post(
|
||||
"/system/scheduler-settings",
|
||||
data={
|
||||
"csrf_token": csrf,
|
||||
"day_start_hour": "8",
|
||||
"night_start_hour": "20",
|
||||
"day_interval_minutes": "3",
|
||||
"night_interval_minutes": "45",
|
||||
},
|
||||
follow_redirects=False,
|
||||
)
|
||||
assert response.status_code == 303
|
||||
assert response.headers["location"] == "/system"
|
||||
|
||||
with app.state.session_factory() as session:
|
||||
row = SchedulerSettingsRepository(session).get_or_create(default_minutes=5)
|
||||
assert row.day_start_hour == 8
|
||||
assert row.night_start_hour == 20
|
||||
assert row.day_interval_minutes == 3
|
||||
assert row.night_interval_minutes == 45
|
||||
|
||||
|
||||
def test_update_scheduler_settings_rejects_out_of_range_hour(app, authenticated_client) -> None:
|
||||
app.state.scheduler = _FakeScheduler()
|
||||
page = authenticated_client.get("/system")
|
||||
csrf = _extract_csrf(page.text)
|
||||
|
||||
response = authenticated_client.post(
|
||||
"/system/scheduler-settings",
|
||||
data={
|
||||
"csrf_token": csrf,
|
||||
"day_start_hour": "24",
|
||||
"night_start_hour": "22",
|
||||
"day_interval_minutes": "5",
|
||||
"night_interval_minutes": "5",
|
||||
},
|
||||
)
|
||||
assert response.status_code == 400
|
||||
|
||||
|
||||
def test_update_scheduler_settings_rejects_non_positive_interval(app, authenticated_client) -> None:
|
||||
app.state.scheduler = _FakeScheduler()
|
||||
page = authenticated_client.get("/system")
|
||||
csrf = _extract_csrf(page.text)
|
||||
|
||||
response = authenticated_client.post(
|
||||
"/system/scheduler-settings",
|
||||
data={
|
||||
"csrf_token": csrf,
|
||||
"day_start_hour": "6",
|
||||
"night_start_hour": "22",
|
||||
"day_interval_minutes": "0",
|
||||
"night_interval_minutes": "5",
|
||||
},
|
||||
)
|
||||
assert response.status_code == 400
|
||||
|
||||
|
||||
def test_update_scheduler_settings_requires_admin(client: TestClient) -> None:
|
||||
response = client.post(
|
||||
"/system/scheduler-settings",
|
||||
data={
|
||||
"csrf_token": "whatever",
|
||||
"day_start_hour": "6",
|
||||
"night_start_hour": "22",
|
||||
"day_interval_minutes": "5",
|
||||
"night_interval_minutes": "5",
|
||||
},
|
||||
follow_redirects=False,
|
||||
)
|
||||
assert response.status_code == 303
|
||||
assert response.headers["location"] == "/login"
|
||||
|
||||
|
||||
def test_update_scheduler_settings_rejects_invalid_csrf(app, authenticated_client) -> None:
|
||||
app.state.scheduler = _FakeScheduler()
|
||||
response = authenticated_client.post(
|
||||
"/system/scheduler-settings",
|
||||
data={
|
||||
"csrf_token": "invalid-token",
|
||||
"day_start_hour": "6",
|
||||
"night_start_hour": "22",
|
||||
"day_interval_minutes": "5",
|
||||
"night_interval_minutes": "5",
|
||||
},
|
||||
)
|
||||
assert response.status_code == 403
|
||||
|
||||
Reference in New Issue
Block a user