IAAI scraper

This commit is contained in:
qananasikq
2026-04-07 23:51:41 +03:00
commit 78b52b265f
37 changed files with 2524 additions and 0 deletions

42
tests/test_listing.py Normal file
View File

@@ -0,0 +1,42 @@
from __future__ import annotations
import unittest
from iaai_scraper.browser.pace import HumanPacer
from iaai_scraper.core.config import Settings
from iaai_scraper.storage.listing import ListingCollector
class _FakePage:
def __init__(self, counts: dict[str, int]) -> None:
self._counts = counts
class _Locator:
def __init__(self, count_value: int) -> None:
self._count_value = count_value
def count(self) -> int:
return self._count_value
def locator(self, selector: str) -> "_FakePage._Locator":
return _FakePage._Locator(self._counts.get(selector, 0))
class TestListingUnit(unittest.TestCase):
def test_has_next_page_true_for_known_selector(self) -> None:
page = _FakePage({"a[aria-label*='Next']": 1})
self.assertTrue(ListingCollector._has_next_page(page))
def test_has_next_page_false_when_no_selectors(self) -> None:
page = _FakePage({})
self.assertFalse(ListingCollector._has_next_page(page))
def test_constructor_with_settings_and_pacer(self) -> None:
settings = Settings()
pacer = HumanPacer(settings)
collector = ListingCollector(settings, pacer)
self.assertIsNotNone(collector)
if __name__ == "__main__":
unittest.main()