Files
DocsMCP/tests/test_upload_zip.py
T
2026-06-06 00:30:24 +01:00

45 lines
1.3 KiB
Python

import io
import zipfile
from backend.app.main import extract_zip_upload
def make_zip(entries):
payload = io.BytesIO()
with zipfile.ZipFile(payload, "w") as archive:
for name, content in entries.items():
archive.writestr(name, content)
return payload.getvalue()
def test_extract_zip_upload_preserves_folders(tmp_path):
contents = make_zip(
{
"docs/index.md": "# Hello",
"docs/nested/example.py": "print('ok')",
}
)
result = extract_zip_upload(contents, tmp_path)
assert sorted(result["extracted"]) == ["docs/index.md", "docs/nested/example.py"]
assert (tmp_path / "docs" / "index.md").read_text() == "# Hello"
assert (tmp_path / "docs" / "nested" / "example.py").read_text() == "print('ok')"
def test_extract_zip_upload_skips_unsafe_and_unsupported_members(tmp_path):
contents = make_zip(
{
"../escape.md": "bad",
"docs/image.png": "unsupported",
"docs/readme.md": "good",
}
)
result = extract_zip_upload(contents, tmp_path)
assert result["extracted"] == ["docs/readme.md"]
assert "../escape.md" in result["skipped"]
assert "docs/image.png" in result["skipped"]
assert not (tmp_path.parent / "escape.md").exists()