scrapy/tests/test_sessions.py

61 lines
1.7 KiB
Python

import pytest
from scrapy.sessions import Session
from scrapy.utils.test import get_crawler
def test_get() -> None:
sessions = get_crawler().sessions
session = sessions["foo"]
assert isinstance(session, Session)
assert session.id == "foo"
assert sessions["foo"] is session
assert "foo" in sessions
assert "bar" not in sessions
def test_non_string_id() -> None:
sessions = get_crawler().sessions
assert sessions[1].id == "1"
assert sessions[1] is sessions["1"]
assert 1 in sessions
sessions.retire(1)
assert "1" not in sessions
def test_create() -> None:
sessions = get_crawler().sessions
session = sessions.create()
assert sessions[session.id] is session
assert sessions.create().id != session.id
def test_retire() -> None:
crawler = get_crawler()
sessions = crawler.sessions
sessions["foo"].meta["a"] = 1
sessions.retire("foo")
assert "foo" not in sessions
assert sessions["foo"].meta == {}
sessions.retire("bar") # unknown IDs are ignored
assert crawler.stats.get_value("sessions/retired") == 1
def test_max(caplog: pytest.LogCaptureFixture) -> None:
crawler = get_crawler(settings_dict={"SESSIONS_MAX": 2})
sessions = crawler.sessions
a = sessions["a"]
sessions["b"]
assert sessions["a"] is a
caplog.clear()
sessions["c"]
assert "b" not in sessions
assert "a" in sessions
assert crawler.stats.get_value("sessions/created") == 3
assert crawler.stats.get_value("sessions/dropped") == 1
assert "Dropped session 'b'" in caplog.text
caplog.clear()
sessions["d"]
assert crawler.stats.get_value("sessions/dropped") == 2
assert not caplog.text