This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
kb-skills/tests/test_auth/test_cookie_validation.py
starmen1265 32bb22008b test(07-03): add failing tests for cookie validation
- Test validate_cookie_valid - valid cookie returns user info
- Test validate_cookie_expired - expired cookie returns False
- Test validate_cookie_empty - empty cookie returns False
- Test validate_cookie_malformed - network error handling
- Test validate_cookie_other_status_code - non-200/401 handling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:59:28 +08:00

134 lines
4.6 KiB
Python

"""Tests for Cookie validation functionality.
Tests the validate_cookie method in ZhihuLogin class.
"""
from unittest.mock import MagicMock, patch, AsyncMock
import pytest
from kb_workflow.auth.zhihu_login import ZhihuLogin, CookieValidationResult
class TestCookieValidation:
"""Test suite for cookie validation."""
@pytest.fixture
def mock_browser_with_request(self):
"""Mock browser with request API support."""
browser = MagicMock()
browser.browser = MagicMock()
browser.page = MagicMock()
# Create mock response
mock_response = MagicMock()
mock_response.status = 200
mock_response.json = AsyncMock(return_value={
"id": 12345678,
"name": "TestUser",
"url_token": "testuser"
})
# Setup page.request.get to return mock response
browser.page.request = MagicMock()
browser.page.request.get = AsyncMock(return_value=mock_response)
browser.close = MagicMock()
browser.start = MagicMock()
return browser, mock_response
@pytest.mark.asyncio
async def test_validate_cookie_valid(self, mock_browser_with_request, intermediate_path):
"""Test 1: validate_cookie_valid - Valid cookie returns valid=True with user info."""
# Arrange
mock_browser, _ = mock_browser_with_request
login = ZhihuLogin(intermediate_path=intermediate_path)
login.browser = mock_browser
# Act
result = await login.validate_cookie("z_c0=valid_cookie_value")
# Assert
assert isinstance(result, CookieValidationResult)
assert result.valid is True
assert result.username == "TestUser"
assert result.user_id == "12345678"
assert result.reason is None
@pytest.mark.asyncio
async def test_validate_cookie_expired(self, mock_browser_with_request, intermediate_path):
"""Test 2: validate_cookie_expired - Expired cookie returns valid=False."""
# Arrange
mock_browser, mock_response = mock_browser_with_request
mock_response.status = 401
login = ZhihuLogin(intermediate_path=intermediate_path)
login.browser = mock_browser
# Act
result = await login.validate_cookie("z_c0=expired_cookie_value")
# Assert
assert isinstance(result, CookieValidationResult)
assert result.valid is False
assert result.reason == "Cookie expired"
assert result.username is None
assert result.user_id is None
@pytest.mark.asyncio
async def test_validate_cookie_empty(self, intermediate_path):
"""Test 3: validate_cookie_empty - Empty cookie returns valid=False."""
# Arrange
login = ZhihuLogin(intermediate_path=intermediate_path)
login.browser = MagicMock()
login.browser.page = None # No page means no cookie loaded
# Act
result = await login.validate_cookie()
# Assert
assert isinstance(result, CookieValidationResult)
assert result.valid is False
assert "No cookie" in result.reason
@pytest.mark.asyncio
async def test_validate_cookie_malformed(self, intermediate_path):
"""Test 4: validate_cookie_malformed - Malformed cookie returns valid=False."""
# Arrange
mock_browser = MagicMock()
mock_browser.browser = MagicMock()
mock_browser.page = MagicMock()
mock_browser.page.request = MagicMock()
mock_browser.page.request.get = AsyncMock(side_effect=Exception("Network error"))
mock_browser.close = MagicMock()
mock_browser.start = MagicMock()
login = ZhihuLogin(intermediate_path=intermediate_path)
login.browser = mock_browser
# Act
result = await login.validate_cookie("invalid_format_cookie")
# Assert
assert isinstance(result, CookieValidationResult)
assert result.valid is False
assert "Network error" in result.reason
@pytest.mark.asyncio
async def test_validate_cookie_other_status_code(self, mock_browser_with_request, intermediate_path):
"""Test 5: validate_cookie with non-200/401 status code."""
# Arrange
mock_browser, mock_response = mock_browser_with_request
mock_response.status = 500
login = ZhihuLogin(intermediate_path=intermediate_path)
login.browser = mock_browser
# Act
result = await login.validate_cookie("z_c0=some_cookie")
# Assert
assert isinstance(result, CookieValidationResult)
assert result.valid is False
assert "500" in result.reason