"""Tests for eepsite static file server — TDD: tests before implementation."""
import pytest
from pathlib import Path
from i2p_apps.eepsite.server import EepsiteServer, EepsiteConfig
class TestEepsiteConfig:
def test_defaults(self):
cfg = EepsiteConfig()
assert cfg.host == "127.0.0.1"
assert cfg.port == 7658
assert cfg.docroot.name == "docroot"
def test_custom_port(self):
cfg = EepsiteConfig(port=8080)
assert cfg.port == 8080
def test_custom_docroot(self, tmp_path: Path):
cfg = EepsiteConfig(docroot=tmp_path / "www")
assert cfg.docroot == tmp_path / "www"
class TestEepsiteServer:
def test_creation(self, tmp_path: Path):
docroot = tmp_path / "docroot"
docroot.mkdir()
cfg = EepsiteConfig(docroot=docroot)
server = EepsiteServer(cfg)
assert server is not None
def test_resolve_path_basic(self, tmp_path: Path):
docroot = tmp_path / "docroot"
docroot.mkdir()
(docroot / "index.html").write_text("
Hello
")
cfg = EepsiteConfig(docroot=docroot)
server = EepsiteServer(cfg)
path = server.resolve_path("/index.html")
assert path is not None
assert path.name == "index.html"
def test_resolve_path_default_index(self, tmp_path: Path):
docroot = tmp_path / "docroot"
docroot.mkdir()
(docroot / "index.html").write_text("Hello
")
cfg = EepsiteConfig(docroot=docroot)
server = EepsiteServer(cfg)
path = server.resolve_path("/")
assert path is not None
assert path.name == "index.html"
def test_resolve_path_missing(self, tmp_path: Path):
docroot = tmp_path / "docroot"
docroot.mkdir()
cfg = EepsiteConfig(docroot=docroot)
server = EepsiteServer(cfg)
path = server.resolve_path("/nonexistent.html")
assert path is None
def test_resolve_path_traversal_blocked(self, tmp_path: Path):
docroot = tmp_path / "docroot"
docroot.mkdir()
cfg = EepsiteConfig(docroot=docroot)
server = EepsiteServer(cfg)
path = server.resolve_path("/../../../etc/passwd")
assert path is None
def test_content_type(self, tmp_path: Path):
docroot = tmp_path / "docroot"
docroot.mkdir()
cfg = EepsiteConfig(docroot=docroot)
server = EepsiteServer(cfg)
assert server.content_type("test.html") == "text/html"
assert server.content_type("style.css") == "text/css"
assert server.content_type("script.js") == "application/javascript"
assert server.content_type("image.png") == "image/png"
assert server.content_type("unknown.xyz") == "application/octet-stream"