Coverage for tests/test_blog_sitemap.py: 100%
43 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-25 22:09 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-25 22:09 +0000
1import unittest
2from unittest.mock import patch
4from requests.exceptions import ProxyError
6from webapp.app import create_app
9class FakeResponse:
10 def __init__(self, status_code=200, posts=None, broken_json=False):
11 self.status_code = status_code
12 self._posts = posts or []
13 self._broken_json = broken_json
15 def json(self):
16 if self._broken_json or self.status_code != 200:
17 raise ValueError("invalid json")
18 return self._posts
21class TestBlogSitemap(unittest.TestCase):
22 def setUp(self):
23 self.app = create_app(testing=True)
24 self.client = self.app.test_client()
26 @patch("webapp.blog.views.requests.Session.get")
27 def test_sitemap_handles_request_error(self, mock_get):
28 mock_get.side_effect = ProxyError("Unable to connect to proxy")
30 response = self.client.get("/blog/sitemap.xml")
32 self.assertEqual(response.status_code, 200)
33 self.assertIn(b"<urlset", response.data)
35 @patch("webapp.blog.views.requests.Session.get")
36 def test_sitemap_handles_invalid_json(self, mock_get):
37 mock_get.return_value = FakeResponse(broken_json=True)
39 response = self.client.get("/blog/sitemap.xml")
41 self.assertEqual(response.status_code, 200)
42 self.assertIn(b"<urlset", response.data)
44 @patch("webapp.blog.views.requests.Session.get")
45 def test_sitemap_handles_http_error_status(self, mock_get):
46 mock_get.return_value = FakeResponse(status_code=502)
48 response = self.client.get("/blog/sitemap.xml")
50 self.assertEqual(response.status_code, 200)
51 self.assertIn(b"<urlset", response.data)
53 @patch("webapp.blog.views.requests.Session.get")
54 def test_sitemap_lists_posts(self, mock_get):
55 posts = [
56 {
57 "slug": "some-post",
58 "date": "2026-10-01T00:00:00+00:00",
59 }
60 ]
61 mock_get.side_effect = [
62 FakeResponse(status_code=200, posts=posts),
63 FakeResponse(status_code=400),
64 ]
66 response = self.client.get("/blog/sitemap.xml")
68 self.assertEqual(response.status_code, 200)
69 self.assertIn(b"some-post", response.data)
70 self.assertEqual(mock_get.call_count, 2)