Coverage for tests/endpoints/publisher/tests_settings.py: 100%
87 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, Mock
2from tests.endpoints.endpoint_testing import TestEndpoints
5class TestGetSettingsData(TestEndpoints):
6 @patch("webapp.helpers.launchpad.get_snap_by_store_name")
7 @patch("canonicalwebteam.store_api.dashboard.Dashboard.get_snap_info")
8 def test_get_settings_data_success(
9 self, mock_get_snap_info, mock_get_snap_by_store_name
10 ):
11 # Mock the snap details returned by the dashboard
12 mock_snap_details = {
13 "snap_name": "test-snap",
14 "title": "Test Snap",
15 "snap_id": "test-snap-id-123",
16 "publisher": {"display-name": "Test Publisher"},
17 "license": "MIT",
18 "private": False,
19 "unlisted": False,
20 "store": "ubuntu",
21 "keywords": ["test", "snap"],
22 "status": "Published",
23 "update_metadata_on_release": True,
24 "visibility_locked": False,
25 "whitelist_country_codes": ["US", "GB"],
26 "blacklist_country_codes": ["XX"],
27 }
28 mock_get_snap_info.return_value = mock_snap_details
30 # Mock launchpad response
31 mock_lp_snap = Mock()
32 mock_get_snap_by_store_name.return_value = mock_lp_snap
34 # Make the request
35 response = self.client.get("/api/test-snap/settings")
36 data = response.json
38 # Assert response structure
39 self.assertEqual(response.status_code, 200)
40 self.assertTrue(data["success"])
41 self.assertIn("data", data)
43 # Assert data content
44 response_data = data["data"]
45 self.assertEqual(response_data["snap_name"], "test-snap")
46 self.assertEqual(response_data["snap_title"], "Test Snap")
47 self.assertEqual(response_data["snap_id"], "test-snap-id-123")
48 self.assertEqual(response_data["publisher_name"], "Test Publisher")
49 self.assertEqual(response_data["license"], "MIT")
50 self.assertFalse(response_data["private"])
51 self.assertFalse(response_data["unlisted"])
52 self.assertEqual(response_data["store"], "ubuntu")
53 self.assertEqual(response_data["keywords"], ["test", "snap"])
54 self.assertEqual(response_data["status"], "Published")
55 self.assertTrue(response_data["update_metadata_on_release"])
56 self.assertFalse(response_data["visibility_locked"])
57 self.assertTrue(response_data["is_on_lp"])
59 # Assert country codes
60 self.assertEqual(response_data["whitelist_countries"], ["US", "GB"])
61 self.assertEqual(response_data["blacklist_countries"], ["XX"])
63 # Assert countries list is populated
64 self.assertIn("countries", response_data)
65 self.assertIsInstance(response_data["countries"], list)
66 self.assertTrue(len(response_data["countries"]) > 0)
68 # Check that each country has the expected structure
69 country = response_data["countries"][0]
70 self.assertIn("key", country)
71 self.assertIn("name", country)
73 @patch("webapp.helpers.launchpad.get_snap_by_store_name")
74 @patch("canonicalwebteam.store_api.dashboard.Dashboard.get_snap_info")
75 def test_get_settings_data_no_country_codes(
76 self, mock_get_snap_info, mock_get_snap_by_store_name
77 ):
78 # Mock snap details without country codes
79 mock_snap_details = {
80 "snap_name": "test-snap",
81 "title": "Test Snap",
82 "snap_id": "test-snap-id-123",
83 "publisher": {"display-name": "Test Publisher"},
84 "license": "MIT",
85 "private": False,
86 "unlisted": False,
87 "store": "ubuntu",
88 "keywords": ["test", "snap"],
89 "status": "Published",
90 "update_metadata_on_release": True,
91 "visibility_locked": False,
92 }
93 mock_get_snap_info.return_value = mock_snap_details
95 # Mock launchpad response - no snap found
96 mock_get_snap_by_store_name.return_value = None
98 # Make the request
99 response = self.client.get("/api/test-snap/settings")
100 data = response.json
102 # Assert response
103 self.assertEqual(response.status_code, 200)
104 self.assertTrue(data["success"])
106 response_data = data["data"]
107 self.assertEqual(response_data["whitelist_countries"], [])
108 self.assertEqual(response_data["blacklist_countries"], [])
109 self.assertFalse(response_data["is_on_lp"])
111 @patch("webapp.helpers.launchpad.get_snap_by_store_name")
112 @patch("canonicalwebteam.store_api.dashboard.Dashboard.get_snap_info")
113 def test_get_settings_data_empty_country_codes(
114 self, mock_get_snap_info, mock_get_snap_by_store_name
115 ):
116 # Mock snap details with empty country codes
117 mock_snap_details = {
118 "snap_name": "test-snap",
119 "title": "Test Snap",
120 "snap_id": "test-snap-id-123",
121 "publisher": {"display-name": "Test Publisher"},
122 "license": "MIT",
123 "private": False,
124 "unlisted": False,
125 "store": "ubuntu",
126 "keywords": ["test", "snap"],
127 "status": "Published",
128 "update_metadata_on_release": True,
129 "visibility_locked": False,
130 "whitelist_country_codes": [],
131 "blacklist_country_codes": [],
132 }
133 mock_get_snap_info.return_value = mock_snap_details
135 # Mock launchpad response
136 mock_get_snap_by_store_name.return_value = None
138 # Make the request
139 response = self.client.get("/api/test-snap/settings")
140 data = response.json
142 # Assert response
143 self.assertEqual(response.status_code, 200)
144 self.assertTrue(data["success"])
146 response_data = data["data"]
147 self.assertEqual(response_data["whitelist_countries"], [])
148 self.assertEqual(response_data["blacklist_countries"], [])
150 @patch("webapp.helpers.launchpad.get_snap_by_store_name")
151 @patch("canonicalwebteam.store_api.dashboard.Dashboard.get_snap_info")
152 def test_get_settings_data_visibility_locked_true(
153 self, mock_get_snap_info, mock_get_snap_by_store_name
154 ):
155 # Mock snap details with visibility_locked as True
156 mock_snap_details = {
157 "snap_name": "test-snap",
158 "title": "Test Snap",
159 "snap_id": "test-snap-id-123",
160 "publisher": {"display-name": "Test Publisher"},
161 "license": "MIT",
162 "private": False,
163 "unlisted": False,
164 "store": "ubuntu",
165 "keywords": ["test", "snap"],
166 "status": "Published",
167 "update_metadata_on_release": True,
168 "visibility_locked": True,
169 }
170 mock_get_snap_info.return_value = mock_snap_details
171 mock_get_snap_by_store_name.return_value = None
173 # Make the request
174 response = self.client.get("/api/test-snap/settings")
175 data = response.json
177 # Assert response
178 self.assertEqual(response.status_code, 200)
179 self.assertTrue(data["success"])
181 response_data = data["data"]
182 self.assertTrue(response_data["visibility_locked"])
185class TestPostSettingsData(TestEndpoints):
186 @patch("webapp.publisher.snaps.logic.filter_changes_data")
187 @patch("canonicalwebteam.store_api.dashboard.Dashboard.snap_metadata")
188 def test_post_settings_data_success(
189 self, mock_snap_metadata, mock_filter_changes
190 ):
191 # Mock the filtered data
192 mock_filter_changes.return_value = {"title": "Updated Title"}
194 # Mock successful API response
195 mock_response = {"success": True}
196 mock_snap_metadata.return_value = mock_response
198 # Make the request with form data
199 response = self.client.post(
200 "/api/test-snap/settings",
201 data={
202 "snap_id": "test-snap-id-123",
203 "changes": '{"title": "Updated Title"}',
204 },
205 )
207 # Assert response
208 self.assertEqual(response.status_code, 200)
209 data = response.json
210 self.assertEqual(data, mock_response)