import pytest pytestmark = pytest.mark.integration @pytest.mark.asyncio async def test_get_includes_downloader_fields(client): resp = await client.get("/api/settings/import") assert resp.status_code == 200 body = await resp.get_json() assert body["download_rate_limit_seconds"] == 3.0 assert body["download_validate_files"] is True @pytest.mark.asyncio async def test_patch_download_rate_limit(client): resp = await client.patch( "/api/settings/import", json={"download_rate_limit_seconds": 1.5} ) assert resp.status_code == 200 assert (await resp.get_json())["download_rate_limit_seconds"] == 1.5 @pytest.mark.asyncio async def test_patch_download_validate_files_false(client): resp = await client.patch( "/api/settings/import", json={"download_validate_files": False} ) assert resp.status_code == 200 assert (await resp.get_json())["download_validate_files"] is False @pytest.mark.asyncio async def test_patch_rejects_negative_rate_limit(client): resp = await client.patch( "/api/settings/import", json={"download_rate_limit_seconds": -1.0} ) assert resp.status_code == 400 @pytest.mark.asyncio async def test_patch_rejects_non_bool_validate(client): resp = await client.patch( "/api/settings/import", json={"download_validate_files": "yes"} ) assert resp.status_code == 400 @pytest.mark.asyncio async def test_extdl_host_toggles_default_on_and_patch(client): body = await (await client.get("/api/settings/import")).get_json() assert body["extdl_mega_enabled"] is True assert body["extdl_pixeldrain_enabled"] is True resp = await client.patch( "/api/settings/import", json={"extdl_mega_enabled": False} ) assert resp.status_code == 200 assert (await resp.get_json())["extdl_mega_enabled"] is False @pytest.mark.asyncio async def test_extdl_toggle_rejects_non_bool(client): resp = await client.patch( "/api/settings/import", json={"extdl_gdrive_enabled": "nope"} ) assert resp.status_code == 400 # -- download_revisit_days: how far back a tick looks for EDITED posts -------- @pytest.mark.asyncio async def test_revisit_window_defaults_to_thirty_days(client): body = await (await client.get("/api/settings/import")).get_json() assert body["download_revisit_days"] == 30 @pytest.mark.asyncio async def test_revisit_window_is_settable(client): resp = await client.patch( "/api/settings/import", json={"download_revisit_days": 7} ) assert resp.status_code == 200 assert (await resp.get_json())["download_revisit_days"] == 7 @pytest.mark.asyncio async def test_zero_is_accepted_because_it_is_the_off_switch(client): """0 turns the revisit off and restores the pure count early-out. Pinned because the obvious bounds check for a "days" field is `>= 1`, and that would take the off switch away without anything failing.""" resp = await client.patch( "/api/settings/import", json={"download_revisit_days": 0} ) assert resp.status_code == 200 assert (await resp.get_json())["download_revisit_days"] == 0 @pytest.mark.asyncio async def test_a_negative_window_is_refused(client): resp = await client.patch( "/api/settings/import", json={"download_revisit_days": -1} ) assert resp.status_code == 400 # --- the announcement matcher's own switch --------------------------------- @pytest.mark.asyncio async def test_auto_linking_is_on_by_default(client): """Operator, 2026-09-24: "I don't want this to be manual that defeats the convenience that I'm going for." Defaulting ON is the change of posture that request asks for, so the default is what this pins.""" resp = await client.get("/api/settings/import") assert resp.status_code == 200 assert (await resp.get_json())["discord_link_auto"] is True @pytest.mark.asyncio async def test_auto_linking_can_be_turned_off(client): """Confirm-only has to stay reachable — linking without asking is a change of posture, and not everyone wants it.""" resp = await client.patch( "/api/settings/import", json={"discord_link_auto": False} ) assert resp.status_code == 200 assert (await resp.get_json())["discord_link_auto"] is False @pytest.mark.asyncio async def test_auto_linking_refuses_a_non_boolean(client): resp = await client.patch( "/api/settings/import", json={"discord_link_auto": "yes"} ) assert resp.status_code == 400