Repository navigation
Expand file tree
/
Copy pathtest_materialize_localization_artifact.py
More file actions
92 lines (74 loc) · 3.27 KB
/
Copy pathtest_materialize_localization_artifact.py
File metadata and controls
92 lines (74 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python3
from __future__ import annotations
import importlib.util
import tempfile
import unittest
from pathlib import Path
SCRIPT = Path(__file__).with_name("materialize_localization_artifact.py")
SPEC = importlib.util.spec_from_file_location("materialize_localization_artifact", SCRIPT)
assert SPEC and SPEC.loader
MODULE = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(MODULE)
class MaterializeLocalizationArtifactTests(unittest.TestCase):
def setUp(self) -> None:
self.temp_dir = tempfile.TemporaryDirectory()
self.root = Path(self.temp_dir.name)
self.artifact = self.root / "artifact"
self.repository = self.root / "repository"
(self.artifact / "localizations" / "ko-kr").mkdir(parents=True)
(self.artifact / "docs").mkdir()
self.repository.mkdir()
(self.artifact / "localizations" / "ko-kr" / ".localization-state.json").write_text(
'{"version": 1, "files": {}}\n',
encoding="utf-8",
)
(self.artifact / "localizations" / "ko-kr" / "README.md").write_text(
"새 문서\n",
encoding="utf-8",
)
(self.artifact / "docs" / "locale-registry.js").write_text(
"const locale = 'ko-kr';\n",
encoding="utf-8",
)
def tearDown(self) -> None:
self.temp_dir.cleanup()
def test_materializes_only_expected_outputs(self) -> None:
(self.repository / "localizations" / "old").mkdir(parents=True)
(self.repository / "localizations" / "old" / "README.md").write_text(
"obsolete\n",
encoding="utf-8",
)
MODULE.materialize(self.artifact, self.repository)
self.assertFalse((self.repository / "localizations" / "old").exists())
self.assertEqual(
(self.repository / "localizations" / "ko-kr" / "README.md").read_text(
encoding="utf-8"
),
"새 문서\n",
)
self.assertEqual(
(self.repository / "docs" / "locale-registry.js").read_text(
encoding="utf-8"
),
"const locale = 'ko-kr';\n",
)
def test_rejects_unexpected_files_before_modifying_checkout(self) -> None:
unexpected = self.artifact / "scripts" / "validate_workshop.py"
unexpected.parent.mkdir()
unexpected.write_text("malicious\n", encoding="utf-8")
existing = self.repository / "localizations" / "ko-kr" / "README.md"
existing.parent.mkdir(parents=True)
existing.write_text("keep\n", encoding="utf-8")
with self.assertRaisesRegex(RuntimeError, "unexpected path"):
MODULE.materialize(self.artifact, self.repository)
self.assertEqual(existing.read_text(encoding="utf-8"), "keep\n")
def test_rejects_symbolic_links(self) -> None:
link = self.artifact / "localizations" / "ko-kr" / "linked.md"
try:
link.symlink_to(self.artifact / "docs" / "locale-registry.js")
except OSError as error:
self.skipTest(f"Symbolic links are unavailable: {error}")
with self.assertRaisesRegex(RuntimeError, "symbolic link|non-regular file"):
MODULE.materialize(self.artifact, self.repository)
if __name__ == "__main__":
unittest.main()