from scrape_movies.constants import EMPIRE_FIXTURE_PATH
from scrape_movies.infrastructure import empire_movies
from scrape_movies.infrastructure.soup_basics import load_html
SNAPSHOT_LAYOUT = """
4) The Shawshank Redemption
3) The Dark Knight
not a title
2) The Empire Strikes Back
"""
def test_parse_titles_when_snapshot_layout_reads_h3_title_in_page_order() -> None:
assert empire_movies.parse_titles(SNAPSHOT_LAYOUT) == [
"4) The Shawshank Redemption",
"3) The Dark Knight",
"2) The Empire Strikes Back",
]
def test_parse_titles_when_live_layout_reads_ranked_h2_headings() -> None:
titles = empire_movies.parse_titles(load_html(EMPIRE_FIXTURE_PATH))
assert len(titles) == 100
assert titles[0].startswith("100) ")
assert titles[-1].startswith("1) ")
def test_parse_titles_when_h2_has_no_rank_ignores_it() -> None:
assert empire_movies.parse_titles("Jump to
2) Two
") == ["2) Two"]
def test_parse_titles_when_page_has_no_titles_returns_empty() -> None:
assert empire_movies.parse_titles("nothing
") == []
def test_first_title_markup_when_snapshot_layout_shows_h3() -> None:
assert empire_movies.first_title_markup(SNAPSHOT_LAYOUT).startswith(
''
)
def test_first_title_markup_when_live_layout_shows_h2() -> None:
markup = empire_movies.first_title_markup(load_html(EMPIRE_FIXTURE_PATH))
assert markup.startswith("")
def test_first_title_markup_when_nothing_found_returns_empty() -> None:
assert empire_movies.first_title_markup("
x
") == ""