3 To prepare a system for testing, create a database philipp_winterrodeln_wiki_wrfeed_test with mysql:
4 echo 'create database philipp_winterrodeln_wiki_wrfeed_test;' | mysql
5 mysql philipp_winterrodeln_wiki_wrfeed_test < testdb.sql
7 WRFEED_SETTINGS=../wrfeed/test.cfg python3 -m unittest tests/test_wrfeed.py
10 import xml.etree.ElementTree as et
12 from sqlalchemy.engine.url import URL, make_url
16 class WrfeedTestBase(unittest.TestCase):
18 wrfeed.app.config['TESTING'] = True
19 self.app = wrfeed.app.test_client()
22 class TestNoDbWrfeed(WrfeedTestBase):
24 result = self.app.get('/')
25 self.assertTrue(result.data.startswith(b'<?xml version='))
26 self.assertIn(b'page about feeds', result.data)
29 class TestDbWrfeed(WrfeedTestBase):
32 with wrfeed.app.app_context():
34 uri = make_url(wrfeed.app.config['SQLALCHEMY_DATABASE_URI'])
36 uri_nodb = URL(uri.drivername, host=uri.host, port=uri.port, username=uri.username,
37 password=uri.password, query=uri.query)
38 engine_nodb = sqlalchemy.create_engine(uri_nodb)
39 engine_nodb.execute("DROP DATABASE IF EXISTS {}".format(uri.database))
40 engine_nodb.execute("CREATE DATABASE {} CHARACTER SET = '{}'".format(uri.database, 'UTF8'))
43 self.engine = sqlalchemy.create_engine(uri)
44 con = self.engine.connect()
47 with open('tests/testdb.sql', 'r') as f:
52 seconds_diff, = con.execute("SELECT TIMESTAMPDIFF(SECOND, '2017-03-31 07:00', now())").fetchone()
53 seconds_diff = int(seconds_diff)
54 con.execute("UPDATE wrreport SET date_report = DATE(date_report + INTERVAL %s SECOND) "
55 "WHERE time_report IS NULL", (seconds_diff,))
56 con.execute("UPDATE wrreport SET date_report = "
57 "DATE(TIMESTAMP(date_report, time_report) + INTERVAL %s SECOND) "
58 "WHERE time_report IS NOT NULL", (seconds_diff,))
59 con.execute("UPDATE wrreport SET time_report = "
60 "TIME(TIMESTAMP(date_report, time_report) + INTERVAL %s SECOND) "
61 "WHERE time_report IS NOT NULL", (seconds_diff,))
62 con.execute("UPDATE wrreport SET date_entry = date_entry + INTERVAL %s SECOND", (seconds_diff,))
63 con.execute("UPDATE wrreport SET date_invalid = date_invalid + INTERVAL %s SECOND", (seconds_diff,))
64 con.execute("UPDATE wrreport SET delete_date = delete_date + INTERVAL %s SECOND", (seconds_diff,))
67 result = self.app.get('/berichte/alle')
68 self.assertTrue(result.data.startswith(b'<?xml'))
69 root = et.fromstring(result.data)
70 self.assertIn('Rodelbahnberichte', root.find('{http://www.w3.org/2005/Atom}title').text)
71 self.assertEqual(len(root.findall('{http://www.w3.org/2005/Atom}entry')), 7)
76 'pleisenhütte_axamer_lizum': 2,
78 'birgitzer_alm_(vom_adelshof)': 1,
80 for bahn, count in bahn_count.items():
81 with self.subTest(bahn=bahn):
82 result = self.app.get('/berichte/bahn/{}'.format(bahn))
83 self.assertTrue(result.data.startswith(b'<?xml'))
84 root = et.fromstring(result.data)
85 self.assertIn('Rodelbahnberichte', root.find('{http://www.w3.org/2005/Atom}title').text)
86 self.assertEqual(len(root.findall('{http://www.w3.org/2005/Atom}entry')), count,
87 '"{}" not found {} times'.format(bahn, count))
89 def test_bahnen(self):
100 for bahnen, count in bahnen_count.items():
101 with self.subTest(bahnen=bahnen):
102 result = self.app.get('/berichte/bahnen/{}'.format(bahnen))
103 self.assertTrue(result.data.startswith(b'<?xml'))
104 root = et.fromstring(result.data)
105 self.assertIn('Rodelbahnberichte', root.find('{http://www.w3.org/2005/Atom}title').text)
106 self.assertEqual(len(root.findall('{http://www.w3.org/2005/Atom}entry')), count,
107 f'bahnen "{bahnen}" not found {count} times')
109 def test_region(self):
115 for region, count in region_count.items():
116 with self.subTest(region=region):
117 result = self.app.get('/berichte/region/{}'.format(region))
118 self.assertTrue(result.data.startswith(b'<?xml'))
119 root = et.fromstring(result.data)
120 self.assertIn('Rodelbahnberichte', root.find('{http://www.w3.org/2005/Atom}title').text)
121 self.assertEqual(len(root.findall('{http://www.w3.org/2005/Atom}entry')), count,
122 f'"{region}" not found {count} times')