Coverage for tests/store/tests_distro_page.py: 100%
46 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 GetDistroPageTest(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.featured_snaps_api_url = "".join(
84 [
85 "https://api.snapcraft.io/api/v1/",
86 "snaps/search",
87 "?",
88 urlencode(
89 {
90 "q": "",
91 "size": "13",
92 "page": "1",
93 "scope": "wide",
94 "confinement": "strict,classic",
95 "fields": "package_name,title,summary,"
96 "architecture,media,developer_name,developer_id,"
97 "developer_validation,origin,apps,sections",
98 "arch": "wide",
99 "section": "featured",
100 }
101 ),
102 ]
103 )
104 self.endpoint_url = "/install/" + self.snap_name + "/debian"
106 def create_app(self):
107 app = create_app(testing=True)
108 app.secret_key = "secret_key"
109 app.config["WTF_CSRF_METHODS"] = []
111 return app
113 @responses.activate
114 def test_api_404(self):
115 payload = {"error-list": []}
116 responses.add(
117 responses.Response(
118 method="GET", url=self.api_url, json=payload, status=404
119 )
120 )
122 response = self.client.get(self.endpoint_url)
124 self.assertEqual(len(responses.calls), 1)
125 called = responses.calls[0]
126 self.assertEqual(called.request.url, self.api_url)
128 self.assert404(response)
130 @responses.activate
131 def test_api_500(self):
132 payload = {"error-list": []}
133 responses.add(
134 responses.Response(
135 method="GET", url=self.api_url, json=payload, status=500
136 )
137 )
139 response = self.client.get(self.endpoint_url)
141 self.assertEqual(len(responses.calls), 1)
142 called = responses.calls[0]
143 self.assertEqual(called.request.url, self.api_url)
145 self.assertStatus(response, 502)
147 def test_no_distro_data(self):
148 response = self.client.get("/install/" + self.snap_name + "/noname")
150 self.assert404(response)
152 @responses.activate
153 def test_get_page(self):
154 payload = self.snap_payload
156 responses.add(
157 responses.Response(
158 method="GET", url=self.api_url, json=payload, status=200
159 )
160 )
162 responses.add(
163 responses.Response(
164 method="GET",
165 url=self.featured_snaps_api_url,
166 json={},
167 status=200,
168 )
169 )
171 response = self.client.get(self.endpoint_url)
173 self.assert200(response)
174 self.assert_context("snap_title", "Snap Title")