scripts/test_package_site.py (1956B)
1 #!/usr/bin/env python3
2 """Verify deployment packaging preserves repository paths without leaking metadata."""
3
4 from pathlib import Path
5 import tarfile
6 import tempfile
7 import unittest
8
9 from package_site import package
10
11
12 class PackageTests(unittest.TestCase):
13 def test_dot_prefixed_repositories_and_paths_are_preserved(self):
14 with tempfile.TemporaryDirectory() as directory:
15 root = Path(directory)
16 public = root / "public"
17 (public / ".github/file").mkdir(parents=True)
18 (public / "index.html").write_text("catalog")
19 (public / ".github/index.html").write_text("repository")
20 (public / ".github/file/.gitignore.html").write_text("source view")
21 output = root / "artifact.tar"
22 package(public, output)
23 with tarfile.open(output) as archive:
24 self.assertIn(".github/index.html", archive.getnames())
25 self.assertIn(".github/file/.gitignore.html", archive.getnames())
26 self.assertTrue(all(member.isfile() or member.isdir() for member in archive))
27 with self.assertRaises(ValueError):
28 package(public, public / "artifact.tar")
29 (public / ".git").mkdir()
30 (public / ".git/config").write_text("private metadata")
31 with self.assertRaises(ValueError):
32 package(public, output)
33
34 def test_links_are_rejected(self):
35 with tempfile.TemporaryDirectory() as directory:
36 root = Path(directory)
37 public = root / "public"
38 public.mkdir()
39 (public / "index.html").write_text("catalog")
40 outside = root / "private.txt"
41 outside.write_text("private")
42 (public / "linked.txt").symlink_to(outside)
43 with self.assertRaises(ValueError):
44 package(public, root / "artifact.tar")
45
46
47 if __name__ == "__main__":
48 unittest.main(verbosity=2)