]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - tests/test_wradmin.py
4dce7bdbf0d5b7b3f5ca9ddcfdfd00a64ec277f5
[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     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))
38
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))
46
47
48 class TestDbWradmin(WradminTestBase):
49     def setUp(self):
50         super().setUp()
51         with wradmin.app.app_context():
52             # fill database
53             with open('tests/testdb.sql', 'r') as f:
54                 sql = f.read()
55             with wradmin.model.meta.engine.begin() as con:
56                 con.execute(sql)
57
58                 # update dates
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,))
67
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')
74
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))
82
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))
91
92     def test_gasthaus_list(self):
93         result = self.app.get('/gasthaus/list')
94         self.assertEqual(result.status_code, 200)
95         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
96         soup = bs4.BeautifulSoup(result.data, 'html.parser')
97         self.assertEqual(soup.title.text, 'Gasthäuser')
98         self.assertIn('Meißner', str(soup.table))
99
100     def test_gasthaus_view(self):
101         result = self.app.get('/gasthaus/view/362')
102         self.assertEqual(result.status_code, 200)
103         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
104         soup = bs4.BeautifulSoup(result.data, 'html.parser')
105         self.assertEqual(soup.title.text, 'Gasthaus')
106         self.assertIn('Meißner', str(soup))
107
108     def test_gasthaus_update(self):
109         result = self.app.get('/gasthaus/update', follow_redirects=True)
110         self.assertEqual(result.status_code, 200)
111         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
112         soup = bs4.BeautifulSoup(result.data, 'html.parser')
113         self.assertIn('Die Gasthausliste wurde erfolgreich aktualisiert.', str(soup))
114
115     def test_rodelbahn_list(self):
116         result = self.app.get('/rodelbahn/list')
117         self.assertEqual(result.status_code, 200)
118         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
119         soup = bs4.BeautifulSoup(result.data, 'html.parser')
120         self.assertEqual(soup.title.text, 'Rodelbahnen')
121         table = soup.find('table')
122         self.assertIsNotNone(table)
123         rows = table.find_all('tr')
124         self.assertEqual(len(rows), 9+1)
125
126     def test_rodelbahn_view(self):
127         result = self.app.get('/rodelbahn/view/926')
128         self.assertEqual(result.status_code, 200)
129         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
130         soup = bs4.BeautifulSoup(result.data, 'html.parser')
131         self.assertEqual(soup.title.text, 'Rodelbahn')
132         self.assertIn('Hühnerspiel', str(soup))
133
134     def test_rodelbahn_update(self):
135         result = self.app.get('/rodelbahn/update', follow_redirects=True)
136         self.assertEqual(result.status_code, 200)
137         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
138         soup = bs4.BeautifulSoup(result.data, 'html.parser')
139         self.assertIn('Die Rodelbahnliste wurde erfolgreich aktualisiert.', str(soup))
140
141     def test_rodelbahn_update_regioncache(self):
142         result = self.app.get('/rodelbahn/update_regioncache', follow_redirects=True)
143         self.assertEqual(result.status_code, 200)
144         self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
145         soup = bs4.BeautifulSoup(result.data, 'html.parser')
146         self.assertIn('Die Rodelbahneinträge in den Regionslisten wurden erfolgreich aktualisiert.', str(soup))