]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - tests/test_wradmin.py
Add test_bericht_change_date_invalid_userdefined.
[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_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))
101
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))
109
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))
117
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))
124
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)
135
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))
143
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))
150
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))