File size: 2,827 Bytes
892fa81 | 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 | """Unit tests for cores.search — HTTP + image extraction + UA."""
from __future__ import annotations
from cores.search import extract_image_urls_from_html, is_social_media_url, random_user_agent
class TestExtractImageUrls:
def test_extracts_img_src(self):
html = '<html><body><img src="https://example.com/a.jpg" alt="A"></body></html>'
imgs = extract_image_urls_from_html(html, base_url="https://example.com/")
assert len(imgs) == 1
assert imgs[0]["url"] == "https://example.com/a.jpg"
assert imgs[0]["alt"] == "A"
def test_resolves_relative_urls(self):
html = '<img src="/images/b.png">'
imgs = extract_image_urls_from_html(html, base_url="https://example.com/page")
assert imgs[0]["url"] == "https://example.com/images/b.png"
def test_skips_data_uris(self):
html = '<img src="data:image/png;base64,iVBORw0K">'
imgs = extract_image_urls_from_html(html)
assert imgs == []
def test_skips_tiny_images(self):
html = '<img src="x.jpg" width="10" height="10">'
imgs = extract_image_urls_from_html(html, min_size=50)
assert imgs == []
def test_max_images_limit(self):
html = "".join(f'<img src="{i}.jpg">' for i in range(100))
imgs = extract_image_urls_from_html(html, max_images=10)
assert len(imgs) == 10
def test_handles_data_src(self):
html = '<img data-src="lazy.jpg">'
imgs = extract_image_urls_from_html(html, base_url="https://example.com/")
assert len(imgs) == 1
assert imgs[0]["url"] == "https://example.com/lazy.jpg"
def test_dedupes_urls(self):
html = '<img src="a.jpg"><img src="a.jpg">'
imgs = extract_image_urls_from_html(html, base_url="https://example.com/")
assert len(imgs) == 1
def test_malformed_html_does_not_crash(self):
html = "<html><body><img src="
imgs = extract_image_urls_from_html(html)
assert isinstance(imgs, list)
class TestSocialMediaUrl:
def test_instagram(self):
r = is_social_media_url("https://instagram.com/p/abc123")
assert r["is_social"] is True
assert r["platform"] == "instagram"
def test_twitter(self):
r = is_social_media_url("https://twitter.com/user")
assert r["is_social"] is True
assert r["platform"] == "twitter"
def test_x_com(self):
r = is_social_media_url("https://x.com/user")
assert r["is_social"] is True
def test_non_social(self):
r = is_social_media_url("https://example.com/image.jpg")
assert r["is_social"] is False
assert r["platform"] is None
class TestUserAgent:
def test_returns_string(self):
ua = random_user_agent()
assert isinstance(ua, str)
assert "Mozilla" in ua
|