Coverage for tests/store/test_store_logic.py: 100%
76 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-27 22:07 +0000
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-27 22:07 +0000
1from unittest import TestCase
2from webapp.store.logic import (
3 convert_channel_maps,
4 extract_series,
5 extract_bases,
6 format_slug,
7 get_banner_url,
8 get_library,
9 process_libraries,
10 add_store_front_data,
11 process_revision,
12)
13from mock_data.mock_store_logic import (
14 sample_channel_map,
15 converted_sample_channel_map,
16 sample_libraries,
17 sample_processed_libraries,
18 sample_charm,
19)
22class TestConvertChannelMaps(TestCase):
23 def test_convert_channel_map(self):
24 result = convert_channel_maps(sample_channel_map)
25 self.assertDictEqual(result, converted_sample_channel_map)
28class TestAddStoreFront(TestCase):
29 def test_add_store_front_data(self):
30 result = add_store_front_data(sample_charm)
32 self.assertIn("store_front", result)
34 self.assertIn("icons", result["store_front"])
35 self.assertIn("deployable-on", result["store_front"])
36 self.assertIn("categories", result["store_front"])
37 self.assertIn("display-name", result["store_front"])
40class TestGetBannerUrl(TestCase):
41 def test_banner_url_in_media(self):
42 media = [
43 {"type": "image", "url": "https://example.com/image1.jpg"},
44 {"type": "banner", "url": "https://example.com/banner.jpg"},
45 {"type": "video", "url": "https://example.com/video.mp4"},
46 ]
48 result = get_banner_url(media)
50 self.assertEqual(result, "https://example.com/banner.jpg")
52 def test_banner_url_not_in_media(self):
53 media = [
54 {"type": "image", "url": "https://example.com/image1.jpg"},
55 {"type": "video", "url": "https://example.com/video.mp4"},
56 ]
58 result = get_banner_url(media)
60 self.assertIsNone(result)
62 def test_empty_media_list(self):
63 media = []
65 result = get_banner_url(media)
67 self.assertIsNone(result)
70class TestExtractSeries(TestCase):
71 def test_extract_series_short_name(self):
72 result = extract_series(sample_channel_map[0], long_name=False)
73 expected_result = ["14.04", "12.04"]
74 self.assertListEqual(result, expected_result)
76 def test_extract_series_long_name(self):
77 result = extract_series(sample_channel_map[1], long_name=True)
78 expected_result = ["Ubuntu 20.04", "Ubuntu 18.04"]
79 self.assertListEqual(result, expected_result)
81 def test_extract_series_duplicate_bases(self):
82 result = extract_series(sample_channel_map[1], long_name=False)
83 expected_result = ["20.04", "18.04"]
84 self.assertListEqual(result, expected_result)
87class TestExtractBases(TestCase):
88 def test_extract_bases(self):
89 result = extract_bases(sample_channel_map[0])
90 expected_result = [{"channels": ["14.04", "12.04"], "name": "ubuntu"}]
91 self.assertEqual(result, expected_result)
93 def test_extract_bases_empty_bases(self):
94 channel = {"revision": {"bases": []}}
95 result = extract_bases(channel)
96 self.assertEqual(result, [])
98 def test_extract_bases_duplicate_bases(self):
99 result = extract_bases(sample_channel_map[1])
100 expected_result = [{"channels": ["20.04", "18.04"], "name": "ubuntu"}]
101 self.assertEqual(result, expected_result)
104class TestLibraries(TestCase):
105 def test_process_libraries(self):
106 self.assertListEqual(
107 process_libraries(sample_libraries), sample_processed_libraries
108 )
110 def test_get_library(self):
111 libraries = [
112 {"name": "library1", "id": "lb1"},
113 {"name": "library2", "id": "lb2"},
114 {"name": "library3", "id": "lb3"},
115 {"name": "library4", "id": "lb4"},
116 {"name": "library5", "id": "lb5"},
117 ]
119 self.assertEqual(get_library("library1", libraries), "lb1")
120 self.assertIsNone(get_library("library6", libraries))
123class TestFormatslug(TestCase):
124 def test_format_slug(self):
125 sample_slug1 = "sample-slug1"
126 sample_slug2 = "sample_slug2"
127 sample_slug3 = "sample And slug3"
128 sample_slug4 = "sample Iot slug4"
130 self.assertEqual(format_slug(sample_slug1), "Sample Slug1")
131 self.assertEqual(format_slug(sample_slug2), "Sample Slug2")
132 self.assertEqual(format_slug(sample_slug3), "Sample and Slug3")
133 self.assertEqual(format_slug(sample_slug4), "Sample IoT Slug4")
136class TestProcessRevision(TestCase):
137 def test_process_revision(self):
138 revision = {
139 "bases": [
140 {"architecture": "all", "channel": "12.04", "name": "ubuntu"},
141 {"architecture": "xyz", "channel": "14.04", "name": "ubuntu"},
142 ],
143 "created-at": "2024-06-7",
144 "download": {
145 "hash-sha-256": "qwerty",
146 "url": "some-random-url",
147 "size": 1024,
148 },
149 }
151 processed_revision = {
152 "bases": [
153 {
154 "architecture": "amd64",
155 "channel": "12.04",
156 "name": "ubuntu",
157 },
158 {
159 "architecture": "arm64",
160 "channel": "12.04",
161 "name": "ubuntu",
162 },
163 {
164 "architecture": "ppc64el",
165 "channel": "12.04",
166 "name": "ubuntu",
167 },
168 {
169 "architecture": "riscv64",
170 "channel": "12.04",
171 "name": "ubuntu",
172 },
173 {
174 "architecture": "s390x",
175 "channel": "12.04",
176 "name": "ubuntu",
177 },
178 {"architecture": "xyz", "channel": "14.04", "name": "ubuntu"},
179 ],
180 "created-at": "2024-06-7",
181 "download": {
182 "hash-sha-256": "qwerty",
183 "url": "some-random-url",
184 "size": 1024,
185 },
186 }
188 self.assertEqual(process_revision(revision), processed_revision)