authoring service changes
All checks were successful
Build Org Website / build (push) Successful in 46s
All checks were successful
Build Org Website / build (push) Successful in 46s
This commit is contained in:
@@ -103,6 +103,24 @@ class UtilityTests(AuthoringServerTestCase):
|
||||
self.assertEqual(server.image_dimensions(gif, ".gif"), (320, 200))
|
||||
self.assertIsNone(server.image_dimensions(b"not an image", ".png"))
|
||||
|
||||
def test_parse_upload_form_reads_attachment_and_page_path(self):
|
||||
boundary = "----authoring-test"
|
||||
content_type = f"multipart/form-data; boundary={boundary}"
|
||||
body = (
|
||||
f"--{boundary}\r\n"
|
||||
'Content-Disposition: form-data; name="pagePath"\r\n\r\n'
|
||||
"lima/index.md\r\n"
|
||||
f"--{boundary}\r\n"
|
||||
'Content-Disposition: form-data; name="attachment"; filename="photo.png"\r\n'
|
||||
"Content-Type: image/png\r\n\r\n"
|
||||
).encode("utf-8") + b"image bytes\r\n" + f"--{boundary}--\r\n".encode("utf-8")
|
||||
|
||||
filename, payload, page_path = server.parse_upload_form(content_type, body)
|
||||
|
||||
self.assertEqual(filename, "photo.png")
|
||||
self.assertEqual(payload, b"image bytes")
|
||||
self.assertEqual(page_path, "lima/index.md")
|
||||
|
||||
|
||||
class PageRenderingTests(AuthoringServerTestCase):
|
||||
def test_render_org_writes_metadata_and_body(self):
|
||||
@@ -244,6 +262,22 @@ class PageRenderingTests(AuthoringServerTestCase):
|
||||
self.assertEqual(saved["path"], "assets/images/blogs/2026-05-07-lunch.jpg")
|
||||
self.assertEqual(saved["insertText"], "[[../../../assets/images/blogs/2026-05-07-lunch.jpg]]")
|
||||
|
||||
def test_save_upload_inserts_absolute_public_url_for_markdown(self):
|
||||
with mock.patch.object(server, "datetime") as datetime_mock:
|
||||
datetime_mock.now.return_value = datetime(2026, 5, 9, 9, 30)
|
||||
saved = server.save_upload(
|
||||
"Screen Shot.png",
|
||||
b"image bytes",
|
||||
"lima/index.md",
|
||||
)
|
||||
|
||||
self.assertEqual(saved["path"], "assets/images/hzone/2026-05-09-screen-shot.png")
|
||||
self.assertEqual(saved["relativeUrl"], "../assets/images/hzone/2026-05-09-screen-shot.png")
|
||||
self.assertEqual(
|
||||
saved["insertText"],
|
||||
"",
|
||||
)
|
||||
|
||||
def test_save_upload_rejects_disallowed_extensions(self):
|
||||
with self.assertRaises(ValueError):
|
||||
server.save_upload("shell.php", b"<?php")
|
||||
@@ -279,6 +313,43 @@ class BuildQueueTests(unittest.TestCase):
|
||||
self.assertEqual(queued["status"], "queued")
|
||||
self.assertEqual(queued["path"], "blogs/post.org")
|
||||
|
||||
def test_run_build_commands_streams_output_to_callback(self):
|
||||
root = Path(tempfile.mkdtemp())
|
||||
try:
|
||||
venv_python = root / ".venv" / "bin" / "python"
|
||||
venv_python.parent.mkdir(parents=True)
|
||||
venv_python.write_text("", encoding="utf-8")
|
||||
seen = []
|
||||
|
||||
class FakeProcess:
|
||||
def __init__(self, lines, return_code=0):
|
||||
self.stdout = iter(lines)
|
||||
self.return_code = return_code
|
||||
|
||||
def wait(self):
|
||||
return self.return_code
|
||||
|
||||
processes = [
|
||||
FakeProcess(["emacs line 1\n", "emacs line 2\n"]),
|
||||
FakeProcess(["index line\n"]),
|
||||
]
|
||||
|
||||
with mock.patch.object(server, "ROOT", root), mock.patch.object(server.subprocess, "Popen", side_effect=processes):
|
||||
ok, message, log = server.run_build_commands(seen.append)
|
||||
|
||||
self.assertTrue(ok)
|
||||
self.assertIn("Build complete", message)
|
||||
self.assertIn("emacs line 1\n", seen)
|
||||
self.assertIn("index line\n", seen)
|
||||
self.assertEqual(log, "".join(seen))
|
||||
finally:
|
||||
for path in sorted(root.rglob("*"), reverse=True):
|
||||
if path.is_file():
|
||||
path.unlink()
|
||||
else:
|
||||
path.rmdir()
|
||||
root.rmdir()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user