Files
2026-10-28 14:35:05 +08:00

68 lines
2.6 KiB
Python

import re
from scrape_movies.constants import PROJECT_ROOT
WIKI = PROJECT_ROOT / "docs" / "wiki"
IMAGES = PROJECT_ROOT / "docs" / "images"
LANGUAGES = {"": "**English**", "-da": "**Dansk**", "-ms": "**Bahasa Melayu**"}
STEP_PAGES = ("Parsing-HTML", "Hacker-News", "Scraping-Ethics", "Top-100-Movies")
GAINED = {"": "What we gained", "-da": "Hvad vi lærte", "-ms": "Apa yang kita pelajari"}
IMAGE = re.compile(r"!\[[^\]]*\]\(https://[^)]*/docs/images/([^)]+\.png)\)")
CODE_BLOCK = re.compile(r"```.*?```", re.DOTALL)
def _pages(suffix: str) -> set[str]:
names = {path.stem for path in WIKI.glob("*.md") if not path.stem.startswith("_")}
if suffix:
return {name[: -len(suffix)] for name in names if name.endswith(suffix)}
return {name for name in names if not name.endswith(("-da", "-ms"))}
def _read(page: str, suffix: str) -> str:
return (WIKI / f"{page}{suffix}.md").read_text(encoding="utf-8")
def test_wiki_when_translated_has_same_page_set_in_every_language() -> None:
english = _pages("")
assert english
for suffix in ("-da", "-ms"):
assert _pages(suffix) == english, suffix
def test_wiki_when_page_opens_has_language_switch_line() -> None:
for suffix, marker in LANGUAGES.items():
for page in _pages(""):
first_line = _read(page, suffix).splitlines()[0]
assert marker in first_line, (page, suffix)
assert first_line.count("](") == 2, (page, suffix)
def test_wiki_when_step_page_has_screenshots_and_gains_in_every_language() -> None:
for page in STEP_PAGES:
english_images = IMAGE.findall(_read(page, ""))
assert english_images, page
for suffix, gained in GAINED.items():
text = _read(page, suffix)
assert IMAGE.findall(text) == english_images, (page, suffix)
assert f"## {gained}" in text, (page, suffix)
def test_wiki_when_images_are_linked_every_file_exists() -> None:
for path in WIKI.glob("*.md"):
for name in IMAGE.findall(path.read_text(encoding="utf-8")):
assert (IMAGES / name).is_file(), (path.name, name)
def test_wiki_when_translated_keeps_code_blocks_in_english() -> None:
for page in _pages(""):
english = CODE_BLOCK.findall(_read(page, ""))
for suffix in ("-da", "-ms"):
assert CODE_BLOCK.findall(_read(page, suffix)) == english, (page, suffix)
def test_sidebar_when_read_lists_every_language_page() -> None:
sidebar = (WIKI / "_Sidebar.md").read_text(encoding="utf-8")
for suffix in LANGUAGES:
for page in _pages(""):
assert f"]({page}{suffix})" in sidebar, (page, suffix)