Removed tests for functions that are not used anymore.
[philipp/winterrodeln/wrpylib.git] / tests / test_wrmwmarkup.py
1 #!/usr/bin/python3.4
2 import collections
3 import textwrap
4 import unittest
5 import mwparserfromhell
6 import wrpylib.wrvalidators
7 import wrpylib.wrmwmarkup
8 from wrpylib.wrvalidators import LonLat
9 from wrpylib.wrmwmarkup import sledrun_from_rodelbahnbox, sledrun_to_rodelbahnbox, \
10     inn_from_gasthausbox, inn_to_gasthausbox, lonlat_ele_from_template, latlon_ele_to_template
11
12
13 class TestSledrun(unittest.TestCase):
14     def test_sledrun_from_rodelbahnbox(self):
15         class Sledrun:
16             pass
17         rodelbahnbox = collections.OrderedDict([
18             ('Position', LonLat(9.986508, 47.30982)),
19             ('Position oben', LonLat(None, None)),
20             ('Höhe oben', 1244),
21             ('Position unten', LonLat(8.506047, 46.20210)),
22             ('Höhe unten', None),
23             ('Länge', 5045),
24             ('Schwierigkeit', 3),
25             ('Lawinen', 2),
26             ('Betreiber', 'SchneeFunFit'),
27             ('Öffentliche Anreise', 2),
28             ('Aufstieg möglich', True),
29             ('Aufstieg getrennt', (0.0, None)),
30             ('Gehzeit', 105),
31             ('Aufstiegshilfe', [('Sessellift', 'gratis'), ('Bus', None)]),
32             ('Beleuchtungsanlage', (0.0, 'in Planung für 2020')),
33             ('Beleuchtungstage', (None, None)),
34             ('Rodelverleih', []),
35             ('Gütesiegel', []),
36             ('Webauskunft', (True, 'http://example.com/schneelage')),
37             ('Telefonauskunft', [('+43-664-1808482', 'Bergkristallhütte')]),
38             ('Bild', 'Rodelbahn Bergkristallhütte 2009-03-03.jpg'),
39             ('In Übersichtskarte', True),
40             ('Forumid', 72)])
41         sledrun = Sledrun()
42         sledrun_from_rodelbahnbox(rodelbahnbox, sledrun)
43         self.assertEqual(47.30982, sledrun.position_latitude)
44         self.assertEqual(9.986508, sledrun.position_longitude)
45         self.assertEqual(None, sledrun.top_latitude)
46         self.assertEqual(None, sledrun.top_longitude)
47         self.assertEqual(1244, sledrun.top_elevation)
48         self.assertEqual(46.20210, sledrun.bottom_latitude)
49         self.assertEqual(8.506047, sledrun.bottom_longitude)
50         self.assertEqual(None, sledrun.bottom_elevation)
51         self.assertEqual(5045, sledrun.length)
52         self.assertEqual(3, sledrun.difficulty)
53         self.assertEqual(2, sledrun.avalanches)
54         self.assertEqual('SchneeFunFit', sledrun.operator)
55         self.assertEqual(2, sledrun.public_transport)
56         self.assertEqual(True, sledrun.walkup_possible)
57         self.assertEqual(105, sledrun.walkup_time)
58         self.assertEqual(0.0, sledrun.walkup_separate)
59         self.assertEqual(None, sledrun.walkup_separate_comment)
60         self.assertEqual(True, sledrun.lift)
61         self.assertEqual('Sessellift (gratis); Bus', sledrun.lift_details)
62         self.assertEqual(0.0, sledrun.night_light)
63         self.assertEqual('in Planung für 2020', sledrun.night_light_comment)
64         self.assertEqual(None, sledrun.night_light_days)
65         self.assertEqual(None, sledrun.night_light_days_comment)
66         self.assertEqual(False, sledrun.sled_rental)
67         self.assertEqual('Nein', sledrun.sled_rental_comment)
68         self.assertEqual('Nein', sledrun.cachet)
69         self.assertEqual('http://example.com/schneelage', sledrun.information_web)
70         self.assertEqual('+43-664-1808482 (Bergkristallhütte)', sledrun.information_phone)
71         self.assertEqual('Rodelbahn Bergkristallhütte 2009-03-03.jpg', sledrun.image)
72         self.assertEqual(True, sledrun.show_in_overview)
73         self.assertEqual(72, sledrun.forum_id)
74
75     def test_sledrun_to_rodelbahnbox(self):
76         class Sledrun:
77             pass
78         sledrun = Sledrun()
79         sledrun.position_longitude = 13.5
80         sledrun.position_latitude = 50.7
81         sledrun.top_longitude = 12.2
82         sledrun.top_latitude = 49.8
83         sledrun.top_elevation = 3456
84         sledrun.bottom_longitude = 9.89
85         sledrun.bottom_latitude = 51.2
86         sledrun.bottom_elevation = 2075
87         sledrun.length = 9644
88         sledrun.difficulty = 3
89         sledrun.avalanches = 2
90         sledrun.operator = 'McRodel'
91         sledrun.public_transport = 3
92         sledrun.walkup_possible = True
93         sledrun.walkup_time = 77
94         sledrun.walkup_separate = 0.5
95         sledrun.walkup_separate_comment = 'Nur unterer Teil'
96         sledrun.lift = True
97         sledrun.lift_details = 'Sessellift'
98         sledrun.night_light = 1.0
99         sledrun.night_light_comment = 'Schlecht beleuchtet'
100         sledrun.night_light_days = 6
101         sledrun.night_light_days_comment = 'Mo-Sa'
102         sledrun.sled_rental = True
103         sledrun.sled_rental_comment = 'In der Hütte'
104         sledrun.cachet = 'Tiroler Rodelbahngütesielgel mittelschwer 2010'
105         sledrun.information_web = 'http://example.com'
106         sledrun.information_phone = '+4364412345678'
107         sledrun.image = 'Sicht_von_unten.jpg'
108         sledrun.show_in_overview = True
109         sledrun.forum_id = 65
110         rodelbahnbox = sledrun_to_rodelbahnbox(sledrun)
111         self.assertEqual(rodelbahnbox['Position'], LonLat(lon=13.5, lat=50.7))
112         self.assertEqual(rodelbahnbox['Position oben'], LonLat(12.2, 49.8))
113         self.assertEqual(rodelbahnbox['Höhe oben'], 3456)
114         self.assertEqual(rodelbahnbox['Position unten'], LonLat(9.89, 51.2))
115         self.assertEqual(rodelbahnbox['Höhe unten'], 2075)
116         self.assertEqual(rodelbahnbox['Länge'], 9644)
117         self.assertEqual(rodelbahnbox['Schwierigkeit'], 3)
118         self.assertEqual(rodelbahnbox['Lawinen'], 2)
119         self.assertEqual(rodelbahnbox['Betreiber'], 'McRodel')
120         self.assertEqual(rodelbahnbox['Öffentliche Anreise'], 3)
121         self.assertEqual(rodelbahnbox['Aufstieg möglich'], True)
122         self.assertEqual(rodelbahnbox['Aufstieg getrennt'], (0.5, 'Nur unterer Teil'))
123         self.assertEqual(rodelbahnbox['Gehzeit'], 77)
124         self.assertEqual(rodelbahnbox['Aufstiegshilfe'], [('Sessellift', None)])
125         self.assertEqual(rodelbahnbox['Beleuchtungsanlage'], (1.0, 'Schlecht beleuchtet'))
126         self.assertEqual(rodelbahnbox['Beleuchtungstage'], (6, 'Mo-Sa'))
127         self.assertEqual(rodelbahnbox['Rodelverleih'], (True, 'In der Hütte'))
128         self.assertEqual(rodelbahnbox['Gütesiegel'], 'Tiroler Rodelbahngütesielgel mittelschwer 2010')
129         self.assertEqual(rodelbahnbox['Webauskunft'], 'http://example.com')
130         self.assertEqual(rodelbahnbox['Bild'], 'Sicht_von_unten.jpg')
131         self.assertEqual(rodelbahnbox['In Übersichtskarte'], True)
132         self.assertEqual(rodelbahnbox['Forumid'], 65)
133
134
135 class TestInn(unittest.TestCase):
136     def test_inn_from_gasthausbox(self):
137         class Inn:
138             pass
139         gasthausbox = collections.OrderedDict()
140         gasthausbox['Position'] = LonLat(11.015883, 9.876000)
141         gasthausbox['Höhe'] = 2145
142         gasthausbox['Betreiber'] = 'Max Mustermann'
143         gasthausbox['Sitzplätze'] = 30
144         gasthausbox['Übernachtung'] = (False, None)
145         gasthausbox['Rauchfrei'] = 0.5
146         gasthausbox['Rodelverleih'] = (True, '6 Euro')
147         gasthausbox['Handyempfang'] = []
148         gasthausbox['Homepage'] = (True, 'http://www.graf-ferdinand.at/')
149         gasthausbox['E-Mail'] = [(('max.mustermann@graf-ferdinand.at', False), None)]
150         gasthausbox['Telefon'] = [('+43-5039-21666', None), ('+43-686-4134880', 'Sommer')]
151         gasthausbox['Bild'] = 'Gasthaus_Graf_Ferdinand_Haus_01.jpg'
152         gasthausbox['Rodelbahnen'] = ['[[Finstertaler Speicher]]']
153         inn = Inn()
154         inn_from_gasthausbox(gasthausbox, inn)
155         self.assertEqual(inn.position_latitude, 9.876000)
156         self.assertEqual(inn.position_longitude, 11.015883)
157         self.assertEqual(inn.position_elevation, 2145)
158         self.assertEqual(inn.operator, 'Max Mustermann')
159         self.assertEqual(inn.seats, 30)
160         self.assertEqual(inn.overnight, False)
161         self.assertEqual(inn.overnight_comment, None)
162         self.assertEqual(inn.smoker_area, True)
163         self.assertEqual(inn.nonsmoker_area, True)
164         self.assertEqual(inn.sled_rental, True)
165         self.assertEqual(inn.sled_rental_comment, '6 Euro')
166         self.assertEqual(inn.mobile_provider, 'Nein')
167         self.assertEqual(inn.homepage, 'http://www.graf-ferdinand.at/')
168         self.assertEqual(inn.email_list, 'max.mustermann@graf-ferdinand.at')
169         self.assertEqual(inn.phone_list, '+43-5039-21666; +43-686-4134880 (Sommer)')
170         self.assertEqual(inn.image, 'Gasthaus_Graf_Ferdinand_Haus_01.jpg')
171         self.assertEqual(inn.sledding_list, '[[Finstertaler Speicher]]')
172
173
174     def test_inn_to_gasthausbox(self):
175         class Inn:
176             pass
177         inn = Inn()
178         inn.position_latitude = 9.876000
179         inn.position_longitude = 11.015883
180         inn.position_elevation = 2145
181         inn.operator = 'Max Mustermann'
182         inn.seats = 30
183         inn.overnight = False
184         inn.overnight_comment = None
185         inn.smoker_area = True
186         inn.nonsmoker_area = True
187         inn.sled_rental = True
188         inn.sled_rental_comment = '6 Euro'
189         inn.mobile_provider = 'Nein'
190         inn.homepage = 'http://www.graf-ferdinand.at/'
191         inn.email_list = 'max.mustermann@graf-ferdinand.at'
192         inn.phone_list = '+43-5039-21666; +43-686-4134880 (Sommer)'
193         inn.image = 'Gasthaus_Graf_Ferdinand_Haus_01.jpg'
194         inn.sledding_list = '[[Finstertaler Speicher]]'
195         gasthausbox = inn_to_gasthausbox(inn)
196         self.assertEqual(gasthausbox['Position'], LonLat(11.015883, 9.876000))
197         self.assertEqual(gasthausbox['Höhe'], 2145)
198         self.assertEqual(gasthausbox['Betreiber'], 'Max Mustermann')
199         self.assertEqual(gasthausbox['Sitzplätze'], 30)
200         self.assertEqual(gasthausbox['Übernachtung'], (False, None))
201         self.assertEqual(gasthausbox['Rauchfrei'], 0.5)
202         self.assertEqual(gasthausbox['Rodelverleih'], (True, '6 Euro'))
203         self.assertEqual(gasthausbox['Handyempfang'], [])
204         self.assertEqual(gasthausbox['Homepage'], (True, 'http://www.graf-ferdinand.at/'))
205         self.assertEqual(gasthausbox['E-Mail'], [(('max.mustermann@graf-ferdinand.at', False), None)])
206         self.assertEqual(gasthausbox['Telefon'], [('+43-5039-21666', None), ('+43-686-4134880', 'Sommer')])
207         self.assertEqual(gasthausbox['Bild'], 'Gasthaus_Graf_Ferdinand_Haus_01.jpg')
208         self.assertEqual(gasthausbox['Rodelbahnen'], ['[[Finstertaler Speicher]]'])
209
210
211 class TestLonlatEle(unittest.TestCase):
212     def test_lonlat_ele_from_template(self):
213         template = mwparserfromhell.parse('{{Position oben|46.942239 N 11.468819 E|1866}}').filter_templates()[0]
214         lonlat, ele = lonlat_ele_from_template(template)
215         self.assertEqual(LonLat(11.468819, 46.942239), lonlat)
216         self.assertEqual(1866, ele)
217
218     def test_latlon_ele_to_template(self):
219         template = latlon_ele_to_template((LonLat(11.468819, 46.942239), 1866), 'Position oben')
220         self.assertEqual('{{Position oben|46.942239 N 11.468819 E|1866}}', template)
221
222
223 class TestWrMap(unittest.TestCase):
224     def test_parse_wrmap(self):
225         wikitext = '''
226         <wrmap lat="47.2417134" lon="11.21408895" zoom="14" width="700" height="400">
227         <gasthaus name="Rosskogelhütte" wiki="Rosskogelhütte">47.240689 11.190454</gasthaus>
228         <parkplatz>47.245789 11.238971</parkplatz>
229         <haltestelle name="Oberperfuss Rangger Köpfl Lift">47.245711 11.238283</haltestelle>
230         <rodelbahn>
231             47.238587 11.203360
232             47.244951 11.230868
233             47.245470 11.237853
234         </rodelbahn>
235         </wrmap>
236         '''
237         json = wrpylib.wrmwmarkup.parse_wrmap(wikitext)
238         assert json['properties']['lon'] == 11.21408895
239         assert json['properties']['lat'] == 47.2417134
240         assert json['properties']['zoom'] == 14
241         assert json['properties']['width'] == 700
242         assert json['properties']['height'] == 400
243         assert json['features'][0]['properties']['type'] == 'gasthaus'
244         assert json['features'][0]['properties']['name'] == 'Rosskogelhütte'
245         assert json['features'][0]['properties']['wiki'] == 'Rosskogelhütte'
246         assert json['features'][0]['geometry']['coordinates'] == [11.190454, 47.240689]
247         assert json['features'][1]['properties']['type'] == 'parkplatz'
248         assert json['features'][1]['geometry']['coordinates'] == [11.238971, 47.245789]
249         assert json['features'][2]['properties']['type'] == 'haltestelle'
250         assert json['features'][2]['properties']['name'] == 'Oberperfuss Rangger Köpfl Lift'
251         assert json['features'][2]['geometry']['coordinates'] == [11.238283, 47.245711]
252         assert json['features'][3]['properties']['type'] == 'rodelbahn'
253         assert json['features'][3]['geometry']['coordinates'] == [
254             [11.203360, 47.238587],
255             [11.230868, 47.244951],
256             [11.237853, 47.245470]]
257
258     def test_create_wrmap(self):
259         geojson = {
260             'type': 'FeatureCollection',
261             'features':
262                 [{
263                     'type': 'Feature',
264                     'geometry': {
265                         'type': 'Point',
266                         'coordinates': [11.190454, 47.240689]},
267                     'properties': {'type': 'gasthaus', 'name': 'Rosskogelhütte', 'wiki': 'Rosskogelhütte'}
268                 }, {
269                     'type': 'Feature',
270                     'geometry': {
271                         'type': 'Point',
272                         'coordinates': [11.238971, 47.245789]},
273                     'properties': {'type': 'parkplatz'}
274                 }, {
275                     'type': 'Feature',
276                     'geometry': {
277                         'type': 'Point',
278                         'coordinates': [11.238283, 47.245711]},
279                     'properties': {'type': 'haltestelle', 'name': 'Oberperfuss Rangger Köpfl Lift'}
280                 }, {
281                     'type': 'Feature',
282                     'geometry': {
283                         'type': 'LineString',
284                         'coordinates': [
285                             [11.203360, 47.238587],
286                             [11.230868, 47.244951],
287                             [11.237853, 47.245470]]},
288                     'properties': {'type': 'rodelbahn'}
289                 }],
290             'properties': {
291                 'lon': 11.21408895,
292                 'lat': 47.2417134,
293                 'zoom': 14,
294                 'width': 700,
295                 'height': 400}
296         }
297
298         wikitext = wrpylib.wrmwmarkup.create_wrmap(geojson)
299         assert wikitext == textwrap.dedent('''\
300         <wrmap height="400" lat="47.241713" lon="11.214089" width="700" zoom="14">
301
302         <gasthaus name="Rosskogelhütte" wiki="Rosskogelhütte">47.240689 N 11.190454 E</gasthaus>
303         <parkplatz>47.245789 N 11.238971 E</parkplatz>
304         <haltestelle name="Oberperfuss Rangger Köpfl Lift">47.245711 N 11.238283 E</haltestelle>
305
306         <rodelbahn>
307         47.238587 N 11.203360 E
308         47.244951 N 11.230868 E
309         47.245470 N 11.237853 E
310         </rodelbahn>
311
312         </wrmap>''')