Coverage for tests/store/test_store_logic.py: 100%
85 statements
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-08 22:07 +0000
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-08 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 add_overlay_data,
13)
14from mock_data.mock_store_logic import (
15 sample_channel_map,
16 converted_sample_channel_map,
17 sample_libraries,
18 sample_processed_libraries,
19 sample_charm,
20)
23class TestConvertChannelMaps(TestCase):
24 def test_convert_channel_map(self):
25 result = convert_channel_maps(sample_channel_map)
26 self.assertDictEqual(result, converted_sample_channel_map)
29class TestAddStoreFront(TestCase):
30 def test_add_store_front_data(self):
31 result = add_store_front_data(sample_charm)
33 self.assertIn("store_front", result)
35 self.assertIn("icons", result["store_front"])
36 self.assertIn("deployable-on", result["store_front"])
37 self.assertIn("categories", result["store_front"])
38 self.assertIn("display-name", result["store_front"])
41class TestGetBannerUrl(TestCase):
42 def test_banner_url_in_media(self):
43 media = [
44 {"type": "image", "url": "https://example.com/image1.jpg"},
45 {"type": "banner", "url": "https://example.com/banner.jpg"},
46 {"type": "video", "url": "https://example.com/video.mp4"},
47 ]
49 result = get_banner_url(media)
51 self.assertEqual(result, "https://example.com/banner.jpg")
53 def test_banner_url_not_in_media(self):
54 media = [
55 {"type": "image", "url": "https://example.com/image1.jpg"},
56 {"type": "video", "url": "https://example.com/video.mp4"},
57 ]
59 result = get_banner_url(media)
61 self.assertIsNone(result)
63 def test_empty_media_list(self):
64 media = []
66 result = get_banner_url(media)
68 self.assertIsNone(result)
71class TestExtractSeries(TestCase):
72 def test_extract_series_short_name(self):
73 result = extract_series(sample_channel_map[0], long_name=False)
74 expected_result = ["14.04", "12.04"]
75 self.assertListEqual(result, expected_result)
77 def test_extract_series_long_name(self):
78 result = extract_series(sample_channel_map[1], long_name=True)
79 expected_result = ["Ubuntu 20.04", "Ubuntu 18.04"]
80 self.assertListEqual(result, expected_result)
82 def test_extract_series_duplicate_bases(self):
83 result = extract_series(sample_channel_map[1], long_name=False)
84 expected_result = ["20.04", "18.04"]
85 self.assertListEqual(result, expected_result)
88class TestExtractBases(TestCase):
89 def test_extract_bases(self):
90 result = extract_bases(sample_channel_map[0])
91 expected_result = [{"channels": ["14.04", "12.04"], "name": "ubuntu"}]
92 self.assertEqual(result, expected_result)
94 def test_extract_bases_empty_bases(self):
95 channel = {"revision": {"bases": []}}
96 result = extract_bases(channel)
97 self.assertEqual(result, [])
99 def test_extract_bases_duplicate_bases(self):
100 result = extract_bases(sample_channel_map[1])
101 expected_result = [{"channels": ["20.04", "18.04"], "name": "ubuntu"}]
102 self.assertEqual(result, expected_result)
105class TestLibraries(TestCase):
106 def test_process_libraries(self):
107 self.assertListEqual(
108 process_libraries(sample_libraries), sample_processed_libraries
109 )
111 def test_get_library(self):
112 libraries = [
113 {"name": "library1", "id": "lb1"},
114 {"name": "library2", "id": "lb2"},
115 {"name": "library3", "id": "lb3"},
116 {"name": "library4", "id": "lb4"},
117 {"name": "library5", "id": "lb5"},
118 ]
120 self.assertEqual(get_library("library1", libraries), "lb1")
121 self.assertIsNone(get_library("library6", libraries))
124class TestFormatslug(TestCase):
125 def test_format_slug(self):
126 sample_slug1 = "sample-slug1"
127 sample_slug2 = "sample_slug2"
128 sample_slug3 = "sample And slug3"
129 sample_slug4 = "sample Iot slug4"
131 self.assertEqual(format_slug(sample_slug1), "Sample Slug1")
132 self.assertEqual(format_slug(sample_slug2), "Sample Slug2")
133 self.assertEqual(format_slug(sample_slug3), "Sample and Slug3")
134 self.assertEqual(format_slug(sample_slug4), "Sample IoT Slug4")
137class TestProcessRevision(TestCase):
138 def test_process_revision(self):
139 revision = {
140 "bases": [
141 {"architecture": "all", "channel": "12.04", "name": "ubuntu"},
142 {"architecture": "xyz", "channel": "14.04", "name": "ubuntu"},
143 ],
144 "created-at": "2024-06-7",
145 "download": {
146 "hash-sha-256": "qwerty",
147 "url": "some-random-url",
148 "size": 1024,
149 },
150 }
152 processed_revision = {
153 "bases": [
154 {
155 "architecture": "amd64",
156 "channel": "12.04",
157 "name": "ubuntu",
158 },
159 {
160 "architecture": "arm64",
161 "channel": "12.04",
162 "name": "ubuntu",
163 },
164 {
165 "architecture": "ppc64el",
166 "channel": "12.04",
167 "name": "ubuntu",
168 },
169 {
170 "architecture": "riscv64",
171 "channel": "12.04",
172 "name": "ubuntu",
173 },
174 {
175 "architecture": "s390x",
176 "channel": "12.04",
177 "name": "ubuntu",
178 },
179 {"architecture": "xyz", "channel": "14.04", "name": "ubuntu"},
180 ],
181 "created-at": "2024-06-7",
182 "download": {
183 "hash-sha-256": "qwerty",
184 "url": "some-random-url",
185 "size": 1024,
186 },
187 }
189 self.assertEqual(process_revision(revision), processed_revision)
192class TestAddOverlayData(TestCase):
193 def test_add_overlay_data(self):
194 package = {"name": "postgresql-k8s", "other": "test data"}
195 result = add_overlay_data(package)
196 self.assertEqual(
197 {"juju_cmd_extra_flags": "--trust"}, result["overlay_data"]
198 )
200 def test_overlay_data_not_needed(self):
201 package = {"name": "no-data", "other": "test data"}
202 result = add_overlay_data(package)
203 self.assertEqual(package, result)