Files
project-kino/nextcloud-import/backend-nextcloud-variant/tests/test_internet_archive_provider.py
Hermes Agent 884c198783 Import remaining Nextcloud Kino-Projekt material into git
Moves git-compatible content from Nextcloud
(Botomir/Projekte/Angefangen/Kino-Projekt) into this repo per cleanup
request, under nextcloud-import/ to avoid colliding with the actively
maintained backend/frontend/worker layout:

- status/planning docs (Botomir-Status.md, Plan-Botomir.md, Projektbeschreibung.md)
- docs/ (deployment.md, provider-policy.md)
- backend-nextcloud-variant/ (older app/ layout, kept for reference only)
- plugin.video.xstream/, script.module.xstreamscraper/ (vendored Kodi addon source)

A third-party Firefox extension folder was intentionally left in Nextcloud
(unrelated vendor code, not project source).
2026-08-17 10:47:13 +02:00

47 lines
2.0 KiB
Python

import pytest
from app.providers.base import ProviderError
from app.providers.internet_archive import InternetArchiveProvider
def test_internet_archive_detection():
provider = InternetArchiveProvider()
assert provider.can_handle("https://archive.org/details/BigBuckBunny_328")
assert provider.can_handle("https://archive.org/download/BigBuckBunny_328/video.mp4")
assert not provider.can_handle("https://example.com/details/BigBuckBunny_328")
def test_internet_archive_identifier_parsing():
provider = InternetArchiveProvider()
assert provider._identifier_from_url("https://archive.org/details/BigBuckBunny_328") == "BigBuckBunny_328"
assert provider._identifier_from_url("https://archive.org/download/BigBuckBunny_328/video.mp4") == "BigBuckBunny_328"
assert provider._identifier_from_url("https://archive.org/metadata/BigBuckBunny_328") == "BigBuckBunny_328"
def test_select_media_file_prefers_original_mp4():
provider = InternetArchiveProvider()
selected = provider._select_media_file([
{"name": "thumb.jpg", "format": "JPEG", "source": "metadata", "size": "10"},
{"name": "movie.ogv", "format": "Ogg Video", "source": "derivative", "size": "200000000"},
{"name": "movie.mp4", "format": "MPEG4", "source": "original", "size": "100000000"},
])
assert selected is not None
assert selected["name"] == "movie.mp4"
def test_select_media_file_rejects_path_traversal():
provider = InternetArchiveProvider()
assert provider._select_media_file([{"name": "../evil.mp4", "format": "MPEG4", "source": "original"}]) is None
@pytest.mark.asyncio
async def test_probe_requires_media_file(monkeypatch):
provider = InternetArchiveProvider()
async def fake_metadata(identifier: str) -> dict:
return {"metadata": {"title": "No media"}, "files": [{"name": "notes.txt", "format": "Text"}]}
monkeypatch.setattr(provider, "_metadata", fake_metadata)
with pytest.raises(ProviderError):
await provider.probe("https://archive.org/details/no-media")