from unittest.mock import patch from tinyweb.handlers import ( handle_style_form, handle_style_submit, handle_style_template_submit, handle_field_save, handle_about, ) from tinyweb.templates import DEFAULT_TEMPLATE from tinyweb.db import get_db, return_db, get_setting def test_style_form_renders_defaults(temp_db, csrf_session): resp = handle_style_form() assert resp["status"] == 200 assert "customize" in resp["body"].lower() assert "tinyweb" in resp["body"] assert "search" in resp["body"] assert "template" in resp["body"] def test_style_form_shows_custom_site_name(temp_db, csrf_session): from tinyweb.db import set_setting set_setting("site_name", "my-mesh") resp = handle_style_form() assert "my-mesh" in resp["body"] def test_style_submit_name_saves(temp_db, csrf_session): resp = handle_style_submit({ "_action": ["name"], "site_name": ["My Network"], }) assert resp["status"] in (302, 303) assert get_setting("site_name", "") == "My Network" def test_style_submit_name_uses_default_when_empty(temp_db, csrf_session): resp = handle_style_submit({ "_action": ["name"], "site_name": [""], }) assert resp["status"] in (302, 303) assert get_setting("site_name", "") == "tinyweb" def test_style_submit_sharing_enables(temp_db, csrf_session): handle_style_submit({ "_action": ["sharing"], "sharing_enabled": ["1"], "sharing_mode": ["exclude_private"], }) assert get_setting("sharing_enabled", "0") == "1" assert get_setting("sharing_mode", "") == "exclude_private" def test_style_submit_sharing_disables(temp_db, csrf_session): handle_style_submit({ "_action": ["sharing"], }) assert get_setting("sharing_enabled", "1") == "0" def test_style_submit_sharing_mode_require_public(temp_db, csrf_session): handle_style_submit({ "_action": ["sharing"], "sharing_enabled": ["1"], "sharing_mode": ["require_public"], }) assert get_setting("sharing_mode", "") == "require_public" def test_style_submit_search_saves(temp_db, csrf_session): handle_style_submit({ "_action": ["search"], "semantic_search": ["1"], "use_reranker": ["1"], "compress_embeddings": ["1"], }) assert get_setting("semantic_search", "0") == "1" assert get_setting("use_reranker", "0") == "1" assert get_setting("compress_embeddings", "0") == "1" def test_style_submit_search_disables(temp_db, csrf_session): handle_style_submit({"_action": ["search"]}) assert get_setting("semantic_search", "1") == "0" assert get_setting("use_reranker", "1") == "0" assert get_setting("compress_embeddings", "1") == "0" def test_style_submit_mesh_saves_tcp(temp_db, csrf_session): handle_style_submit({ "_action": ["mesh"], "tcp_enabled": ["1"], "transport_host": ["mesh.example.org"], "transport_port": ["9999"], }) assert get_setting("tcp_enabled", "0") == "1" assert get_setting("transport_host", "") == "mesh.example.org" assert get_setting("transport_port", "") == "9999" def test_style_submit_mesh_disables_tcp(temp_db, csrf_session): handle_style_submit({"_action": ["mesh"]}) assert get_setting("tcp_enabled", "1") == "0" def test_style_submit_mesh_saves_lora(temp_db, csrf_session): handle_style_submit({ "_action": ["mesh"], "lora_enabled": ["1"], "lora_port": ["/dev/ttyUSB0"], "lora_frequency": ["915000000"], }) assert get_setting("lora_enabled", "0") == "1" assert get_setting("lora_port", "") == "/dev/ttyUSB0" def test_style_template_submit_saves(temp_db, csrf_session): custom = "
{{content}}" resp = handle_style_template_submit({"template": [custom]}) assert resp["status"] in (302, 303) assert get_setting("custom_template") == custom def test_style_template_submit_strips_default(temp_db, csrf_session): """Saving the default template should clear custom_template.""" resp = handle_style_template_submit({"template": [DEFAULT_TEMPLATE]}) assert resp["status"] in (302, 303) assert get_setting("custom_template", None) == "" def test_field_save_sets_setting(temp_db, csrf_session): resp = handle_field_save({"key": ["site_name"], "value": ["my-site"]}) assert resp["status"] == 200 assert get_setting("site_name", "") == "my-site" def test_field_save_rejects_empty_key(temp_db, csrf_session): resp = handle_field_save({"key": [""], "value": ["x"]}) assert resp["status"] == 400 def test_about_renders_stats(seeded_db, csrf_session): resp = handle_about() assert resp["status"] == 200 assert "personal" in resp["body"].lower() assert "4" in resp["body"] assert "page(s) indexed" in resp["body"].lower() def test_about_shows_dest_hash_when_available(seeded_db, csrf_session): from tinyweb.db import set_setting set_setting("dest_hash", "abc123") resp = handle_about() assert "abc123" in resp["body"] def test_about_no_subscribe_section_when_hash_unset(seeded_db, csrf_session): resp = handle_about() assert '