36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from scraping_python_org.application.get_upcoming_events import get_upcoming_events
|
|
from scraping_python_org.domain.event import Event
|
|
|
|
|
|
class FakeEventSource:
|
|
def __init__(self, events: list[Event]) -> None:
|
|
self._events = events
|
|
|
|
def fetch_events(self) -> list[Event]:
|
|
return self._events
|
|
|
|
|
|
def _events(count: int) -> list[Event]:
|
|
return [Event(f"11-{i:02d}", f"Event {i}") for i in range(count)]
|
|
|
|
|
|
def test_get_upcoming_events_numbers_events_from_zero() -> None:
|
|
result = get_upcoming_events(FakeEventSource(_events(2)))
|
|
|
|
assert result == {
|
|
0: {"time": "11-00", "name": "Event 0"},
|
|
1: {"time": "11-01", "name": "Event 1"},
|
|
}
|
|
|
|
|
|
def test_get_upcoming_events_limits_to_five_by_default() -> None:
|
|
assert list(get_upcoming_events(FakeEventSource(_events(8)))) == [0, 1, 2, 3, 4]
|
|
|
|
|
|
def test_get_upcoming_events_honours_custom_limit() -> None:
|
|
assert len(get_upcoming_events(FakeEventSource(_events(8)), limit=3)) == 3
|
|
|
|
|
|
def test_get_upcoming_events_returns_empty_dict_without_events() -> None:
|
|
assert get_upcoming_events(FakeEventSource([])) == {}
|