Coverage for tests/store/tests_embedded_card.py: 100%
71 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 22:08 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 22:08 +0000
1import responses
2from urllib.parse import urlencode
3from webapp.app import create_app
4from flask_testing import TestCase
7class GetEmbeddedCardTest(TestCase):
8 snap_payload = {
9 "snap-id": "id",
10 "name": "snapName",
11 "default-track": None,
12 "snap": {
13 "title": "Snap Title",
14 "summary": "This is a summary",
15 "description": "this is a description",
16 "media": [],
17 "license": "license",
18 "publisher": {
19 "display-name": "Toto",
20 "username": "toto",
21 "validation": True,
22 },
23 "categories": [{"name": "test"}],
24 "trending": False,
25 "unlisted": False,
26 "links": {},
27 },
28 "channel-map": [
29 {
30 "channel": {
31 "architecture": "amd64",
32 "name": "stable",
33 "risk": "stable",
34 "track": "latest",
35 "released-at": "2018-09-18T14:45:28.064633+00:00",
36 },
37 "created-at": "2018-09-18T14:45:28.064633+00:00",
38 "version": "1.0",
39 "confinement": "conf",
40 "download": {"size": 100000},
41 "revision": 1,
42 }
43 ],
44 }
46 def setUp(self):
47 super().setUp()
48 self.snap_name = "toto"
49 self.api_url = "".join(
50 [
51 "https://api.snapcraft.io/v2/",
52 "snaps/info/",
53 self.snap_name,
54 "?",
55 urlencode(
56 {
57 "fields": ",".join(
58 [
59 "title",
60 "summary",
61 "description",
62 "license",
63 "contact",
64 "website",
65 "publisher",
66 "media",
67 "download",
68 "version",
69 "created-at",
70 "confinement",
71 "categories",
72 "trending",
73 "unlisted",
74 "links",
75 "revision",
76 "sboms",
77 ]
78 )
79 }
80 ),
81 ]
82 )
83 self.endpoint_url = "/" + self.snap_name + "/embedded"
85 def create_app(self):
86 app = create_app(testing=True)
87 app.secret_key = "secret_key"
88 app.config["WTF_CSRF_METHODS"] = []
90 return app
92 @responses.activate
93 def test_api_404(self):
94 payload = {"error-list": []}
95 responses.add(
96 responses.Response(
97 method="GET", url=self.api_url, json=payload, status=404
98 )
99 )
101 response = self.client.get(self.endpoint_url)
103 assert len(responses.calls) == 1
104 called = responses.calls[0]
105 assert called.request.url == self.api_url
107 assert response.status_code == 404
109 @responses.activate
110 def test_api_500(self):
111 payload = {"error-list": []}
112 responses.add(
113 responses.Response(
114 method="GET", url=self.api_url, json=payload, status=500
115 )
116 )
118 response = self.client.get(self.endpoint_url)
120 assert len(responses.calls) == 1
121 called = responses.calls[0]
122 assert called.request.url == self.api_url
124 assert response.status_code == 502
126 @responses.activate
127 def test_api_500_no_answer(self):
128 responses.add(
129 responses.Response(method="GET", url=self.api_url, status=500)
130 )
132 response = self.client.get(self.endpoint_url)
134 assert len(responses.calls) == 1
135 called = responses.calls[0]
136 assert called.request.url == self.api_url
138 assert response.status_code == 502
140 @responses.activate
141 def test_no_channel_map(self):
142 payload = self.snap_payload
143 payload["channel_map"] = None
145 responses.add(
146 responses.Response(
147 method="GET", url=self.api_url, json=payload, status=200
148 )
149 )
151 response = self.client.get(self.endpoint_url)
153 self.assertEqual(response.status_code, 200)
155 @responses.activate
156 def test_get_card(self):
157 payload = self.snap_payload
159 responses.add(
160 responses.Response(
161 method="GET", url=self.api_url, json=payload, status=200
162 )
163 )
165 response = self.client.get(self.endpoint_url)
167 self.assertEqual(response.status_code, 200)
168 self.assert_context("snap_title", "Snap Title")
169 self.assert_context("button", None)
171 @responses.activate
172 def test_get_card_default_button(self):
173 payload = self.snap_payload
175 responses.add(
176 responses.Response(
177 method="GET", url=self.api_url, json=payload, status=200
178 )
179 )
181 response = self.client.get(self.endpoint_url + "?button=test")
183 self.assertEqual(response.status_code, 200)
184 self.assert_context("button", "black")
186 @responses.activate
187 def test_get_card_white_button(self):
188 payload = self.snap_payload
190 responses.add(
191 responses.Response(
192 method="GET", url=self.api_url, json=payload, status=200
193 )
194 )
196 response = self.client.get(self.endpoint_url + "?button=white")
198 self.assertEqual(response.status_code, 200)
199 self.assert_context("button", "white")