import tempfile
import unittest
from pathlib import Path
import generate_index
class GenerateIndexTests(unittest.TestCase):
def setUp(self) -> None:
self.temp_dir = tempfile.TemporaryDirectory()
self.root = Path(self.temp_dir.name)
def tearDown(self) -> None:
self.temp_dir.cleanup()
def test_text_file_has_preview_and_download_actions(self) -> None:
(self.root / "note.txt").write_text("hello preview", encoding="utf-8")
generate_index.generate_indexes(self.root)
index_html = (self.root / "index.html").read_text(encoding="utf-8")
self.assertIn('.preview/note.txt.html', index_html)
self.assertIn('href="note.txt" download', index_html)
preview_html = (self.root / ".preview" / "note.txt.html").read_text(encoding="utf-8")
self.assertIn("hello preview", preview_html)
self.assertIn('href="../note.txt" download', preview_html)
def test_directory_entry_remains_open_action(self) -> None:
(self.root / "docs").mkdir()
(self.root / "docs" / "guide.md").write_text("# guide", encoding="utf-8")
generate_index.generate_indexes(self.root)
index_html = (self.root / "index.html").read_text(encoding="utf-8")
self.assertIn('href="docs/"', index_html)
def test_binary_file_only_has_download_action(self) -> None:
(self.root / "archive.zip").write_bytes(b"PK\x03\x04")
generate_index.generate_indexes(self.root)
index_html = (self.root / "index.html").read_text(encoding="utf-8")
self.assertNotIn('.preview/archive.zip.html', index_html)
self.assertIn('href="archive.zip" download', index_html)
self.assertFalse((self.root / ".preview" / "archive.zip.html").exists())
def test_root_generates_not_found_and_redirect_rules(self) -> None:
(self.root / "hello.txt").write_text("world", encoding="utf-8")
generate_index.generate_indexes(self.root)
not_found_html = (self.root / "404.html").read_text(encoding="utf-8")
redirects = (self.root / "_redirects").read_text(encoding="utf-8")
self.assertIn("404", not_found_html)
self.assertEqual("/* /404.html 404\n", redirects)
def test_userlogs_directory_is_hidden_from_index(self) -> None:
(self.root / ".userlogs").mkdir()
(self.root / ".userlogs" / "trace.log").write_text("secret", encoding="utf-8")
(self.root / "visible").mkdir()
generate_index.generate_indexes(self.root)
index_html = (self.root / "index.html").read_text(encoding="utf-8")
self.assertNotIn(".userlogs/", index_html)
self.assertIn('href="visible/"', index_html)
self.assertFalse((self.root / ".userlogs" / "index.html").exists())
if __name__ == "__main__":
unittest.main()