4 import mwparserfromhell
5 import wrpylib.wrvalidators
6 import wrpylib.wrmwmarkup
7 from wrpylib.wrvalidators import LonLat
8 from wrpylib.wrmwmarkup import sledrun_from_rodelbahnbox, sledrun_to_rodelbahnbox, \
9 inn_from_gasthausbox, inn_to_gasthausbox, lonlat_ele_from_template, latlon_ele_to_template, create_sledrun_wiki
12 class TestSledrun(unittest.TestCase):
13 def test_sledrun_from_rodelbahnbox(self):
16 rodelbahnbox = collections.OrderedDict([
17 ('Position', LonLat(9.986508, 47.30982)),
18 ('Position oben', None),
20 ('Position unten', LonLat(8.506047, 46.20210)),
25 ('Betreiber', 'SchneeFunFit'),
26 ('Öffentliche Anreise', 2),
27 ('Aufstieg möglich', True),
28 ('Aufstieg getrennt', (0.0, None)),
30 ('Aufstiegshilfe', [('Sessellift', 'gratis'), ('Bus', None)]),
31 ('Beleuchtungsanlage', (0.0, 'in Planung für 2020')),
32 ('Beleuchtungstage', (None, None)),
35 ('Webauskunft', (True, 'http://example.com/schneelage')),
36 ('Telefonauskunft', [('+43-664-1808482', 'Bergkristallhütte')]),
37 ('Bild', 'Rodelbahn Bergkristallhütte 2009-03-03.jpg'),
38 ('In Übersichtskarte', True),
41 sledrun_from_rodelbahnbox(rodelbahnbox, sledrun)
42 self.assertEqual(47.30982, sledrun.position_latitude)
43 self.assertEqual(9.986508, sledrun.position_longitude)
44 self.assertEqual(None, sledrun.top_latitude)
45 self.assertEqual(None, sledrun.top_longitude)
46 self.assertEqual(1244, sledrun.top_elevation)
47 self.assertEqual(46.20210, sledrun.bottom_latitude)
48 self.assertEqual(8.506047, sledrun.bottom_longitude)
49 self.assertEqual(None, sledrun.bottom_elevation)
50 self.assertEqual(5045, sledrun.length)
51 self.assertEqual(3, sledrun.difficulty)
52 self.assertEqual(2, sledrun.avalanches)
53 self.assertEqual('SchneeFunFit', sledrun.operator)
54 self.assertEqual(2, sledrun.public_transport)
55 self.assertEqual(True, sledrun.walkup_possible)
56 self.assertEqual(105, sledrun.walkup_time)
57 self.assertEqual(0.0, sledrun.walkup_separate)
58 self.assertEqual(None, sledrun.walkup_separate_comment)
59 self.assertEqual(True, sledrun.lift)
60 self.assertEqual('Sessellift (gratis); Bus', sledrun.lift_details)
61 self.assertEqual(0.0, sledrun.night_light)
62 self.assertEqual('in Planung für 2020', sledrun.night_light_comment)
63 self.assertEqual(None, sledrun.night_light_days)
64 self.assertEqual(None, sledrun.night_light_days_comment)
65 self.assertEqual(False, sledrun.sled_rental)
66 self.assertEqual('Nein', sledrun.sled_rental_comment)
67 self.assertEqual('Nein', sledrun.cachet)
68 self.assertEqual('http://example.com/schneelage', sledrun.information_web)
69 self.assertEqual('+43-664-1808482 (Bergkristallhütte)', sledrun.information_phone)
70 self.assertEqual('Rodelbahn Bergkristallhütte 2009-03-03.jpg', sledrun.image)
71 self.assertEqual(True, sledrun.show_in_overview)
72 self.assertEqual(72, sledrun.forum_id)
74 def test_sledrun_to_rodelbahnbox(self):
78 sledrun.position_longitude = 13.5
79 sledrun.position_latitude = 50.7
80 sledrun.top_longitude = 12.2
81 sledrun.top_latitude = 49.8
82 sledrun.top_elevation = 3456
83 sledrun.bottom_longitude = 9.89
84 sledrun.bottom_latitude = 51.2
85 sledrun.bottom_elevation = 2075
87 sledrun.difficulty = 3
88 sledrun.avalanches = 2
89 sledrun.operator = 'McRodel'
90 sledrun.public_transport = 3
91 sledrun.walkup_possible = True
92 sledrun.walkup_time = 77
93 sledrun.walkup_separate = 0.5
94 sledrun.walkup_separate_comment = 'Nur unterer Teil'
96 sledrun.lift_details = 'Sessellift'
97 sledrun.night_light = 1.0
98 sledrun.night_light_comment = 'Schlecht beleuchtet'
99 sledrun.night_light_days = 6
100 sledrun.night_light_days_comment = 'Mo-Sa'
101 sledrun.sled_rental = True
102 sledrun.sled_rental_comment = 'In der Hütte'
103 sledrun.cachet = 'Tiroler Rodelbahngütesielgel mittelschwer 2010'
104 sledrun.information_web = 'http://example.com'
105 sledrun.information_phone = '+4364412345678'
106 sledrun.image = 'Sicht_von_unten.jpg'
107 sledrun.show_in_overview = True
108 sledrun.forum_id = 65
109 rodelbahnbox = sledrun_to_rodelbahnbox(sledrun)
110 self.assertEqual(rodelbahnbox['Position'], LonLat(lon=13.5, lat=50.7))
111 self.assertEqual(rodelbahnbox['Position oben'], LonLat(12.2, 49.8))
112 self.assertEqual(rodelbahnbox['Höhe oben'], 3456)
113 self.assertEqual(rodelbahnbox['Position unten'], LonLat(9.89, 51.2))
114 self.assertEqual(rodelbahnbox['Höhe unten'], 2075)
115 self.assertEqual(rodelbahnbox['Länge'], 9644)
116 self.assertEqual(rodelbahnbox['Schwierigkeit'], 3)
117 self.assertEqual(rodelbahnbox['Lawinen'], 2)
118 self.assertEqual(rodelbahnbox['Betreiber'], 'McRodel')
119 self.assertEqual(rodelbahnbox['Öffentliche Anreise'], 3)
120 self.assertEqual(rodelbahnbox['Aufstieg möglich'], True)
121 self.assertEqual(rodelbahnbox['Aufstieg getrennt'], (0.5, 'Nur unterer Teil'))
122 self.assertEqual(rodelbahnbox['Gehzeit'], 77)
123 self.assertEqual(rodelbahnbox['Aufstiegshilfe'], [('Sessellift', None)])
124 self.assertEqual(rodelbahnbox['Beleuchtungsanlage'], (1.0, 'Schlecht beleuchtet'))
125 self.assertEqual(rodelbahnbox['Beleuchtungstage'], (6, 'Mo-Sa'))
126 self.assertEqual(rodelbahnbox['Rodelverleih'], (True, 'In der Hütte'))
127 self.assertEqual(rodelbahnbox['Gütesiegel'], 'Tiroler Rodelbahngütesielgel mittelschwer 2010')
128 self.assertEqual(rodelbahnbox['Webauskunft'], 'http://example.com')
129 self.assertEqual(rodelbahnbox['Bild'], 'Sicht_von_unten.jpg')
130 self.assertEqual(rodelbahnbox['In Übersichtskarte'], True)
131 self.assertEqual(rodelbahnbox['Forumid'], 65)
134 class TestInn(unittest.TestCase):
135 def test_inn_from_gasthausbox(self):
138 gasthausbox = collections.OrderedDict()
139 gasthausbox['Position'] = LonLat(11.015883, 9.876000)
140 gasthausbox['Höhe'] = 2145
141 gasthausbox['Betreiber'] = 'Max Mustermann'
142 gasthausbox['Sitzplätze'] = 30
143 gasthausbox['Übernachtung'] = (True, '2 Zimmer')
144 gasthausbox['Rauchfrei'] = 0.5
145 gasthausbox['Rodelverleih'] = (True, '6 Euro')
146 gasthausbox['Handyempfang'] = [('A1', None), ('Drei', 'schlecht')]
147 gasthausbox['Homepage'] = (True, 'http://www.graf-ferdinand.at/')
148 gasthausbox['E-Mail'] = [(('max.mustermann@graf-ferdinand.at', False), None), (('ich@example.com', True), 'privat')]
149 gasthausbox['Telefon'] = [('+43-5039-21666', None), ('+43-686-4134880', 'Sommer')]
150 gasthausbox['Bild'] = 'Gasthaus_Graf_Ferdinand_Haus_01.jpg'
151 gasthausbox['Rodelbahnen'] = ['[[Finstertaler Speicher]]', '[[Birgitzer Alm]]']
153 inn_from_gasthausbox(gasthausbox, inn)
154 self.assertEqual(inn.position_latitude, 9.876000)
155 self.assertEqual(inn.position_longitude, 11.015883)
156 self.assertEqual(inn.position_elevation, 2145)
157 self.assertEqual(inn.operator, 'Max Mustermann')
158 self.assertEqual(inn.seats, 30)
159 self.assertEqual(inn.overnight, True)
160 self.assertEqual(inn.overnight_comment, '2 Zimmer')
161 self.assertEqual(inn.smoker_area, True)
162 self.assertEqual(inn.nonsmoker_area, True)
163 self.assertEqual(inn.sled_rental, True)
164 self.assertEqual(inn.sled_rental_comment, '6 Euro')
165 self.assertEqual(inn.mobile_provider, 'A1; Drei (schlecht)')
166 self.assertEqual(inn.homepage, 'http://www.graf-ferdinand.at/')
167 self.assertEqual(inn.email_list, 'max.mustermann@graf-ferdinand.at; ich(at)example.com (privat)')
168 self.assertEqual(inn.phone_list, '+43-5039-21666; +43-686-4134880 (Sommer)')
169 self.assertEqual(inn.image, 'Gasthaus_Graf_Ferdinand_Haus_01.jpg')
170 self.assertEqual(inn.sledding_list, '[[Finstertaler Speicher]]; [[Birgitzer Alm]]')
172 def test_inn_to_gasthausbox(self):
176 inn.position_latitude = 9.876000
177 inn.position_longitude = 11.015883
178 inn.position_elevation = 2145
179 inn.operator = 'Max Mustermann'
182 inn.overnight_comment = '2 Zimmer'
183 inn.smoker_area = True
184 inn.nonsmoker_area = True
185 inn.sled_rental = True
186 inn.sled_rental_comment = '6 Euro'
187 inn.mobile_provider = 'A1; Drei (schlecht)'
188 inn.homepage = 'http://www.graf-ferdinand.at/'
189 inn.email_list = 'max.mustermann@graf-ferdinand.at; ich(at)example.com (privat)'
190 inn.phone_list = '+43-5039-21666; +43-686-4134880 (Sommer)'
191 inn.image = 'Gasthaus_Graf_Ferdinand_Haus_01.jpg'
192 inn.sledding_list = '[[Finstertaler Speicher]]; [[Birgitzer Alm]]'
193 gasthausbox = inn_to_gasthausbox(inn)
194 self.assertEqual(gasthausbox['Position'], LonLat(11.015883, 9.876000))
195 self.assertEqual(gasthausbox['Höhe'], 2145)
196 self.assertEqual(gasthausbox['Betreiber'], 'Max Mustermann')
197 self.assertEqual(gasthausbox['Sitzplätze'], 30)
198 self.assertEqual(gasthausbox['Übernachtung'], (True, '2 Zimmer'))
199 self.assertEqual(gasthausbox['Rauchfrei'], 0.5)
200 self.assertEqual(gasthausbox['Rodelverleih'], (True, '6 Euro'))
201 self.assertEqual(gasthausbox['Handyempfang'], [('A1', None), ('Drei', 'schlecht')])
202 self.assertEqual(gasthausbox['Homepage'], (True, 'http://www.graf-ferdinand.at/'))
203 self.assertEqual(gasthausbox['E-Mail'], [(('max.mustermann@graf-ferdinand.at', False), None), (('ich@example.com', True), 'privat')])
204 self.assertEqual(gasthausbox['Telefon'], [('+43-5039-21666', None), ('+43-686-4134880', 'Sommer')])
205 self.assertEqual(gasthausbox['Bild'], 'Gasthaus_Graf_Ferdinand_Haus_01.jpg')
206 self.assertEqual(gasthausbox['Rodelbahnen'], ['[[Finstertaler Speicher]]', '[[Birgitzer Alm]]'])
208 def test_inn_from_gasthausbox_no(self):
211 gasthausbox = collections.OrderedDict()
212 gasthausbox['Position'] = None
213 gasthausbox['Höhe'] = None
214 gasthausbox['Betreiber'] = None
215 gasthausbox['Sitzplätze'] = None
216 gasthausbox['Übernachtung'] = (False, None)
217 gasthausbox['Rauchfrei'] = 0.0
218 gasthausbox['Rodelverleih'] = (False, None)
219 gasthausbox['Handyempfang'] = []
220 gasthausbox['Homepage'] = (False, None)
221 gasthausbox['E-Mail'] = []
222 gasthausbox['Telefon'] = []
223 gasthausbox['Bild'] = None
224 gasthausbox['Rodelbahnen'] = []
226 inn_from_gasthausbox(gasthausbox, inn)
227 self.assertEqual(inn.position_latitude, None)
228 self.assertEqual(inn.position_longitude, None)
229 self.assertEqual(inn.position_elevation, None)
230 self.assertEqual(inn.operator, None)
231 self.assertEqual(inn.seats, None)
232 self.assertEqual(inn.overnight, False)
233 self.assertEqual(inn.overnight_comment, None)
234 self.assertEqual(inn.smoker_area, True)
235 self.assertEqual(inn.nonsmoker_area, False)
236 self.assertEqual(inn.sled_rental, False)
237 self.assertEqual(inn.sled_rental_comment, None)
238 self.assertEqual(inn.mobile_provider, 'Nein')
239 self.assertEqual(inn.homepage, 'Nein')
240 self.assertEqual(inn.email_list, 'Nein')
241 self.assertEqual(inn.phone_list, 'Nein')
242 self.assertEqual(inn.image, None)
243 self.assertEqual(inn.sledding_list, 'Nein')
245 def test_inn_to_gasthausbox_no(self):
249 inn.position_latitude = None
250 inn.position_longitude = None
251 inn.position_elevation = None
254 inn.overnight = False
255 inn.overnight_comment = None
256 inn.smoker_area = True
257 inn.nonsmoker_area = False
258 inn.sled_rental = False
259 inn.sled_rental_comment = None
260 inn.mobile_provider = 'Nein'
261 inn.homepage = 'Nein'
262 inn.email_list = 'Nein'
263 inn.phone_list = 'Nein'
265 inn.sledding_list = 'Nein'
266 gasthausbox = inn_to_gasthausbox(inn)
267 self.assertEqual(gasthausbox['Position'], None)
268 self.assertEqual(gasthausbox['Höhe'], None)
269 self.assertEqual(gasthausbox['Betreiber'], None)
270 self.assertEqual(gasthausbox['Sitzplätze'], None)
271 self.assertEqual(gasthausbox['Übernachtung'], (False, None))
272 self.assertEqual(gasthausbox['Rauchfrei'], 0.0)
273 self.assertEqual(gasthausbox['Rodelverleih'], (False, None))
274 self.assertEqual(gasthausbox['Handyempfang'], [])
275 self.assertEqual(gasthausbox['Homepage'], (False, None))
276 self.assertEqual(gasthausbox['E-Mail'], [])
277 self.assertEqual(gasthausbox['Telefon'], [])
278 self.assertEqual(gasthausbox['Bild'], None)
279 self.assertEqual(gasthausbox['Rodelbahnen'], [])
281 def test_inn_from_gasthausbox_none(self):
284 gasthausbox = collections.OrderedDict()
285 gasthausbox['Position'] = None
286 gasthausbox['Höhe'] = None
287 gasthausbox['Betreiber'] = None
288 gasthausbox['Sitzplätze'] = None
289 gasthausbox['Übernachtung'] = (None, None)
290 gasthausbox['Rauchfrei'] = None
291 gasthausbox['Rodelverleih'] = (None, None)
292 gasthausbox['Handyempfang'] = None
293 gasthausbox['Homepage'] = (None, None)
294 gasthausbox['E-Mail'] = None
295 gasthausbox['Telefon'] = None
296 gasthausbox['Bild'] = None
297 gasthausbox['Rodelbahnen'] = None
299 inn_from_gasthausbox(gasthausbox, inn)
300 self.assertEqual(inn.position_latitude, None)
301 self.assertEqual(inn.position_longitude, None)
302 self.assertEqual(inn.position_elevation, None)
303 self.assertEqual(inn.operator, None)
304 self.assertEqual(inn.seats, None)
305 self.assertEqual(inn.overnight, None)
306 self.assertEqual(inn.overnight_comment, None)
307 self.assertEqual(inn.smoker_area, None)
308 self.assertEqual(inn.nonsmoker_area, None)
309 self.assertEqual(inn.sled_rental, None)
310 self.assertEqual(inn.sled_rental_comment, None)
311 self.assertEqual(inn.mobile_provider, None)
312 self.assertEqual(inn.homepage, None)
313 self.assertEqual(inn.email_list, None)
314 self.assertEqual(inn.phone_list, None)
315 self.assertEqual(inn.image, None)
316 self.assertEqual(inn.sledding_list, None)
318 def test_inn_to_gasthausbox_none(self):
322 inn.position_latitude = None
323 inn.position_longitude = None
324 inn.position_elevation = None
328 inn.overnight_comment = None
329 inn.smoker_area = None
330 inn.nonsmoker_area = None
331 inn.sled_rental = None
332 inn.sled_rental_comment = None
333 inn.mobile_provider = None
335 inn.email_list = None
336 inn.phone_list = None
338 inn.sledding_list = None
339 gasthausbox = inn_to_gasthausbox(inn)
340 self.assertEqual(gasthausbox['Position'], None)
341 self.assertEqual(gasthausbox['Höhe'], None)
342 self.assertEqual(gasthausbox['Betreiber'], None)
343 self.assertEqual(gasthausbox['Sitzplätze'], None)
344 self.assertEqual(gasthausbox['Übernachtung'], (None, None))
345 self.assertEqual(gasthausbox['Rauchfrei'], None)
346 self.assertEqual(gasthausbox['Rodelverleih'], (None, None))
347 self.assertEqual(gasthausbox['Handyempfang'], None)
348 self.assertEqual(gasthausbox['Homepage'], (None, None))
349 self.assertEqual(gasthausbox['E-Mail'], None)
350 self.assertEqual(gasthausbox['Telefon'], None)
351 self.assertEqual(gasthausbox['Bild'], None)
352 self.assertEqual(gasthausbox['Rodelbahnen'], None)
355 class TestLonlatEle(unittest.TestCase):
356 def test_lonlat_ele_from_template(self):
357 template = mwparserfromhell.parse('{{Position oben|46.942239 N 11.468819 E|1866}}').filter_templates()[0]
358 lonlat, ele = lonlat_ele_from_template(template)
359 self.assertEqual(LonLat(11.468819, 46.942239), lonlat)
360 self.assertEqual(1866, ele)
362 def test_latlon_ele_to_template(self):
363 template = latlon_ele_to_template((LonLat(11.468819, 46.942239), 1866), 'Position oben')
364 self.assertEqual('{{Position oben|46.942239 N 11.468819 E|1866}}', template)
367 class TestWrMap(unittest.TestCase):
368 def test_parse_wrmap(self):
370 <wrmap lat="47.2417134" lon="11.21408895" zoom="14" width="700" height="400">
371 <gasthaus name="Rosskogelhütte" wiki="Rosskogelhütte">47.240689 11.190454</gasthaus>
372 <parkplatz>47.245789 11.238971</parkplatz>
373 <haltestelle name="Oberperfuss Rangger Köpfl Lift">47.245711 11.238283</haltestelle>
381 json = wrpylib.wrmwmarkup.parse_wrmap(wikitext)
382 self.assertEqual(json['properties']['lon'], 11.21408895)
383 self.assertEqual(json['properties']['lat'], 47.2417134)
384 self.assertEqual(json['properties']['zoom'], 14)
385 self.assertEqual(json['properties']['width'], 700)
386 self.assertEqual(json['properties']['height'], 400)
387 self.assertEqual(json['features'][0]['properties']['type'], 'gasthaus')
388 self.assertEqual(json['features'][0]['properties']['name'], 'Rosskogelhütte')
389 self.assertEqual(json['features'][0]['properties']['wiki'], 'Rosskogelhütte')
390 self.assertEqual(json['features'][0]['geometry']['coordinates'], [11.190454, 47.240689])
391 self.assertEqual(json['features'][1]['properties']['type'], 'parkplatz')
392 self.assertEqual(json['features'][1]['geometry']['coordinates'], [11.238971, 47.245789])
393 self.assertEqual(json['features'][2]['properties']['type'], 'haltestelle')
394 self.assertEqual(json['features'][2]['properties']['name'], 'Oberperfuss Rangger Köpfl Lift')
395 self.assertEqual(json['features'][2]['geometry']['coordinates'], [11.238283, 47.245711])
396 self.assertEqual(json['features'][3]['properties']['type'], 'rodelbahn')
397 self.assertEqual(json['features'][3]['geometry']['coordinates'], [
398 [11.203360, 47.238587],
399 [11.230868, 47.244951],
400 [11.237853, 47.245470]])
402 def test_create_wrmap(self):
404 'type': 'FeatureCollection',
410 'coordinates': [11.190454, 47.240689]},
411 'properties': {'type': 'gasthaus', 'name': 'Rosskogelhütte', 'wiki': 'Rosskogelhütte'}
416 'coordinates': [11.238971, 47.245789]},
417 'properties': {'type': 'parkplatz'}
422 'coordinates': [11.238283, 47.245711]},
423 'properties': {'type': 'haltestelle', 'name': 'Oberperfuss Rangger Köpfl Lift'}
427 'type': 'LineString',
429 [11.203360, 47.238587],
430 [11.230868, 47.244951],
431 [11.237853, 47.245470]]},
432 'properties': {'type': 'rodelbahn'}
442 wikitext = wrpylib.wrmwmarkup.create_wrmap(geojson)
443 self.assertEqual(wikitext, textwrap.dedent('''\
444 <wrmap lon="11.214089" lat="47.241713" zoom="14" width="700" height="400">
446 <gasthaus name="Rosskogelhütte" wiki="Rosskogelhütte">47.240689 N 11.190454 E</gasthaus>
447 <parkplatz>47.245789 N 11.238971 E</parkplatz>
448 <haltestelle name="Oberperfuss Rangger Köpfl Lift">47.245711 N 11.238283 E</haltestelle>
451 47.238587 N 11.203360 E
452 47.244951 N 11.230868 E
453 47.245470 N 11.237853 E
459 class TestWikiJson(unittest.TestCase):
460 def test_empty_json(self):
461 wiki_text = create_sledrun_wiki({}, None)
462 self.assertIsInstance(wiki_text, str)