import os
import warnings

import arango
import pytest
import requests
from arango import ArangoClient, exceptions
from django.core.management import call_command
from django.db.backends.base.base import BaseDatabaseWrapper

from arangodb_driver import base


def test_instance():
    settings_dict = {
    }

    driver = base.DatabaseWrapper(settings_dict)
    assert isinstance(driver, BaseDatabaseWrapper)

def test_connection_fail():
    settings_dict_wrong_user = {
        'NAME': 'teste_python',
        'ENGINE': 'django-arango-driver',
        'TIME_ZONE': None,
        'CONN_MAX_AGE': None,
        'OPTIONS': (),
        'USER': 'fake_user',
        'PORT': '8529',
        'PASSWORD': 'omoomo',
        'HOST': 'localhost',
        'AUTOCOMMIT': True,
    }
    settings_dict_wrong_port = {
        'NAME': 'teste_python',
        'ENGINE': 'django-arango-driver',
        'TIME_ZONE': None,
        'CONN_MAX_AGE': None,
        'OPTIONS': (),
        'USER': 'fake_user',
        'PORT': '5555',
        'PASSWORD': 'omoomo',
        'HOST': 'localhost',
        'AUTOCOMMIT': True,
    }
    driver = base.DatabaseWrapper(settings_dict_wrong_user)
    driver.connect()
    assert isinstance(driver.connection, ArangoClient)
    with pytest.raises(arango.exceptions.ServerConnectionError):
        driver.ensure_connection()

    driver = base.DatabaseWrapper(settings_dict_wrong_port)
    driver.connect()
    assert isinstance(driver.connection, ArangoClient)
    with pytest.raises(requests.exceptions.ConnectionError):
        driver.ensure_connection()


def test_connection_ok():
    settings_dict = {
        'NAME': 'teste_python',
        'ENGINE': 'django-arango-driver',
        'TIME_ZONE': None,
        'CONN_MAX_AGE': None,
        'OPTIONS': (),
        'USER': 'root',
        'PORT': '8529',
        'PASSWORD': 'omoomo',
        'HOST': 'localhost',
        'AUTOCOMMIT': True,
    }
    warnings.warn("Root user used in tests.")
    driver = base.DatabaseWrapper(settings_dict)
    driver.connect()
    assert isinstance(driver.connection, ArangoClient)
    driver.ensure_connection()


def test_start_django_app():
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sample_project.settings")
    import django
    django.setup()


# def test_make_migrations():
#     call_command('makemigrations')