# -*- coding: utf-8 -*-

"""\
© Copyright. All rights reserved.

"""

from __future__ import unicode_literals

from unittest import TestCase

try:
    from unittest.mock import patch
except ImportError as _:
    from mock import patch

try:
    from configparser import SafeConfigParser  # before alias is removed
except ImportError as _:
    from configparser import ConfigParser as SafeConfigParser  # after alias is removed

from primordial.config import FileConfig


UNSECTIONED_CONFIG = """[config-default]
key1=default1
key2=default2
key3=default3

my.key2=my2
my.key3=my3

my.service.key3=service3
my.service.bool1=true
my.service.int1=100
my.service.float1=10.999

my.otherservice.key1=bad1
my.otherservice.key2=bad2
my.otherservice.key3=bad3
"""


class ConfigTests(TestCase):
    @patch('primordial.config.SafeConfigParser', autoSpec=True)
    def test_unsectioned_config(self, mock_config_constructor):
        parser = SafeConfigParser(default_section='config-default')
        parser.read_string(UNSECTIONED_CONFIG)
        mock_config_constructor.return_value = parser

        config = FileConfig(service_prefix='my.service')

        self.assertEqual(config.get('key1'), 'default1')
        self.assertEqual(config.get('key2'), 'my2')
        self.assertEqual(config.get('key3'), 'service3')
        self.assertEqual(config.get('key0'), None)
        self.assertEqual(config.get('key0', 'defarg'), 'defarg')
        self.assertEqual(config.get_bool('bool1'), True)
        self.assertEqual(config.get_int('int1'), 100)
        self.assertEqual(config.get_float('float1'), 10.999)

    @patch('primordial.config.SafeConfigParser', autoSpec=True)
    def test_unsectioned_config_no_prefix(self, mock_config_constructor):
        parser = SafeConfigParser(default_section='config-default')
        parser.read_string(UNSECTIONED_CONFIG)
        mock_config_constructor.return_value = parser

        config = FileConfig()

        self.assertEqual(config.get('key1'), 'default1')
        self.assertEqual(config.get('key2'), 'default2')
        self.assertEqual(config.get('key3'), 'default3')
        self.assertEqual(config.get('my.key2'), 'my2')
        self.assertEqual(config.get('my.key3'), 'my3')
        self.assertEqual(config.get('my.service.key3'), 'service3')
        self.assertEqual(config.get('my.otherservice.key1'), 'bad1')
        self.assertEqual(config.get('my.otherservice.key2'), 'bad2')
        self.assertEqual(config.get('my.otherservice.key3'), 'bad3')
