]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - tests/test_wradmin.py
Follow redirects in tests that test update functions.
[philipp/winterrodeln/wradmin.git] / tests / test_wradmin.py
1 """How to test wradmin:
2
3 WRADMIN_SETTINGS=../wradmin/test.cfg python3 -m unittest tests.test_wradmin
4 """
5 import unittest
6 import bs4  # beautiful soup
7 import wradmin
8
9
10 class WradminTestBase(unittest.TestCase):
11     def setUp(self):
12         wradmin.app.config['TESTING'] = True
13         self.app = wradmin.app.test_client()
14
15
16 class TestNoDbWradmin(WradminTestBase):
17     def test_root(self):
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ü')
23
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')
30
31
32 class TestDbWradmin(WradminTestBase):
33     def setUp(self):
34         super().setUp()
35         with wradmin.app.app_context():
36             # fill database
37             with open('tests/testdb.sql', 'r') as f:
38                 sql = f.read()
39             with wradmin.model.meta.engine.begin() as con:
40                 con.execute(sql)
41
42                 # update dates
43                 seconds_diff, = con.execute("SELECT TIMESTAMPDIFF(SECOND, '2017-03-31 07:00', now())").fetchone()
44                 seconds_diff = int(seconds_diff)
45                 con.execute("UPDATE wrreport SET date_report = DATE(date_report + INTERVAL %s SECOND) WHERE time_report IS NULL", (seconds_diff,))
46                 con.execute("UPDATE wrreport SET date_report = DATE(TIMESTAMP(date_report, time_report) + INTERVAL %s SECOND) WHERE time_report IS NOT NULL", (seconds_diff,))
47                 con.execute("UPDATE wrreport SET time_report = TIME(TIMESTAMP(date_report, time_report) + INTERVAL %s SECOND) WHERE time_report IS NOT NULL", (seconds_diff,))
48                 con.execute("UPDATE wrreport SET date_entry = date_entry + INTERVAL %s SECOND", (seconds_diff,))
49                 con.execute("UPDATE wrreport SET date_invalid = date_invalid + INTERVAL %s SECOND", (seconds_diff,))
50                 con.execute("UPDATE wrreport SET delete_date = delete_date + INTERVAL %s SECOND", (seconds_diff,))
51
52     def test_bericht_list(self):
53         result = self.app.get('/bericht/list')
54         self.assertEqual(result.status_code, 200)
55         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
56         soup = bs4.BeautifulSoup(result.data, 'html.parser')
57         self.assertEqual(soup.title.text, 'Rodelbahnberichte')
58
59     def test_bericht_view(self):
60         result = self.app.get('/bericht/view/19591')
61         self.assertEqual(result.status_code, 200)
62         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
63         soup = bs4.BeautifulSoup(result.data, 'html.parser')
64         self.assertEqual(soup.title.text, 'Rodelbahnbericht')
65         self.assertIn('Brandstatt Alm', str(soup.table))
66
67     def test_gasthaus_list(self):
68         result = self.app.get('/gasthaus/list')
69         self.assertEqual(result.status_code, 200)
70         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
71         soup = bs4.BeautifulSoup(result.data, 'html.parser')
72         self.assertEqual(soup.title.text, 'Gasthäuser')
73         self.assertIn('Meißner', str(soup.table))
74
75     def test_gasthaus_view(self):
76         result = self.app.get('/gasthaus/view/362')
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, 'Gasthaus')
81         self.assertIn('Meißner', str(soup))
82
83     def test_gasthaus_update(self):
84         result = self.app.get('/gasthaus/update', follow_redirects=True)
85         self.assertEqual(result.status_code, 200)
86         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
87         soup = bs4.BeautifulSoup(result.data, 'html.parser')
88         self.assertIn('Die Gasthausliste wurde erfolgreich aktualisiert.', str(soup))
89
90     def test_rodelbahn_list(self):
91         result = self.app.get('/rodelbahn/list')
92         self.assertEqual(result.status_code, 200)
93         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
94         soup = bs4.BeautifulSoup(result.data, 'html.parser')
95         self.assertEqual(soup.title.text, 'Rodelbahnen')
96         table = soup.find('table')
97         self.assertIsNotNone(table)
98         rows = table.find_all('tr')
99         self.assertEqual(len(rows), 9+1)
100
101     def test_rodelbahn_view(self):
102         result = self.app.get('/rodelbahn/view/926')
103         self.assertEqual(result.status_code, 200)
104         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
105         soup = bs4.BeautifulSoup(result.data, 'html.parser')
106         self.assertEqual(soup.title.text, 'Rodelbahn')
107         self.assertIn('Hühnerspiel', str(soup))
108
109     def test_rodelbahn_update(self):
110         result = self.app.get('/rodelbahn/update', follow_redirects=True)
111         self.assertEqual(result.status_code, 200)
112         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
113         soup = bs4.BeautifulSoup(result.data, 'html.parser')
114         self.assertIn('Die Rodelbahnliste wurde erfolgreich aktualisiert.', str(soup))
115
116     def test_rodelbahn_update_regioncache(self):
117         result = self.app.get('/rodelbahn/update_regioncache', follow_redirects=True)
118         self.assertEqual(result.status_code, 200)
119         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
120         soup = bs4.BeautifulSoup(result.data, 'html.parser')
121         self.assertIn('Die Rodelbahneinträge in den Regionslisten wurden erfolgreich aktualisiert.', str(soup))