1 """How to test wradmin:
3 WRADMIN_SETTINGS=../wradmin/test.cfg python3 -m unittest tests.test_wradmin
6 import bs4 # beautiful soup
10 class WradminTestBase(unittest.TestCase):
12 wradmin.app.config['TESTING'] = True
13 self.app = wradmin.app.test_client()
16 class TestNoDbWradmin(WradminTestBase):
18 result = self.app.get('/')
19 self.assertEqual(result.status_code, 200)
20 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
21 soup = bs4.BeautifulSoup(result.data, 'html.parser')
22 self.assertEqual(soup.title.text, 'Hauptmenü')
24 def test_coordtool(self):
25 result = self.app.get('/coordtool/index')
26 self.assertEqual(result.status_code, 200)
27 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
28 soup = bs4.BeautifulSoup(result.data, 'html.parser')
29 self.assertEqual(soup.title.text, 'Koordinaten-Rechner')
31 def test_coordtool_convert_ok(self):
32 result = self.app.post('/coordtool/convert', data={'input': '47.987, 11.123'}, follow_redirects=True)
33 self.assertEqual(result.status_code, 200)
34 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
35 soup = bs4.BeautifulSoup(result.data, 'html.parser')
36 self.assertEqual(soup.title.text, 'Koordinaten-Rechner')
37 self.assertIn('GPX Format', str(soup))
39 def test_coordtool_convert_error(self):
40 result = self.app.post('/coordtool/convert', data={'input': 'abc'}, follow_redirects=True)
41 self.assertEqual(result.status_code, 200)
42 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
43 soup = bs4.BeautifulSoup(result.data, 'html.parser')
44 self.assertEqual(soup.title.text, 'Koordinaten-Rechner')
45 self.assertIn('no known format', str(soup))
48 class TestDbWradmin(WradminTestBase):
51 with wradmin.app.app_context():
53 with open('tests/testdb.sql', 'r') as f:
55 with wradmin.model.meta.engine.begin() as con:
59 seconds_diff, = con.execute("SELECT TIMESTAMPDIFF(SECOND, '2017-03-31 07:00', now())").fetchone()
60 seconds_diff = int(seconds_diff)
61 con.execute("UPDATE wrreport SET date_report = DATE(date_report + INTERVAL %s SECOND) WHERE time_report IS NULL", (seconds_diff,))
62 con.execute("UPDATE wrreport SET date_report = DATE(TIMESTAMP(date_report, time_report) + INTERVAL %s SECOND) WHERE time_report IS NOT NULL", (seconds_diff,))
63 con.execute("UPDATE wrreport SET time_report = TIME(TIMESTAMP(date_report, time_report) + INTERVAL %s SECOND) WHERE time_report IS NOT NULL", (seconds_diff,))
64 con.execute("UPDATE wrreport SET date_entry = date_entry + INTERVAL %s SECOND", (seconds_diff,))
65 con.execute("UPDATE wrreport SET date_invalid = date_invalid + INTERVAL %s SECOND", (seconds_diff,))
66 con.execute("UPDATE wrreport SET delete_date = delete_date + INTERVAL %s SECOND", (seconds_diff,))
68 def test_bericht_list(self):
69 result = self.app.get('/bericht/list')
70 self.assertEqual(result.status_code, 200)
71 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
72 soup = bs4.BeautifulSoup(result.data, 'html.parser')
73 self.assertEqual(soup.title.text, 'Rodelbahnberichte')
75 def test_bericht_view(self):
76 result = self.app.get('/bericht/view/19591')
77 self.assertEqual(result.status_code, 200)
78 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
79 soup = bs4.BeautifulSoup(result.data, 'html.parser')
80 self.assertEqual(soup.title.text, 'Rodelbahnbericht')
81 self.assertIn('Brandstatt Alm', str(soup.table))
83 def test_bericht_change_date_invalid_twoweeks(self):
84 post_data = {'date_invalid': 'two_weeks', 'date_userdefined': '2018-01-30 18:26'}
85 result = self.app.post('/bericht/change_date_invalid/19591', data=post_data, follow_redirects=True)
86 self.assertEqual(result.status_code, 200)
87 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
88 soup = bs4.BeautifulSoup(result.data, 'html.parser')
89 self.assertEqual(soup.title.text, 'Rodelbahnbericht')
90 self.assertIn('Datum wurde erfolgreich geändert', str(soup))
92 def test_bericht_change_date_invalid_userdefined(self):
93 post_data = {'date_invalid': 'userdefined', 'date_userdefined': '2018-01-30 15:09'}
94 result = self.app.post('/bericht/change_date_invalid/19591', data=post_data, follow_redirects=True)
95 self.assertEqual(result.status_code, 200)
96 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
97 soup = bs4.BeautifulSoup(result.data, 'html.parser')
98 self.assertEqual(soup.title.text, 'Rodelbahnbericht')
99 self.assertIn('Datum wurde erfolgreich geändert', str(soup))
100 self.assertIn('2018-01-30 15:09:00', str(soup))
102 def test_gasthaus_list(self):
103 result = self.app.get('/gasthaus/list')
104 self.assertEqual(result.status_code, 200)
105 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
106 soup = bs4.BeautifulSoup(result.data, 'html.parser')
107 self.assertEqual(soup.title.text, 'Gasthäuser')
108 self.assertIn('Meißner', str(soup.table))
110 def test_gasthaus_view(self):
111 result = self.app.get('/gasthaus/view/362')
112 self.assertEqual(result.status_code, 200)
113 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
114 soup = bs4.BeautifulSoup(result.data, 'html.parser')
115 self.assertEqual(soup.title.text, 'Gasthaus')
116 self.assertIn('Meißner', str(soup))
118 def test_gasthaus_update(self):
119 result = self.app.get('/gasthaus/update', follow_redirects=True)
120 self.assertEqual(result.status_code, 200)
121 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
122 soup = bs4.BeautifulSoup(result.data, 'html.parser')
123 self.assertIn('Die Gasthausliste wurde erfolgreich aktualisiert.', str(soup))
125 def test_rodelbahn_list(self):
126 result = self.app.get('/rodelbahn/list')
127 self.assertEqual(result.status_code, 200)
128 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
129 soup = bs4.BeautifulSoup(result.data, 'html.parser')
130 self.assertEqual(soup.title.text, 'Rodelbahnen')
131 table = soup.find('table')
132 self.assertIsNotNone(table)
133 rows = table.find_all('tr')
134 self.assertEqual(len(rows), 9+1)
136 def test_rodelbahn_view(self):
137 result = self.app.get('/rodelbahn/view/926')
138 self.assertEqual(result.status_code, 200)
139 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
140 soup = bs4.BeautifulSoup(result.data, 'html.parser')
141 self.assertEqual(soup.title.text, 'Rodelbahn')
142 self.assertIn('Hühnerspiel', str(soup))
144 def test_rodelbahn_update(self):
145 result = self.app.get('/rodelbahn/update', follow_redirects=True)
146 self.assertEqual(result.status_code, 200)
147 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
148 soup = bs4.BeautifulSoup(result.data, 'html.parser')
149 self.assertIn('Die Rodelbahnliste wurde erfolgreich aktualisiert.', str(soup))
151 def test_rodelbahn_update_regioncache(self):
152 result = self.app.get('/rodelbahn/update_regioncache', follow_redirects=True)
153 self.assertEqual(result.status_code, 200)
154 self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
155 soup = bs4.BeautifulSoup(result.data, 'html.parser')
156 self.assertIn('Die Rodelbahneinträge in den Regionslisten wurden erfolgreich aktualisiert.', str(soup))