Coverage for tests / store / tests_distro_page.py: 100%
46 statements
« prev ^ index » next coverage.py v7.13.1, created at 2025-12-29 22:06 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2025-12-29 22:06 +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 ]
77 )
78 }
79 ),
80 ]
81 )
82 self.featured_snaps_api_url = "".join(
83 [
84 "https://api.snapcraft.io/api/v1/",
85 "snaps/search",
86 "?",
87 urlencode(
88 {
89 "q": "",
90 "size": "13",
91 "page": "1",
92 "scope": "wide",
93 "confinement": "strict,classic",
94 "fields": "package_name,title,summary,"
95 "architecture,media,developer_name,developer_id,"
96 "developer_validation,origin,apps,sections",
97 "arch": "wide",
98 "section": "featured",
99 }
100 ),
101 ]
102 )
103 self.endpoint_url = "/install/" + self.snap_name + "/debian"
105 def create_app(self):
106 app = create_app(testing=True)
107 app.secret_key = "secret_key"
108 app.config["WTF_CSRF_METHODS"] = []
110 return app
112 @responses.activate
113 def test_api_404(self):
114 payload = {"error-list": []}
115 responses.add(
116 responses.Response(
117 method="GET", url=self.api_url, json=payload, status=404
118 )
119 )
121 response = self.client.get(self.endpoint_url)
123 self.assertEqual(len(responses.calls), 1)
124 called = responses.calls[0]
125 self.assertEqual(called.request.url, self.api_url)
127 self.assert404(response)
129 @responses.activate
130 def test_api_500(self):
131 payload = {"error-list": []}
132 responses.add(
133 responses.Response(
134 method="GET", url=self.api_url, json=payload, status=500
135 )
136 )
138 response = self.client.get(self.endpoint_url)
140 self.assertEqual(len(responses.calls), 1)
141 called = responses.calls[0]
142 self.assertEqual(called.request.url, self.api_url)
144 self.assertStatus(response, 502)
146 def test_no_distro_data(self):
147 response = self.client.get("/install/" + self.snap_name + "/noname")
149 self.assert404(response)
151 @responses.activate
152 def test_get_page(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 responses.add(
162 responses.Response(
163 method="GET",
164 url=self.featured_snaps_api_url,
165 json={},
166 status=200,
167 )
168 )
170 response = self.client.get(self.endpoint_url)
172 self.assert200(response)
173 self.assert_context("snap_title", "Snap Title")