from __future__ import absolute_import, division, print_function

__metaclass__ = type

import pytest

from awx.conf.models import Setting


@pytest.mark.django_db
def test_setting_flat_value(run_module, admin_user):
    the_value = 'CN=service_account,OU=ServiceAccounts,DC=domain,DC=company,DC=org'
    result = run_module('tower_settings', dict(name='AUTH_LDAP_BIND_DN', value=the_value), admin_user)
    assert not result.get('failed', False), result.get('msg', result)
    assert result.get('changed'), result

    assert Setting.objects.get(key='AUTH_LDAP_BIND_DN').value == the_value


@pytest.mark.django_db
def test_setting_dict_value(run_module, admin_user):
    the_value = {'email': 'mail', 'first_name': 'givenName', 'last_name': 'surname'}
    result = run_module('tower_settings', dict(name='AUTH_LDAP_USER_ATTR_MAP', value=the_value), admin_user)
    assert not result.get('failed', False), result.get('msg', result)
    assert result.get('changed'), result

    assert Setting.objects.get(key='AUTH_LDAP_USER_ATTR_MAP').value == the_value


@pytest.mark.django_db
def test_setting_nested_type(run_module, admin_user):
    the_value = {'email': 'mail', 'first_name': 'givenName', 'last_name': 'surname'}
    result = run_module('tower_settings', dict(settings={'AUTH_LDAP_USER_ATTR_MAP': the_value}), admin_user)
    assert not result.get('failed', False), result.get('msg', result)
    assert result.get('changed'), result

    assert Setting.objects.get(key='AUTH_LDAP_USER_ATTR_MAP').value == the_value


@pytest.mark.django_db
def test_setting_bool_value(run_module, admin_user):
    for the_value in (True, False):
        result = run_module('tower_settings', dict(name='ACTIVITY_STREAM_ENABLED_FOR_INVENTORY_SYNC', value=the_value), admin_user)
        assert not result.get('failed', False), result.get('msg', result)
        assert result.get('changed'), result

        assert Setting.objects.get(key='ACTIVITY_STREAM_ENABLED_FOR_INVENTORY_SYNC').value is the_value
