import pytest

from flask import g
from flask_login import login_user, logout_user, current_user

import app as myapp
from app import db, create_app
from app.auth.models import User, Role, Permission
from app.scodoc import sco_bulletins_standard
from app.scodoc import notesdb as ndb


def truncate_database():
    "Erase content of all tables from current dept database"
    # use a stored SQL function, see createtables.sql
    ndb.SimpleQuery("SELECT truncate_tables('scodoc');", {})


@pytest.fixture()
def test_client():
    # Setup
    myapp.Config.TESTING = True
    myapp.Config.SQLALCHEMY_DATABASE_URI = "sqlite://"
    myapp.Config.SERVER_NAME = "test.gr"
    apptest = create_app()
    # Run tests:
    with apptest.test_client() as client:
        with apptest.app_context():
            with apptest.test_request_context():
                db.create_all()
                Role.insert_roles()
                u = User(user_name="admin")
                super_admin_role = Role.query.filter_by(name="SuperAdmin").first()
                u.add_role(super_admin_role, "TEST00")
                # u.set_password("admin")
                login_user(u)
                # VĂ©rifie que l'utilisateur bach existe
                u = User.query.filter_by(user_name="bach").first()
                if u is None:
                    u = User(user_name="bach")
                if not "Admin" in {r.name for r in u.roles}:
                    admin_role = Role.query.filter_by(name="Admin").first()
                    u.add_role(admin_role, "TEST00")
                db.session.add(u)
                ndb.set_sco_dept("TEST00")  # set db connection
                truncate_database()  # erase tables
                yield client
                # ndb.close_dept_connection()
                # Teardown:
                db.session.remove()
                db.drop_all()