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()