81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime, timedelta, timezone
|
|
|
|
import pytest
|
|
|
|
from crawlee.sessions._cookies import CookieParam
|
|
from crawlee.sessions._models import SessionModel
|
|
|
|
SESSION_CREATED_AT = datetime.now(timezone.utc)
|
|
|
|
|
|
@pytest.fixture
|
|
def session_direct() -> SessionModel:
|
|
"""Provide a SessionModel instance directly using fixed parameters."""
|
|
return SessionModel(
|
|
id='test_session',
|
|
max_age=timedelta(minutes=30),
|
|
user_data={'user_key': 'user_value'},
|
|
max_error_score=3.0,
|
|
error_score_decrement=0.5,
|
|
created_at=SESSION_CREATED_AT,
|
|
usage_count=0,
|
|
max_usage_count=10,
|
|
error_score=0.0,
|
|
cookies=[CookieParam({'name': 'cookie_key', 'value': 'cookie_value'})],
|
|
blocked_status_codes=[401, 403, 429],
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def session_args_camel() -> dict:
|
|
"""Provide session parameters as dictionary with camel case keys."""
|
|
return {
|
|
'id': 'test_session',
|
|
'maxAge': '00:30:00',
|
|
'userData': {'user_key': 'user_value'},
|
|
'maxErrorScore': 3.0,
|
|
'errorScoreDecrement': 0.5,
|
|
'createdAt': SESSION_CREATED_AT,
|
|
'usageCount': 0,
|
|
'maxUsageCount': 10,
|
|
'errorScore': 0.0,
|
|
'cookies': [CookieParam({'name': 'cookie_key', 'value': 'cookie_value'})],
|
|
'blockedStatusCodes': [401, 403, 429],
|
|
}
|
|
|
|
|
|
@pytest.fixture
|
|
def session_args_snake() -> dict:
|
|
"""Provide session parameters as dictionary with snake case keys."""
|
|
return {
|
|
'id': 'test_session',
|
|
'max_age': '00:30:00',
|
|
'user_data': {'user_key': 'user_value'},
|
|
'max_error_score': 3.0,
|
|
'error_score_decrement': 0.5,
|
|
'created_at': SESSION_CREATED_AT,
|
|
'usage_count': 0,
|
|
'max_usage_count': 10,
|
|
'error_score': 0.0,
|
|
'cookies': [CookieParam({'name': 'cookie_key', 'value': 'cookie_value'})],
|
|
'blocked_status_codes': [401, 403, 429],
|
|
}
|
|
|
|
|
|
def test_session_model(
|
|
session_direct: SessionModel,
|
|
session_args_camel: dict,
|
|
session_args_snake: dict,
|
|
) -> None:
|
|
"""Test equivalence of SessionModel instances created directly and from camelCase, and snake_case kwargs."""
|
|
session_camel = SessionModel(**session_args_camel)
|
|
session_snake = SessionModel(**session_args_snake)
|
|
|
|
assert session_direct == session_camel == session_snake
|
|
assert session_direct.id == session_camel.id == session_snake.id == 'test_session'
|
|
|
|
# Check that max_age is correctly parsed into a timedelta object
|
|
assert session_direct.max_age == session_camel.max_age == session_snake.max_age == timedelta(minutes=30)
|