Coverage for tests/store/tests_embedded_card.py: 100%
70 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-28 22:05 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-28 22:05 +0000
1import responses
2from urllib.parse import urlencode
3from flask_testing import TestCase
4from webapp.app import create_app
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 }
42 ],
43 }
45 def setUp(self):
46 self.snap_name = "toto"
47 self.api_url = "".join(
48 [
49 "https://api.snapcraft.io/v2/",
50 "snaps/info/",
51 self.snap_name,
52 "?",
53 urlencode(
54 {
55 "fields": ",".join(
56 [
57 "title",
58 "summary",
59 "description",
60 "license",
61 "contact",
62 "website",
63 "publisher",
64 "media",
65 "download",
66 "version",
67 "created-at",
68 "confinement",
69 "categories",
70 "trending",
71 "unlisted",
72 "links",
73 ]
74 )
75 }
76 ),
77 ]
78 )
79 self.endpoint_url = "/" + self.snap_name + "/embedded"
81 def create_app(self):
82 app = create_app(testing=True)
83 app.secret_key = "secret_key"
84 app.config["WTF_CSRF_METHODS"] = []
86 return app
88 @responses.activate
89 def test_api_404(self):
90 payload = {"error-list": []}
91 responses.add(
92 responses.Response(
93 method="GET", url=self.api_url, json=payload, status=404
94 )
95 )
97 response = self.client.get(self.endpoint_url)
99 assert len(responses.calls) == 1
100 called = responses.calls[0]
101 assert called.request.url == self.api_url
103 assert response.status_code == 404
105 @responses.activate
106 def test_api_500(self):
107 payload = {"error-list": []}
108 responses.add(
109 responses.Response(
110 method="GET", url=self.api_url, json=payload, status=500
111 )
112 )
114 response = self.client.get(self.endpoint_url)
116 assert len(responses.calls) == 1
117 called = responses.calls[0]
118 assert called.request.url == self.api_url
120 assert response.status_code == 502
122 @responses.activate
123 def test_api_500_no_answer(self):
124 responses.add(
125 responses.Response(method="GET", url=self.api_url, status=500)
126 )
128 response = self.client.get(self.endpoint_url)
130 assert len(responses.calls) == 1
131 called = responses.calls[0]
132 assert called.request.url == self.api_url
134 assert response.status_code == 502
136 @responses.activate
137 def test_no_channel_map(self):
138 payload = self.snap_payload
139 payload["channel_map"] = None
141 responses.add(
142 responses.Response(
143 method="GET", url=self.api_url, json=payload, status=200
144 )
145 )
147 response = self.client.get(self.endpoint_url)
149 self.assertEqual(response.status_code, 200)
151 @responses.activate
152 def test_get_card(self):
153 payload = self.snap_payload
155 responses.add(
156 responses.Response(
157 method="GET", url=self.api_url, json=payload, status=200
158 )
159 )
161 response = self.client.get(self.endpoint_url)
163 self.assertEqual(response.status_code, 200)
164 self.assert_context("snap_title", "Snap Title")
165 self.assert_context("button", None)
167 @responses.activate
168 def test_get_card_default_button(self):
169 payload = self.snap_payload
171 responses.add(
172 responses.Response(
173 method="GET", url=self.api_url, json=payload, status=200
174 )
175 )
177 response = self.client.get(self.endpoint_url + "?button=test")
179 self.assertEqual(response.status_code, 200)
180 self.assert_context("button", "black")
182 @responses.activate
183 def test_get_card_white_button(self):
184 payload = self.snap_payload
186 responses.add(
187 responses.Response(
188 method="GET", url=self.api_url, json=payload, status=200
189 )
190 )
192 response = self.client.get(self.endpoint_url + "?button=white")
194 self.assertEqual(response.status_code, 200)
195 self.assert_context("button", "white")