tinyweb/tests/test_handlers_customize.py

161 lines
5.1 KiB
Python

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 = "<html><body>{{content}}</body></html>"
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 '<h2>subscribe</h2>' not in resp["body"].lower()