31 lines
1.6 KiB
Python
31 lines
1.6 KiB
Python
from pathlib import Path
|
|
|
|
from rf4_research.media_assets import extract_media_candidates, merge_manifest, store_asset
|
|
|
|
|
|
def test_extracts_and_classifies_unique_https_media() -> None:
|
|
html = '''<article><a href="/fish/pike"><img src="/media/fish/pike.png" alt="Щука"></a></article>
|
|
<figure><img data-src="https://cdn.example/maps/kuori.webp" alt="Карта Куори"></figure>
|
|
<img src="http://unsafe.example/bait.png"><img src="/media/fish/pike.png">'''
|
|
items = extract_media_candidates(html, source_page="https://example.test/guide")
|
|
assert [(item.entity_type, item.asset_url) for item in items] == [
|
|
("fish", "https://example.test/media/fish/pike.png"),
|
|
("waterbody", "https://cdn.example/maps/kuori.webp"),
|
|
]
|
|
assert items[0].external_id == "pike"
|
|
|
|
|
|
def test_does_not_mistake_seafishing_screenshot_for_fish_entity() -> None:
|
|
items = extract_media_candidates('<img src="/res/userguide/seafishing-1.jpeg">', source_page="https://rf4game.de/userguide/")
|
|
assert items[0].entity_type == "reference"
|
|
|
|
|
|
def test_manifest_merges_and_binary_store_is_content_addressed(tmp_path: Path) -> None:
|
|
item = extract_media_candidates('<img src="/bait/worm.png" alt="Bait worm">', source_page="https://example.test")[0]
|
|
first = merge_manifest(tmp_path / "manifest.json", [item])
|
|
second = merge_manifest(tmp_path / "manifest.json", [item])
|
|
assert len(first["assets"]) == len(second["assets"]) == 1
|
|
digest, relative = store_asset(tmp_path, b"image", content_type="image/png", source_url=item.asset_url)
|
|
assert len(digest) == 64
|
|
assert (tmp_path / relative).read_bytes() == b"image"
|