]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/commitdiff
Add basic unittests for wradmin.
authorphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Fri, 20 Oct 2017 22:09:37 +0000 (22:09 +0000)
committerphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Fri, 20 Oct 2017 22:09:37 +0000 (22:09 +0000)
git-svn-id: http://www.winterrodeln.org/svn/wradmin/trunk@2705 7aebc617-e5e2-0310-91dc-80fb5f6d2477

tests/test_wradmin.py [new file with mode: 0644]

diff --git a/tests/test_wradmin.py b/tests/test_wradmin.py
new file mode 100644 (file)
index 0000000..6d942e4
--- /dev/null
@@ -0,0 +1,68 @@
+"""How to test wradmin:
+
+WRADMIN_SETTINGS=../wradmin/test.cfg python3 -m unittest tests/test_wradmin.py
+"""
+import unittest
+import xml.etree.ElementTree as et
+import sqlalchemy
+from sqlalchemy.engine.url import URL, make_url
+import bs4  # beautiful soup
+import wradmin
+
+
+class WradminTestBase(unittest.TestCase):
+    def setUp(self):
+        wradmin.app.config['TESTING'] = True
+        self.app = wradmin.app.test_client()
+
+
+class TestNoDbWradmin(WradminTestBase):
+    def test_root(self):
+        result = self.app.get('/')
+        self.assertEqual(result.status_code, 200)
+        self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
+        soup = bs4.BeautifulSoup(result.data, 'html.parser')
+        self.assertEqual(soup.title.text, 'Hauptmenü')
+
+
+class TestDbWradmin(WradminTestBase):
+    def setUp(self):
+        super().setUp()
+        with wradmin.app.app_context():
+            # create database
+            uri = make_url(wradmin.app.config['DATABASE_URI'])
+            self.uri = uri
+            uri_nodb = URL(uri.drivername, host=uri.host, port=uri.port, username=uri.username, password=uri.password, query=uri.query)
+            engine_nodb = sqlalchemy.create_engine(uri_nodb)
+            engine_nodb.execute("DROP DATABASE IF EXISTS {}".format(uri.database))
+            engine_nodb.execute("CREATE DATABASE {} CHARACTER SET = '{}'".format(uri.database, 'UTF8'))
+
+            # connect to database
+            self.engine = sqlalchemy.create_engine(uri)
+            con = self.engine.connect()
+
+            # fill database
+            with open('tests/testdb.sql', 'r') as f:
+                sql = f.read()
+            con.execute(sql)
+
+            # update dates
+            seconds_diff, = con.execute("SELECT TIMESTAMPDIFF(SECOND, '2017-03-31 07:00', now())").fetchone()
+            seconds_diff = int(seconds_diff)
+            con.execute("UPDATE wrreport SET date_report = DATE(date_report + INTERVAL %s SECOND) WHERE time_report IS NULL", (seconds_diff,))
+            con.execute("UPDATE wrreport SET date_report = DATE(TIMESTAMP(date_report, time_report) + INTERVAL %s SECOND) WHERE time_report IS NOT NULL", (seconds_diff,))
+            con.execute("UPDATE wrreport SET time_report = TIME(TIMESTAMP(date_report, time_report) + INTERVAL %s SECOND) WHERE time_report IS NOT NULL", (seconds_diff,))
+            con.execute("UPDATE wrreport SET date_entry = date_entry + INTERVAL %s SECOND", (seconds_diff,))
+            con.execute("UPDATE wrreport SET date_invalid = date_invalid + INTERVAL %s SECOND", (seconds_diff,))
+            con.execute("UPDATE wrreport SET delete_date = delete_date + INTERVAL %s SECOND", (seconds_diff,))
+
+    def test_reports(self):
+        result = self.app.get('/bericht/list')
+        self.assertEqual(result.status_code, 200)
+        self.assertTrue(result.data.startswith(b'<!DOCTYPE html'))
+        soup = bs4.BeautifulSoup(result.data, 'html.parser')
+        self.assertEqual(soup.title.text, 'Rodelbahnberichte')
+
+    def tearDown(self):
+        with wradmin.app.app_context():
+            self.engine.execute("DROP DATABASE {}".format(self.uri.database))