Skip to content
Snippets Groups Projects
Select Git revision
  • efdac5b6ec67713618c0228f5d46178dbebd50f6
  • master default protected
  • forbid-save-as
  • upload-via-token
  • moodle-integration
  • patch-double-tap-seek
  • patch_datum_anzeigen
  • patch_raum_anzeigen
  • intros
  • live_sources
  • bootstrap4
  • modules
12 results

chapters.py

Blame
  • Forked from Video AG Infrastruktur / website
    Source project has a limited visibility.
    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()