Coverage for tests/store/tests_public_logic.py : 100%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import unittest
3import datetime
4from freezegun import freeze_time
5import webapp.store.logic as logic
8class StoreLogicTest(unittest.TestCase):
9 # convert_channel_maps
10 # ===
11 def test_empty_channel_map(self):
12 channel_maps_list = []
13 result = logic.convert_channel_maps(channel_maps_list)
15 self.assertEqual(result, {})
17 def test_one_track_channel_map(self):
18 channel_maps_list = [
19 {
20 "channel": {
21 "name": "channel",
22 "architecture": "arch",
23 "track": "track",
24 "risk": "risk",
25 "released-at": "2019-01-12T16:48:41.821037+00:00",
26 },
27 "created-at": "2019-01-12T16:48:41.821037+00:00",
28 "confinement": "confinement",
29 "download": {"size": "size"},
30 "version": "version",
31 }
32 ]
34 result = logic.convert_channel_maps(channel_maps_list)
35 expected_result = {
36 "arch": {
37 "track": [
38 {
39 "channel": "channel",
40 "released-at": "12 January 2019",
41 "confinement": "confinement",
42 "size": "size",
43 "risk": "risk",
44 "version": "version",
45 }
46 ]
47 }
48 }
50 self.assertEqual(result, expected_result)
52 def test_multiple_track_same_arch_channel_map(self):
53 channel_maps_list = [
54 {
55 "channel": {
56 "name": "channel",
57 "architecture": "arch",
58 "track": "track",
59 "risk": "risk",
60 "released-at": "2019-01-12T16:48:41.821037+00:00",
61 },
62 "created-at": "2019-01-12T16:48:41.821037+00:00",
63 "confinement": "confinement",
64 "download": {"size": "size"},
65 "version": "version",
66 },
67 {
68 "channel": {
69 "name": "channel",
70 "architecture": "arch",
71 "track": "track1",
72 "risk": "risk",
73 "released-at": "2019-01-12T16:48:41.821037+00:00",
74 },
75 "created-at": "2019-01-12T16:48:41.821037+00:00",
76 "confinement": "confinement",
77 "download": {"size": "size"},
78 "version": "version",
79 },
80 ]
81 result = logic.convert_channel_maps(channel_maps_list)
82 expected_result = {
83 "arch": {
84 "track": [
85 {
86 "channel": "channel",
87 "released-at": "12 January 2019",
88 "confinement": "confinement",
89 "size": "size",
90 "risk": "risk",
91 "version": "version",
92 }
93 ],
94 "track1": [
95 {
96 "channel": "channel",
97 "released-at": "12 January 2019",
98 "confinement": "confinement",
99 "size": "size",
100 "risk": "risk",
101 "version": "version",
102 }
103 ],
104 }
105 }
107 self.assertEqual(result, expected_result)
109 def test_multiple_track_different_arch_channel_map(self):
110 channel_maps_list = [
111 {
112 "channel": {
113 "name": "channel",
114 "architecture": "arch",
115 "track": "track",
116 "risk": "risk",
117 "released-at": "2019-01-12T16:48:41.821037+00:00",
118 },
119 "created-at": "2019-01-12T16:48:41.821037+00:00",
120 "confinement": "confinement",
121 "download": {"size": "size"},
122 "version": "version",
123 },
124 {
125 "channel": {
126 "name": "channel",
127 "architecture": "arch1",
128 "track": "track",
129 "risk": "risk",
130 "released-at": "2019-01-12T16:48:41.821037+00:00",
131 },
132 "created-at": "2019-01-12T16:48:41.821037+00:00",
133 "confinement": "confinement",
134 "download": {"size": "size"},
135 "version": "version",
136 },
137 ]
139 result = logic.convert_channel_maps(channel_maps_list)
140 expected_result = {
141 "arch": {
142 "track": [
143 {
144 "channel": "channel",
145 "released-at": "12 January 2019",
146 "confinement": "confinement",
147 "size": "size",
148 "risk": "risk",
149 "version": "version",
150 }
151 ]
152 },
153 "arch1": {
154 "track": [
155 {
156 "channel": "channel",
157 "released-at": "12 January 2019",
158 "confinement": "confinement",
159 "size": "size",
160 "risk": "risk",
161 "version": "version",
162 }
163 ]
164 },
165 }
167 self.assertEqual(result, expected_result)
169 def test_get_lowest_available_risk(self):
170 channel_map = {"arch": {"track": [{"risk": "edge"}]}}
171 edge_result = logic.get_lowest_available_risk(channel_map, "track")
172 self.assertEqual(edge_result, "edge")
174 channel_map["arch"]["track"].append({"risk": "beta"})
175 beta_result = logic.get_lowest_available_risk(channel_map, "track")
176 self.assertEqual(beta_result, "beta")
178 channel_map["arch"]["track"].append({"risk": "candidate"})
179 cand_result = logic.get_lowest_available_risk(channel_map, "track")
180 self.assertEqual(cand_result, "candidate")
182 channel_map["arch"]["track"].append({"risk": "stable"})
183 stable_result = logic.get_lowest_available_risk(channel_map, "track")
184 self.assertEqual(stable_result, "stable")
186 # assert that channel_map has been updated successfully
187 self.assertEqual(
188 channel_map,
189 {
190 "arch": {
191 "track": [
192 {"risk": "edge"},
193 {"risk": "beta"},
194 {"risk": "candidate"},
195 {"risk": "stable"},
196 ]
197 }
198 },
199 )
201 def test_get_version(self):
202 channel_map = {
203 "arch": {
204 "track": [
205 {"risk": "edge", "version": "12"},
206 {"risk": "stable", "version": "10"},
207 ]
208 }
209 }
210 edge_version = logic.extract_info_channel_map(
211 channel_map, "track", "edge"
212 )["version"]
213 self.assertEqual(edge_version, "12")
215 stable_version = logic.extract_info_channel_map(
216 channel_map, "track", "stable"
217 )["version"]
218 self.assertEqual(stable_version, "10")
220 def test_get_no_version(self):
221 channel_map = {
222 "arch": {"track": [{"risk": "stable", "version": "10"}]}
223 }
224 no_version = logic.extract_info_channel_map(
225 channel_map, "track", "edge"
226 )["version"]
227 self.assertEqual(no_version, None)
229 def test_get_confinement(self):
230 channel_map = {
231 "arch": {
232 "track": [
233 {"risk": "edge", "confinement": "classic"},
234 {"risk": "stable", "confinement": "strict"},
235 ]
236 }
237 }
238 classic_result = logic.extract_info_channel_map(
239 channel_map, "track", "edge"
240 )["confinement"]
241 self.assertEqual(classic_result, "classic")
243 strict_result = logic.extract_info_channel_map(
244 channel_map, "track", "stable"
245 )["confinement"]
246 self.assertEqual(strict_result, "strict")
248 def test_get_no_confinement(self):
249 channel_map = {
250 "arch": {"track": [{"risk": "stable", "confinement": "strict"}]}
251 }
252 no_version = logic.extract_info_channel_map(
253 channel_map, "track", "edge"
254 )["confinement"]
255 self.assertEqual(no_version, None)
257 def test_get_categories(self):
258 categories = {
259 "categories": [
260 {"name": "featured"},
261 {"name": "test"},
262 {"name": "development"},
263 ]
264 }
265 category_list = logic.get_categories(categories)
266 self.assertTrue(
267 {"name": "Development", "slug": "development"} in category_list
268 )
269 self.assertTrue({"name": "Games", "slug": "games"} in category_list)
270 self.assertTrue({"name": "Test", "slug": "test"} in category_list)
272 def test_get_video_embed_code(self):
273 youtube_url = "https://youtube.com/watch?v=123"
274 embed = logic.get_video_embed_code(youtube_url)
275 self.assertEqual(
276 embed,
277 {
278 "type": "youtube",
279 "url": "https://youtube.com/embed/123",
280 "id": "123",
281 },
282 )
284 youtu_be_url = "https://youtu.be/123"
285 embed = logic.get_video_embed_code(youtu_be_url)
286 self.assertEqual(
287 embed,
288 {
289 "type": "youtube",
290 "url": "https://youtube.com/embed/123",
291 "id": "123",
292 },
293 )
295 vimeo_url = "https://vimeo.com/123123"
296 embed = logic.get_video_embed_code(vimeo_url)
297 self.assertEqual(
298 embed,
299 {
300 "type": "vimeo",
301 "url": "https://player.vimeo.com/video/123123",
302 "id": "123123",
303 },
304 )
306 asciicinema_url = "https://asciinema.org/a/123"
307 embed = logic.get_video_embed_code(asciicinema_url)
308 self.assertEqual(
309 embed,
310 {
311 "type": "asciinema",
312 "url": "https://asciinema.org/a/123.js",
313 "id": "123",
314 },
315 )
317 def test_convert_date_more_than_yesterday(self):
318 date_test = "2019-01-12T16:48:41.821037+00:00"
319 result = logic.convert_date(date_test)
321 self.assertEqual(result, "12 January 2019")
323 def test_convert_date_more_today(self):
324 date_test = datetime.datetime.now().strftime("%Y-%m-%d")
325 result = logic.convert_date(date_test)
327 self.assertEqual(result, "Today")
329 @freeze_time("2021-05-12 10:38:34", tz_offset=-6)
330 def test_convert_date_timezone_yesterday(self):
331 date_test = "2021-05-11T10:48:41.821037-06:00"
332 result = logic.convert_date(date_test)
334 self.assertEqual(result, "Yesterday")
336 def test_get_snap_banner(self):
337 snap_with_banner = {
338 "media": [
339 {"type": "icon", "url": "icon.png"},
340 {"type": "banner", "url": "banner.png"},
341 {"type": "screenshot", "url": "screenshot.png"},
342 ]
343 }
345 result = logic.get_snap_banner_url(snap_with_banner)
347 self.assertEqual(result.get("banner_url"), "banner.png")
349 def test_get_snap_banner_no_banner(self):
350 snap_with_banner = {
351 "media": [
352 {"type": "icon", "url": "icon.png"},
353 {"type": "screenshot", "url": "screenshot.png"},
354 ]
355 }
357 result = logic.get_snap_banner_url(snap_with_banner)
359 self.assertEqual(result.get("banner_url"), None)
361 def test_get_latest_versions(self):
362 latest_stable = {
363 "channel": {
364 "architecture": "amd64",
365 "risk": "stable",
366 "track": "latest",
367 "released-at": "2023-02-02",
368 }
369 }
371 latest_edge = {
372 "channel": {
373 "architecture": "amd64",
374 "risk": "edge",
375 "track": "latest",
376 "released-at": "2023-03-01",
377 }
378 }
380 latest_stable_arm = {
381 "channel": {
382 "architecture": "arm64",
383 "released-at": "2023-01-04",
384 "risk": "candidate",
385 "track": "latest",
386 }
387 }
389 channel_map_single_channel = [latest_stable]
391 channel_map_stable_first = [latest_stable, latest_edge]
393 channel_map_stable_second = [latest_edge, latest_stable]
395 channel_map_multiple_stable_architectures = [
396 latest_edge,
397 latest_stable,
398 latest_stable_arm,
399 ]
401 single_result = logic.get_latest_versions(
402 channel_map_single_channel, "latest", "stable"
403 )
404 self.assertEqual(
405 single_result[0]["released-at-display"], "2 February 2023"
406 )
407 self.assertEqual(single_result[1], None)
409 stable_first_result = logic.get_latest_versions(
410 channel_map_stable_first, "latest", "stable"
411 )
412 self.assertEqual(
413 stable_first_result[0]["released-at-display"], "2 February 2023"
414 )
415 self.assertEqual(
416 stable_first_result[1]["released-at-display"], "1 March 2023"
417 )
419 stable_second_result = logic.get_latest_versions(
420 channel_map_stable_second, "latest", "stable"
421 )
422 self.assertEqual(
423 stable_second_result[0]["released-at-display"], "2 February 2023"
424 )
425 self.assertEqual(
426 stable_second_result[1]["released-at-display"], "1 March 2023"
427 )
429 edge_highest_risk_result = logic.get_latest_versions(
430 channel_map_stable_first, "latest", "edge"
431 )
432 self.assertEqual(
433 edge_highest_risk_result[0]["released-at-display"], "1 March 2023"
434 )
435 self.assertEqual(
436 edge_highest_risk_result[1]["released-at-display"],
437 "2 February 2023",
438 )
440 multiple_stable_channels_results = logic.get_latest_versions(
441 channel_map_multiple_stable_architectures, "latest", "stable"
442 )
444 self.assertEqual(
445 multiple_stable_channels_results[0]["released-at-display"],
446 "2 February 2023",
447 )
448 self.assertEqual(
449 multiple_stable_channels_results[1]["released-at-display"],
450 "1 March 2023",
451 )
453 def test_get_last_updated_versions(self):
454 latest_stable = {
455 "channel": {
456 "risk": "stable",
457 "track": "latest",
458 "released-at": "2023-02-02",
459 }
460 }
462 latest_edge = {
463 "channel": {
464 "risk": "edge",
465 "track": "latest",
466 "released-at": "2023-03-01",
467 }
468 }
470 result = logic.get_last_updated_versions([latest_stable, latest_edge])
472 self.assertEqual(
473 result, [latest_edge["channel"], latest_stable["channel"]]
474 )