Coverage for tests/tests_feeds.py: 91%
34 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-14 22:07 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-14 22:07 +0000
1import unittest
2import xml.etree.ElementTree as ET
3from unittest.mock import patch, Mock
4from webapp.app import create_app
7class TestFeeds(unittest.TestCase):
8 def setUp(self):
9 self.app = create_app(testing=True)
10 self.client = self.app.test_client()
12 @patch("webapp.feeds.feeds.session.get")
13 def test_feeds_updates_success(self, mock_get):
14 """Test successful RSS feed generation using feedgen"""
15 mock_response = Mock()
16 mock_response.json.return_value = {
17 "page": 1,
18 "size": 2,
19 "snaps": [
20 {
21 "name": "test-snap",
22 "title": "Test Snap",
23 "summary": "A test snap",
24 "publisher": "Test Publisher",
25 "license": "MIT",
26 "version": "1.0.0",
27 "last_updated": "Thu, 02 Oct 2025 22:07:58 GMT",
28 "icon": "https://example.com/icon.png",
29 "snap_id": "test-snap-id-123",
30 "media": [
31 {
32 "type": "screenshot",
33 "url": "https://example.com/screenshot.png",
34 }
35 ],
36 }
37 ],
38 }
39 mock_response.raise_for_status.return_value = None
40 mock_get.return_value = mock_response
42 response = self.client.get("/feeds/updates")
43 self.assertEqual(response.status_code, 200)
44 self.assertEqual(
45 response.content_type, "application/rss+xml; charset=utf-8"
46 )
47 content = response.get_data(as_text=True)
48 self.assertIn("<?xml version='1.0' encoding='UTF-8'?>", content)
49 self.assertIn(
50 "<title>Snapcraft - recently updated snaps</title>", content
51 )
53 try:
54 root = ET.fromstring(content)
55 except ET.ParseError as e:
56 self.fail(f"Returned content is not valid XML: {e}")
58 self.assertEqual(root.tag, "rss")
59 channel = root.find("channel")
60 self.assertIsNotNone(channel, "No <channel> element found in RSS feed")
62 items = channel.findall("item")
63 self.assertTrue(
64 any(item.findtext("title") == "Test Snap" for item in items)
65 )
66 self.assertIn("<description>", content)
67 self.assertIn("Test Publisher", content)
68 self.assertIn("https://snapcraft.io/test-snap", content)
71if __name__ == "__main__":
72 unittest.main()