Select Git revision
parameters.list
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
tests.py 5.34 KiB
#!/usr/bin/env python3
import os
import unittest
import tempfile
import server as proto3
from flask_migrate import upgrade as db_upgrade
from models.database import ProtocolType, Protocol, DefaultTOP, TOP, Document, DecisionDocument, TodoState, Todo, Decision, MeetingReminder, Error, TodoMail, OldTodo, DefaultMeta, Meta
import sqlite3
def _create_db(sql_script, database_file):
connection = sqlite3.connect(database_file)
with open(sql_script, "r") as script_file:
connection.executescript(script_file.read())
connection.close()
def _upgrade_db(program_dir):
migrations_path = os.path.join(program_dir, "migrations")
db_upgrade(directory=migrations_path)
class GeneralTestCase(unittest.TestCase):
def _general_setup(self):
self.program_dir = os.getcwd()
proto3.app.config["TESTING"] = True
self.app = proto3.app.test_client()
def _create_tempdir(self):
self.tempdir = tempfile.TemporaryDirectory()
os.chdir(self.tempdir.name)
def _create_db(self, script_name):
self.database_file = "{}/{}".format(self.tempdir.name, "test-db.sqlite")
_create_db(os.path.join(self.program_dir, "dbdumps", "{}.sql".format(script_name)), self.database_file)
proto3.app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///{}".format(self.database_file)
with proto3.app.app_context():
_upgrade_db(self.program_dir)
def _general_teardown(self):
self.tempdir.cleanup()
os.chdir(self.program_dir)
def setUp(self):
pass
def tearDown(self):
pass
STATUS_OK = 200
STATUS_REDIRECT = 302
STATUS_METHOD = 405
class FullDBAnonymousTestCase(GeneralTestCase):
EXPECTED_SIMPLE_RESULTS = {
"/": (STATUS_OK, STATUS_METHOD),
"/documentation": (STATUS_REDIRECT, STATUS_METHOD),
"/types/list": (STATUS_REDIRECT, STATUS_METHOD),
"/protocols/list": (STATUS_OK, STATUS_METHOD),
"/todos/list": (STATUS_REDIRECT, STATUS_METHOD),
"/decisions/list": (STATUS_OK, STATUS_METHOD),
"/errors/list": (STATUS_REDIRECT, STATUS_METHOD),
"/todomails/list": (STATUS_REDIRECT, STATUS_METHOD),
"/login": (STATUS_OK, STATUS_OK),
"/logout": (STATUS_REDIRECT, STATUS_METHOD),
}
def setUp(self):
self._general_setup()
self._create_tempdir()
self._create_db("full")
def tearDown(self):
self._general_teardown()
def test_simple_status(self):
for route in self.EXPECTED_SIMPLE_RESULTS:
get_result = self.app.get(route)
post_result = self.app.post(route)
expected_get, expected_post = self.EXPECTED_SIMPLE_RESULTS[route]
assert get_result.status_code == expected_get
assert post_result.status_code == expected_post
def test_protocoltypes(self):
with proto3.app.app_context():
new_route = "/type/new"
assert self.app.get(new_route).status_code == STATUS_REDIRECT
assert self.app.post(new_route).status_code == STATUS_REDIRECT
protocoltypes = ProtocolType.query.all()
for protocoltype in protocoltypes:
show_route = "/type/show/{}".format(protocoltype.id)
assert self.app.get(show_route).status_code == STATUS_REDIRECT
assert self.app.post(show_route).status_code == STATUS_METHOD
edit_route = "/type/edit/{}".format(protocoltype.id)
assert self.app.get(edit_route).status_code == STATUS_REDIRECT
assert self.app.post(edit_route).status_code == STATUS_REDIRECT
delete_route = "/type/delete/{}".format(protocoltype.id)
assert self.app.get(delete_route).status_code == STATUS_REDIRECT
assert self.app.post(delete_route).status_code == STATUS_METHOD
new_reminder_route = "/type/reminders/new/{}".format(protocoltype.id)
assert self.app.get(new_reminder_route).status_code == STATUS_REDIRECT
assert self.app.post(new_reminder_route).status_code == STATUS_REDIRECT
new_top_route = "/type/tops/new/{}".format(protocoltype.id)
assert self.app.get(new_top_route).status_code == STATUS_REDIRECT
assert self.app.post(new_top_route).status_code == STATUS_REDIRECT
new_meta_route = "/defaultmeta/new/{}".format(protocoltype.id)
assert self.app.get(new_meta_route).status_code == STATUS_REDIRECT
assert self.app.post(new_meta_route).status_code == STATUS_REDIRECT
def test_protocols(self):
with proto3.app.app_context():
new_route = "/protocol/new"
assert self.app.get(new_route).status_code == STATUS_REDIRECT
assert self.app.post(new_route).status_code == STATUS_REDIRECT
protocols = Protocol.query.all()
for protocol in protocols:
visible = protocol.protocoltype.has_public_view_right(None, check_networks=False)
state_ok_or_redirect = STATUS_OK if visible else STATUS_REDIRECT
show_route = "/protocol/show/{}".format(protocol.id)
assert self.app.get(show_route).status_code == state_ok_or_redirect
assert self.app.post(show_route).status_code == STATUS_METHOD
if __name__ == "__main__":
unittest.main()