Coverage for tests/publisher/tests_get_package_metadata.py: 42%
45 statements
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-05 22:06 +0000
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-05 22:06 +0000
1import responses
2from unittest.mock import patch
3from tests.publisher.endpoint_testing import BaseTestCases
4from canonicalwebteam.exceptions import (
5 StoreApiResourceNotFound,
6 StoreApiResponseErrorList,
7 StoreApiError,
8)
10# Make sure tests fail on stray responses.
11responses.mock.assert_all_requests_are_fired = True
14class TestGetPackageMetadata(BaseTestCases):
15 def setUp(self):
16 super().setUp()
18 @responses.activate
19 @patch(
20 "canonicalwebteam.store_api.publishergw."
21 "PublisherGW.get_package_metadata"
22 )
23 def test_get_package_metadata(self, mock_get_package_metadata):
24 # testing for track guardrails
25 mock_metadata = {
26 "track-guardrails": {
27 "created-at": "2024-03-26T11:54:50.062999",
28 "pattern": "^v\\.[0-9]+",
29 }
30 }
31 mock_get_package_metadata.return_value = mock_metadata
33 self.client.set_session_data(
34 {"publisher": {"nickname": "test_username"}}
35 )
37 snap_name = "test_snap"
38 api_response = {"metadata": mock_metadata}
39 responses.add(
40 responses.GET,
41 f"https://api.charmhub.io/v1/snap/{snap_name}",
42 json=api_response,
43 status=200,
44 )
46 response = self.client.get(f"/api/packages/{snap_name}")
48 self.assertEqual(response.status_code, 200)
49 self.assertEqual(
50 response.json,
51 {"data": mock_metadata, "success": True},
52 )
53 mock_get_package_metadata.assert_called_once_with(
54 self.client.session,
55 "snap",
56 snap_name,
57 )
59 @responses.activate
60 @patch(
61 "canonicalwebteam.store_api.publishergw."
62 "PublisherGW.get_package_metadata"
63 )
64 def test_package_not_found(self, mock_get_package_metadata):
65 mock_get_package_metadata.side_effect = StoreApiResourceNotFound()
67 self.client.set_session_data(
68 {"publisher": {"nickname": "test_username"}}
69 )
71 response = self.client.get("/api/packages/test_snap")
73 self.assertEqual(response.status_code, 400)
74 self.assertEqual(
75 response.json,
76 {"error": "Package not found", "success": False},
77 )
79 @responses.activate
80 @patch(
81 "canonicalwebteam.store_api.publishergw."
82 "PublisherGW.get_package_metadata"
83 )
84 def test_api_error_with_list(self, mock_get_package_metadata):
85 mock_get_package_metadata.side_effect = StoreApiResponseErrorList(
86 "The api returned a list of errors",
87 403,
88 [
89 {
90 "code": "error-code-1",
91 "message": "error 1",
92 },
93 {
94 "code": "error-code-2",
95 "message": "error 2",
96 },
97 ],
98 )
100 self.client.set_session_data(
101 {"publisher": {"nickname": "test_username"}}
102 )
104 response = self.client.get("/api/packages/test_snap")
105 self.assertEqual(response.status_code, 403)
106 self.assertEqual(
107 response.json,
108 {
109 "error": "Error occurred while fetching snap metadata.",
110 "errors": [
111 {
112 "code": "error-code-1",
113 "message": "error 1",
114 },
115 {
116 "code": "error-code-2",
117 "message": "error 2",
118 },
119 ],
120 "success": False,
121 },
122 )
124 @responses.activate
125 @patch(
126 "canonicalwebteam.store_api.publishergw."
127 "PublisherGW.get_package_metadata"
128 )
129 def test_api_error(self, mock_get_package_metadata):
130 mock_get_package_metadata.side_effect = StoreApiError()
132 self.client.set_session_data(
133 {"publisher": {"nickname": "test_username"}}
134 )
136 response = self.client.get("/api/packages/test_snap")
137 self.assertEqual(response.status_code, 403)
138 self.assertEqual(
139 response.json,
140 {
141 "error": "Error occurred while fetching snap metadata.",
142 "success": False,
143 },
144 )