Implemented Gasthausbox converter and test.
authorphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Tue, 2 Feb 2016 21:09:59 +0000 (21:09 +0000)
committerphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Tue, 2 Feb 2016 21:09:59 +0000 (21:09 +0000)
git-svn-id: http://www.winterrodeln.org/svn/wrpylib/trunk@2446 7aebc617-e5e2-0310-91dc-80fb5f6d2477

tests/test_wrvalidators.py
wrpylib/wrvalidators.py

index 9cf890bda837e4c3d07778195f5cc03733022b32..a132df939690b37a9815b9c178cd2399cebc9cd9 100644 (file)
@@ -418,6 +418,7 @@ class TestOptPhoneCommentEnum(unittest.TestCase):
         self.assertEqual([], opt_phone_comment_enum_from_str('Nein'))
         self.assertEqual([('+43-512-123456', 'untertags')], opt_phone_comment_enum_from_str('+43-512-123456 (untertags)'))
         self.assertEqual([('+43-512-1234', 'untertags'), ('+43-664-123456', 'Alm')], opt_phone_comment_enum_from_str('+43-512-1234 (untertags); +43-664-123456 (Alm)'))
+        self.assertEqual([('+43-512-1234', None), ('+43-664-123456', 'Sommer')], opt_phone_comment_enum_from_str('+43-512-1234; +43-664-123456 (Sommer)', True))
         with self.assertRaises(ValueError):
             opt_phone_comment_enum_from_str('+43-512-123456+ (untertags)')
         with self.assertRaises(ValueError):
@@ -428,6 +429,7 @@ class TestOptPhoneCommentEnum(unittest.TestCase):
         self.assertEqual('Nein', opt_phone_comment_enum_to_str([]))
         self.assertEqual('+43-512-123456 (untertags)', opt_phone_comment_enum_to_str([('+43-512-123456', 'untertags')]))
         self.assertEqual('+43-512-1234 (untertags); +43-664-123456 (Alm)', opt_phone_comment_enum_to_str([('+43-512-1234', 'untertags'), ('+43-664-123456', 'Alm')]))
+        self.assertEqual('+43-512-1234; +43-664-123456 (Sommer)', opt_phone_comment_enum_to_str([('+43-512-1234', None), ('+43-664-123456', 'Sommer')], True))
 
 
 # longitude/latitude converter
@@ -704,22 +706,54 @@ class TestRodelbahnbox(unittest.TestCase):
 # ---------------------
 
 class TestGasthausbox(unittest.TestCase):
-    def test_GasthausboxDictValidator(self):
-        v = wrpylib.wrvalidators.GasthausboxDictValidator()
-        other = collections.OrderedDict([
-            ('Position', '47.295549 N 9.986970 E'),
-            ('Höhe', '1250'),
-            ('Betreiber', ''),
-            ('Sitzplätze', ''),
-            ('Übernachtung', ''),
-            ('Rauchfrei', 'Nein'),
-            ('Rodelverleih', ''),
-            ('Handyempfang', 'A1; T-Mobile/Telering'),
-            ('Homepage', 'http://www.bergkristallhuette.com/'),
-            ('E-Mail', 'bergkristallhuette@gmx.at'),
-            ('Telefon', '+43-664-1808482'),
-            ('Bild', 'Bergkritsallhütte 2009-02-07.JPG'),
-            ('Rodelbahnen', '[[Bergkristallhütte]]')])
-        python = v.to_python(other, None)
-        other2 = v.from_python(python, None)
-        assert other == other2
+    def setUp(self):
+        self.maxDiff = None
+        self.value = \
+"""{{Gasthausbox
+| Position          = 47.123456 N 11.123456 E
+| Höhe              = 1808
+| Betreiber         = Max Mustermann
+| Sitzplätze        = 50
+| Übernachtung      = 20 Matrazenlager, 3 Doppelzimmer
+| Rauchfrei         = Ja
+| Rodelverleih      = 2 Euro (Ausweis erforderlich)
+| Handyempfang      = A1; T-Mobile A
+| Homepage          = http://www.birgitzeralm.at/
+| E-Mail            = Nein
+| Telefon           = +43-664-5487520; +43-512-123456 (wenn geschlossen)
+| Bild              = Gasthaus_Birgitzer_Alm_03.jpg
+| Rodelbahnen       = [[Birgitzer Alm (vom Adelshof)]]; [[Birgitzer Alm (von Birgitz)]]
+}}"""
+
+    def test_from_str(self):
+        value = gasthausbox_from_str(self.value)
+        self.assertEqual(LonLat(11.123456, 47.123456), value['Position'])
+        self.assertEqual(1808, value['Höhe'])
+        self.assertEqual('Max Mustermann', value['Betreiber'])
+        self.assertEqual(50, value['Sitzplätze'])
+        self.assertEqual((True, '20 Matrazenlager, 3 Doppelzimmer'), value['Übernachtung'])
+        self.assertEqual((True, '2 Euro (Ausweis erforderlich)'), value['Rodelverleih'])
+        self.assertEqual(1.0, value['Rauchfrei'])
+        self.assertEqual([('A1', None), ('T-Mobile A', None)], value['Handyempfang'])
+        self.assertEqual((True, 'http://www.birgitzeralm.at/'), value['Homepage'])
+        self.assertEqual([], value['E-Mail'])
+        self.assertEqual([('+43-664-5487520', None), ('+43-512-123456', 'wenn geschlossen')], value['Telefon'])
+        self.assertEqual('Gasthaus_Birgitzer_Alm_03.jpg', value['Bild'])
+        self.assertEqual(['[[Birgitzer Alm (vom Adelshof)]]', '[[Birgitzer Alm (von Birgitz)]]'], value['Rodelbahnen'])
+
+    def test_to_str(self):
+        value = OrderedDict([
+            ('Position', LonLat(11.123456, 47.123456)),
+            ('Höhe', 1808),
+            ('Betreiber', 'Max Mustermann'),
+            ('Sitzplätze', 50),
+            ('Übernachtung', (True, '20 Matrazenlager, 3 Doppelzimmer')),
+            ('Rodelverleih', (True, '2 Euro (Ausweis erforderlich)')),
+            ('Rauchfrei', 1.0),
+            ('Handyempfang', [('A1', None), ('T-Mobile A', None)]),
+            ('Homepage', (True, 'http://www.birgitzeralm.at/')),
+            ('E-Mail', []),
+            ('Telefon', [('+43-664-5487520', None), ('+43-512-123456', 'wenn geschlossen')]),
+            ('Bild', 'Gasthaus_Birgitzer_Alm_03.jpg'),
+            ('Rodelbahnen', ['[[Birgitzer Alm (vom Adelshof)]]', '[[Birgitzer Alm (von Birgitz)]]'])])
+        self.assertEqual(self.value, gasthausbox_to_str(value))
index d6fe67f9f132d6805560ca4a02958304a3a19e4d..61a961d01980288609583495398bd05651437bce 100644 (file)
@@ -423,7 +423,7 @@ def emails_to_str(value):
     return opt_no_german_to_str(value, lambda val: enum_to_str(val, lambda v: value_comment_to_str(v, masked_email_to_str, opt_str_to_str, True)), False, [], None)
 
 
-emails_converter = FromToConverter(emails_from_str, email_to_str)
+emails_converter = FromToConverter(emails_from_str, emails_to_str)
 
 
 # phone converter
@@ -441,11 +441,11 @@ def phone_number_to_str(value):
 
 
 def opt_phone_comment_enum_from_str(value, comment_optional=False):
-    return opt_no_german_from_str(value, lambda val: enum_from_str(val, lambda v: value_comment_from_str(v, phone_number_from_str, req_str_from_str, comment_optional)), False, [], None)
+    return opt_no_german_from_str(value, lambda val: enum_from_str(val, lambda v: value_comment_from_str(v, phone_number_from_str, opt_str_from_str if comment_optional else req_str_from_str, comment_optional)), False, [], None)
 
 
 def opt_phone_comment_enum_to_str(value, comment_optional=False):
-    return opt_no_german_to_str(value, lambda val: enum_to_str(val, lambda v: value_comment_to_str(v, phone_number_to_str, str_to_str, comment_optional)), False, [], None)
+    return opt_no_german_to_str(value, lambda val: enum_to_str(val, lambda v: value_comment_to_str(v, phone_number_to_str, opt_str_to_str if comment_optional else str_to_str, comment_optional)), False, [], None)
 
 
 opt_phone_comment_enum_converter = FromToConverter(opt_phone_comment_enum_from_str, opt_phone_comment_enum_to_str)
@@ -789,6 +789,24 @@ GASTHAUSBOX_DICT = OrderedDict([
     ('Rodelbahnen', opt_wikipage_enum_converter)])
 
 
+def gasthausbox_from_template(template):
+    return wikibox_from_template(template, GASTHAUSBOX_TEMPLATE_NAME, GASTHAUSBOX_DICT)
+
+
+def gasthausbox_to_template(value):
+    return wikibox_to_template(value, GASTHAUSBOX_TEMPLATE_NAME, GASTHAUSBOX_DICT)
+
+
+def gasthausbox_from_str(value):
+    return wikibox_from_str(value, GASTHAUSBOX_TEMPLATE_NAME, GASTHAUSBOX_DICT)
+
+
+def gasthausbox_to_str(value):
+    template = gasthausbox_to_template(value)
+    template_to_table(template, 17)
+    return str(template)
+
+
 # Helper function to make page title pretty
 # -----------------------------------------