|
3 | 3 | # vim: ai ts=4 sts=4 et sw=4 nu
|
4 | 4 |
|
5 | 5 | import pathlib
|
| 6 | +from typing import Optional |
6 | 7 |
|
7 | 8 | import pytest
|
8 | 9 |
|
9 |
| -from zimscraperlib.inputs import handle_user_provided_file |
| 10 | +from zimscraperlib.constants import ( |
| 11 | + MAXIMUM_DESCRIPTION_METADATA_LENGTH as MAX_DESC_LENGTH, |
| 12 | +) |
| 13 | +from zimscraperlib.constants import ( |
| 14 | + MAXIMUM_LONG_DESCRIPTION_METADATA_LENGTH as MAX_LONG_DESC_LENGTH, |
| 15 | +) |
| 16 | +from zimscraperlib.inputs import compute_descriptions, handle_user_provided_file |
10 | 17 |
|
11 | 18 |
|
12 | 19 | def test_with_none():
|
@@ -72,3 +79,169 @@ def test_remote_indir(tmp_path, valid_http_url):
|
72 | 79 | assert fpath is not None
|
73 | 80 | assert fpath.exists()
|
74 | 81 | assert fpath.parent == tmp_path
|
| 82 | + |
| 83 | + |
| 84 | +TEXT_NOT_USED = "text not used" |
| 85 | + |
| 86 | +LONG_TEXT = ( |
| 87 | + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor " |
| 88 | + "incididunt ut labore et dolore magna aliqua. At erat pellentesque adipiscing " |
| 89 | + "commodo elit at imperdiet. Rutrum tellus pellentesque eu tincidunt tortor aliquam" |
| 90 | + " nulla facilisi. Eget lorem dolor sed viverra ipsum nunc. Ipsum nunc aliquet " |
| 91 | + "bibendum enim facilisis gravida neque convallis. Aliquam malesuada bibendum arcu " |
| 92 | + "vitae elementum curabitur. Platea dictumst quisque sagittis purus sit amet " |
| 93 | + "volutpat. Blandit libero volutpat sed cras ornare. In eu mi bibendum neque " |
| 94 | + "egestas. Egestas dui id ornare arcu odio. Pulvinar neque laoreet suspendisse " |
| 95 | + "interdum. Fames ac turpis egestas integer eget aliquet nibh praesent tristique. Et" |
| 96 | + " egestas quis ipsum suspendisse ultrices gravida dictum fusce. Malesuada fames ac " |
| 97 | + "turpis egestas. Tincidunt nunc pulvinar sapien et ligula ullamcorper malesuada " |
| 98 | + "proin libero. In arcu cursus euismod quis viverra. Faucibus in ornare quam viverra" |
| 99 | + ". Curabitur vitae nunc sed velit dignissim sodales ut eu sem. Velit scelerisque in" |
| 100 | + " dictum non consectetur a erat nam. Proin fermentum leo vel orci porta non. Fames" |
| 101 | + " ac turpis egestas sed tempus. Vitae justo eget magna fermentum iaculis eu non. " |
| 102 | + "Imperdiet massa tincidunt nunc pulvinar sapien et ligula. Laoreet sit amet cursus " |
| 103 | + "sit amet dictum sit amet. Quis hendrerit dolor magna eget. Orci ac auctor augue " |
| 104 | + "mauris augue. Consequat interdum varius sit amet mattis. At ultrices mi tempus " |
| 105 | + "imperdiet nulla malesuada pellentesque elit. Volutpat est velit egestas dui. " |
| 106 | + "Potenti nullam ac tortor vitae. At tempor commodo ullamcorper a lacus vestibulum " |
| 107 | + "sed arcu non. Duis ut diam quam nulla. Vestibulum mattis ullamcorper velit sed " |
| 108 | + "ullamcorper. Sit amet commodo nulla facilisi nullam vehicula. Faucibus purus in " |
| 109 | + "massa tempor nec feugiat. Sem fringilla ut morbi tincidunt augue interdum velit. " |
| 110 | + "Etiam dignissim diam quis enim lobortis scelerisque fermentum dui. Nunc vel risus " |
| 111 | + "commodo viverra maecenas accumsan. Aenean sed adipiscing diam donec adipiscing " |
| 112 | + "tristique. Maecenas accumsan lacus vel facilisis volutpat est velit egestas. Nulla" |
| 113 | + " aliquet porttitor lacus luctus accumsan tortor posuere ac. Habitant morbi " |
| 114 | + "tristique senectus et netus et. Eget mi proin sed libero enim sed faucibus turpis " |
| 115 | + "in. Vulputate enim nulla aliquet porttitor lacus. Dui ut ornare lectus sit amet " |
| 116 | + "est. Quam lacus suspendisse faucibus interdum posuere. Sagittis orci a scelerisque" |
| 117 | + " purus semper eget duis at tellus. Tellus molestie nunc non blandit massa. Feugiat" |
| 118 | + " vivamus at augue eget arcu dictum varius duis at. Varius morbi enim nunc faucibus" |
| 119 | + " a pellentesque sit. Id aliquet lectus proin nibh nisl condimentum id venenatis a." |
| 120 | + " Tortor dignissim convallis aenean et tortor at risus viverra adipiscing. Aliquam " |
| 121 | + "malesuada bibendum arcu vitae elementum curabitur vitae nunc sed. Habitasse platea" |
| 122 | + " dictumst quisque sagittis purus sit amet volutpat. Vitae auctor eu augue ut " |
| 123 | + "lectus. At varius vel pharetra vel turpis nunc eget. Dictum at tempor commodo " |
| 124 | + "ullamcorper a lacus vestibulum sed arcu. Pellentesque massa placerat duis " |
| 125 | + "ultricies. Enim nunc faucibus a pellentesque sit amet porttitor eget dolor. " |
| 126 | + "Volutpat blandit aliquam etiam erat velit scelerisque in. Amet mattis vulputate " |
| 127 | + "enim nulla aliquet porttitor. Egestas maecenas pharetra convallis posuere morbi " |
| 128 | + "leo urna molestie. Duis ut diam quam nulla porttitor massa id. In fermentum " |
| 129 | + "posuere urna nec tincidunt praesent. Turpis egestas sed tempus urna et pharetra " |
| 130 | + "pharetra massa. Tellus molestie nunc non blandit massa. Diam phasellus vestibulum " |
| 131 | + "lorem sed risus ultricies. Egestas erat imperdiet sed euismod nisi porta lorem. " |
| 132 | + "Quam viverra orci sagittis eu volutpat odio facilisis mauris sit. Ornare aenean " |
| 133 | + "euismod elementum nisi quis. Laoreet non curabitur gravida arcu ac tortor " |
| 134 | + "dignissim convallis aenean. Sagittis aliquam malesuada bibendum arcu vitae " |
| 135 | + "elementum. Sed blandit libero volutpat sed cras ornare. Sagittis eu volutpat odio " |
| 136 | + "facilisis mauris. Facilisis volutpat est velit egestas dui id ornare arcu odio. " |
| 137 | + "Eu feugiat pretium nibh." |
| 138 | +) |
| 139 | + |
| 140 | + |
| 141 | +@pytest.mark.parametrize( |
| 142 | + "user_description, user_long_description, default_description, raises, " |
| 143 | + "expected_description, expected_long_description", |
| 144 | + [ |
| 145 | + # user description set and is short, user long descripion not set, default |
| 146 | + # description doe not matter |
| 147 | + ( |
| 148 | + LONG_TEXT[0:MAX_DESC_LENGTH], |
| 149 | + None, |
| 150 | + TEXT_NOT_USED, |
| 151 | + False, |
| 152 | + LONG_TEXT[0:MAX_DESC_LENGTH], |
| 153 | + None, |
| 154 | + ), |
| 155 | + # user description set and is too long, default description does not matter |
| 156 | + (LONG_TEXT[0 : MAX_DESC_LENGTH + 1], None, TEXT_NOT_USED, True, None, None), |
| 157 | + # user description not set and default description is short enough |
| 158 | + ( |
| 159 | + None, |
| 160 | + None, |
| 161 | + LONG_TEXT[0:MAX_DESC_LENGTH], |
| 162 | + False, |
| 163 | + LONG_TEXT[0:MAX_DESC_LENGTH], |
| 164 | + None, |
| 165 | + ), |
| 166 | + # user description not set and default description is too long for description |
| 167 | + # but ok for long description |
| 168 | + ( |
| 169 | + None, |
| 170 | + None, |
| 171 | + LONG_TEXT[0 : MAX_DESC_LENGTH + 1], |
| 172 | + False, |
| 173 | + LONG_TEXT[0 : MAX_DESC_LENGTH - 1] + "…", |
| 174 | + LONG_TEXT[0 : MAX_DESC_LENGTH + 1], |
| 175 | + ), |
| 176 | + ( |
| 177 | + None, |
| 178 | + None, |
| 179 | + LONG_TEXT[0:MAX_LONG_DESC_LENGTH], |
| 180 | + False, |
| 181 | + LONG_TEXT[0 : MAX_DESC_LENGTH - 1] + "…", |
| 182 | + LONG_TEXT[0:MAX_LONG_DESC_LENGTH], |
| 183 | + ), |
| 184 | + # user description not set and default description is too long for description |
| 185 | + # and long description |
| 186 | + ( |
| 187 | + None, |
| 188 | + None, |
| 189 | + LONG_TEXT[0 : MAX_LONG_DESC_LENGTH + 1], |
| 190 | + False, |
| 191 | + LONG_TEXT[0 : MAX_DESC_LENGTH - 1] + "…", |
| 192 | + LONG_TEXT[0 : MAX_LONG_DESC_LENGTH - 1] + "…", |
| 193 | + ), |
| 194 | + # user description set and is short, user long descripion set and is short, |
| 195 | + # default description does not matter |
| 196 | + ( |
| 197 | + LONG_TEXT[0:MAX_DESC_LENGTH], |
| 198 | + LONG_TEXT[0:MAX_LONG_DESC_LENGTH], |
| 199 | + TEXT_NOT_USED, |
| 200 | + False, |
| 201 | + LONG_TEXT[0:MAX_DESC_LENGTH], |
| 202 | + LONG_TEXT[0:MAX_LONG_DESC_LENGTH], |
| 203 | + ), |
| 204 | + # user description set and is short, user long descripion set and is too long, |
| 205 | + # default description does not matter |
| 206 | + ( |
| 207 | + LONG_TEXT[0:MAX_DESC_LENGTH], |
| 208 | + LONG_TEXT[0 : MAX_LONG_DESC_LENGTH + 1], |
| 209 | + TEXT_NOT_USED, |
| 210 | + True, |
| 211 | + None, |
| 212 | + None, |
| 213 | + ), |
| 214 | + # user description not set, user long descripion set and is short, |
| 215 | + # default description set to something different than long desc |
| 216 | + ( |
| 217 | + None, |
| 218 | + LONG_TEXT[0:MAX_LONG_DESC_LENGTH], |
| 219 | + LONG_TEXT[10:MAX_LONG_DESC_LENGTH], |
| 220 | + False, |
| 221 | + LONG_TEXT[10 : MAX_DESC_LENGTH + 9] + "…", |
| 222 | + LONG_TEXT[0:MAX_LONG_DESC_LENGTH], |
| 223 | + ), |
| 224 | + ], |
| 225 | +) |
| 226 | +def test_description( |
| 227 | + user_description: str, |
| 228 | + user_long_description: Optional[str], |
| 229 | + default_description: str, |
| 230 | + *, |
| 231 | + raises: bool, |
| 232 | + expected_description: str, |
| 233 | + expected_long_description: str, |
| 234 | +): |
| 235 | + if raises: |
| 236 | + with pytest.raises(ValueError): |
| 237 | + compute_descriptions( |
| 238 | + default_description, user_description, user_long_description |
| 239 | + ) |
| 240 | + return |
| 241 | + else: |
| 242 | + (description, long_description) = compute_descriptions( |
| 243 | + default_description, user_description, user_long_description |
| 244 | + ) |
| 245 | + |
| 246 | + assert description == expected_description |
| 247 | + assert long_description == expected_long_description |
0 commit comments