test(07-01): add auth test fixtures
- Create tests/test_auth/conftest.py with pytest fixtures - mock_browser: Mock PlaywrightBrowser for unit testing - mock_canvas: Mock canvas element for QR code screenshot - sample_cookies: Test cookie data with z_c0 login cookie - sample_cookies_no_login: Test cookies without login state - mock_env_file: Temporary .kb_env file fixture - intermediate_path: Temporary intermediate directory fixture Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
"""Pytest fixtures for auth module tests
|
||||
|
||||
Provides mock objects and test fixtures for ZhihuLogin testing.
|
||||
"""
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_page():
|
||||
"""Mock Playwright Page object."""
|
||||
page = MagicMock()
|
||||
page.goto = MagicMock()
|
||||
page.wait_for_selector = MagicMock()
|
||||
page.query_selector = MagicMock()
|
||||
page.set_default_timeout = MagicMock()
|
||||
return page
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_context():
|
||||
"""Mock Playwright BrowserContext object."""
|
||||
context = MagicMock()
|
||||
context.cookies = MagicMock(return_value=[])
|
||||
context.add_cookies = MagicMock()
|
||||
context.new_page = MagicMock()
|
||||
context.close = MagicMock()
|
||||
return context
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_canvas():
|
||||
"""Mock Canvas element for QR code."""
|
||||
canvas = MagicMock()
|
||||
canvas.screenshot = MagicMock(return_value=b"fake_png_bytes")
|
||||
return canvas
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_browser(mock_page, mock_context, mock_canvas):
|
||||
"""Mock PlaywrightBrowser instance.
|
||||
|
||||
Provides a fully mocked browser that can be used for unit testing
|
||||
without requiring actual browser interaction.
|
||||
"""
|
||||
browser = MagicMock()
|
||||
|
||||
# Setup browser properties
|
||||
browser.headless = True
|
||||
browser.timeout = 30000
|
||||
browser.page = mock_page
|
||||
browser.context = mock_context
|
||||
|
||||
# Setup methods
|
||||
browser.start = MagicMock()
|
||||
browser.close = MagicMock()
|
||||
browser.goto = MagicMock()
|
||||
browser.wait_for_selector = MagicMock(return_value=mock_canvas)
|
||||
browser.query_selector = MagicMock(return_value=mock_canvas)
|
||||
|
||||
# Setup context.cookies to return cookie list
|
||||
browser.context.cookies = MagicMock(return_value=[])
|
||||
|
||||
return browser
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_cookies():
|
||||
"""Sample cookie data for testing.
|
||||
|
||||
Returns a list of cookies including z_c0 for login detection.
|
||||
"""
|
||||
return [
|
||||
{"name": "z_c0", "value": "test_z_c0_value", "domain": ".zhihu.com"},
|
||||
{"name": "_xsrf", "value": "test_xsrf_value", "domain": ".zhihu.com"},
|
||||
{"name": "d_c0", "value": "test_d_c0_value", "domain": ".zhihu.com"},
|
||||
]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_cookies_no_login():
|
||||
"""Sample cookies without login cookie (z_c0)."""
|
||||
return [
|
||||
{"name": "_xsrf", "value": "test_xsrf_value", "domain": ".zhihu.com"},
|
||||
{"name": "d_c0", "value": "test_d_c0_value", "domain": ".zhihu.com"},
|
||||
]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_env_file(tmp_path):
|
||||
"""Create a temporary .kb_env file for testing.
|
||||
|
||||
Returns the path to the temporary env file.
|
||||
"""
|
||||
env_file = tmp_path / ".kb_env"
|
||||
env_file.write_text("")
|
||||
return env_file
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def intermediate_path(tmp_path):
|
||||
"""Create a temporary intermediate directory for testing.
|
||||
|
||||
Returns the path to the intermediate directory.
|
||||
"""
|
||||
intermediate = tmp_path / "intermediate"
|
||||
intermediate.mkdir(parents=True, exist_ok=True)
|
||||
return str(intermediate)
|
||||
Reference in New Issue
Block a user