Coverage for tests/endpoints/tests_releases.py: 100%
56 statements
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-26 22:06 +0000
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-26 22:06 +0000
1from unittest.mock import patch
2from tests.endpoints.endpoint_testing import TestEndpoints
5class TestGetReleaseHistoryData(TestEndpoints):
6 @patch("webapp.endpoints.releases.dashboard.snap_channel_map")
7 @patch("webapp.endpoints.releases.dashboard.snap_release_history")
8 def test_get_release_history_data_success(
9 self, mock_snap_release_history, mock_snap_channel_map
10 ):
11 """Test successful retrieval of release history data"""
12 snap_name = "test-snap"
14 # Mock release history response
15 mock_release_history = [
16 {
17 "revision": 1,
18 "version": "1.0",
19 "created_at": "2023-01-01T00:00:00Z",
20 "architectures": ["amd64"],
21 "channels": ["stable"],
22 }
23 ]
24 mock_snap_release_history.return_value = mock_release_history
26 # Mock channel map response
27 mock_channel_map_data = {
28 "snap": {
29 "title": "Test Snap",
30 "private": False,
31 "default-track": "latest",
32 "tracks": [{"name": "latest"}],
33 "publisher": {"display-name": "Test Publisher"},
34 },
35 "channel-map": [
36 {"channel": "stable", "revision": 1, "version": "1.0"}
37 ],
38 }
39 mock_snap_channel_map.return_value = mock_channel_map_data
41 response = self.client.get(f"/api/{snap_name}/releases")
42 data = response.get_json()
44 self.assertEqual(response.status_code, 200)
45 self.assertTrue(data["success"])
46 self.assertIn("data", data)
48 context = data["data"]
49 self.assertEqual(context["snap_name"], snap_name)
50 self.assertEqual(context["snap_title"], "Test Snap")
51 self.assertEqual(context["publisher_name"], "Test Publisher")
52 self.assertEqual(context["release_history"], mock_release_history)
53 self.assertFalse(context["private"])
54 self.assertEqual(context["default_track"], "latest")
55 self.assertEqual(
56 context["channel_map"], mock_channel_map_data["channel-map"]
57 )
58 self.assertEqual(
59 context["tracks"], mock_channel_map_data["snap"]["tracks"]
60 )
62 # Verify the dashboard methods were called with correct parameters
63 mock_snap_release_history.assert_called_once()
64 mock_snap_channel_map.assert_called_once()
66 @patch("webapp.endpoints.releases.dashboard.snap_channel_map")
67 @patch("webapp.endpoints.releases.dashboard.snap_release_history")
68 def test_get_release_history_data_default_track_none(
69 self, mock_snap_release_history, mock_snap_channel_map
70 ):
71 """Test that default track defaults to 'latest' when None"""
72 snap_name = "test-snap"
74 mock_snap_release_history.return_value = []
76 # Mock channel map with default-track as None
77 mock_channel_map_data = {
78 "snap": {
79 "title": "Test Snap",
80 "private": False,
81 "default-track": None, # This should default to "latest"
82 "tracks": [],
83 "publisher": {"display-name": "Test Publisher"},
84 },
85 "channel-map": [],
86 }
87 mock_snap_channel_map.return_value = mock_channel_map_data
89 response = self.client.get(f"/api/{snap_name}/releases")
90 data = response.get_json()
92 self.assertEqual(response.status_code, 200)
93 context = data["data"]
94 self.assertEqual(context["default_track"], "latest")
96 @patch("webapp.endpoints.releases.dashboard.snap_channel_map")
97 @patch("webapp.endpoints.releases.dashboard.snap_release_history")
98 def test_get_release_history_data_empty_snap(
99 self, mock_snap_release_history, mock_snap_channel_map
100 ):
101 """Test handling of empty snap data"""
102 snap_name = "test-snap"
104 mock_snap_release_history.return_value = []
106 # Mock channel map with empty snap data
107 mock_channel_map_data = {
108 "snap": {}, # Empty snap data
109 "channel-map": [],
110 }
111 mock_snap_channel_map.return_value = mock_channel_map_data
113 response = self.client.get(f"/api/{snap_name}/releases")
114 data = response.get_json()
116 self.assertEqual(response.status_code, 200)
117 context = data["data"]
118 self.assertEqual(context["snap_name"], snap_name)
119 self.assertIsNone(context["snap_title"])
120 # Empty dict for missing publisher
121 self.assertEqual(context["publisher_name"], {})
122 # Should default to latest
123 self.assertEqual(context["default_track"], "latest")
124 self.assertIsNone(context["private"])
125 self.assertIsNone(context["tracks"])