flickr-mail/tests/test_category_search.py

85 lines
2.6 KiB
Python

"""Tests for Wikipedia category searches."""
from unittest.mock import patch
import requests
from main import CategoryResult, app, get_articles_without_images
def test_api_failure_is_not_reported_as_an_empty_success():
with patch("main.requests.get", side_effect=requests.ConnectionError("offline")):
result = get_articles_without_images("Category:Example")
assert result.articles == []
assert result.error == "Unable to load articles from Wikipedia. Please try again."
def test_api_error_response_is_not_reported_as_an_empty_success():
error_response = type(
"Response",
(),
{
"raise_for_status": lambda self: None,
"json": lambda self: {
"error": {"code": "readonly", "info": "Wikipedia is read-only"}
},
},
)()
with patch("main.requests.get", return_value=error_response):
result = get_articles_without_images("Category:Example")
assert result.articles == []
assert result.error == "Unable to load articles from Wikipedia. Please try again."
def test_api_failure_after_results_marks_them_as_partial():
first_response = type(
"Response",
(),
{
"raise_for_status": lambda self: None,
"json": lambda self: {
"query": {
"pages": {
"1": {"pageid": 1, "title": "No image", "images": []}
}
},
"continue": {
"gcmcontinue": "next-page",
"continue": "gcmcontinue||",
},
},
},
)()
with patch(
"main.requests.get",
side_effect=[first_response, requests.ConnectionError("offline")],
):
result = get_articles_without_images("Category:Example")
assert [article.title for article in result.articles] == ["No image"]
assert result.error is not None
assert "partial results" in result.error
def test_category_page_does_not_claim_success_after_api_failure():
result = CategoryResult(
articles=[],
gcmcontinue=None,
error="Unable to load articles from Wikipedia. Please try again.",
)
with (
patch("main.get_articles_without_images", return_value=result),
patch("main.log_interaction"),
app.test_client() as client,
):
response = client.get("/category?cat=Category:Example")
page = response.get_data(as_text=True)
assert response.status_code == 200
assert "Unable to load articles from Wikipedia" in page
assert "All articles in this category have images" not in page