from configparser import ConfigParser
import pytest

from deepfuze import config


@pytest.fixture(scope = 'module', autouse = True)
def before_all() -> None:
	config.CONFIG = ConfigParser()
	config.CONFIG.read_dict(
	{
		'str':
		{
			'valid': 'a',
			'unset': ''
		},
		'int':
		{
			'valid': '1',
			'unset': ''
		},
		'float':
		{
			'valid': '1.0',
			'unset': ''
		},
		'bool':
		{
			'valid': 'True',
			'unset': ''
		},
		'str_list':
		{
			'valid': 'a b c',
			'unset': ''
		},
		'int_list':
		{
			'valid': '1 2 3',
			'unset': ''
		},
		'float_list':
		{
			'valid': '1.0 2.0 3.0',
			'unset': ''
		}
	})


def test_get_str_value() -> None:
	assert config.get_str_value('str.valid') == 'a'
	assert config.get_str_value('str.unset', 'b') == 'b'
	assert config.get_str_value('str.unset') is None
	assert config.get_str_value('str.invalid') is None


def test_get_int_value() -> None:
	assert config.get_int_value('int.valid') == 1
	assert config.get_int_value('int.unset', '1') == 1
	assert config.get_int_value('int.unset') is None
	assert config.get_int_value('int.invalid') is None


def test_get_float_value() -> None:
	assert config.get_float_value('float.valid') == 1.0
	assert config.get_float_value('float.unset', '1.0') == 1.0
	assert config.get_float_value('float.unset') is None
	assert config.get_float_value('float.invalid') is None


def test_get_bool_value() -> None:
	assert config.get_bool_value('bool.valid') is True
	assert config.get_bool_value('bool.unset', 'False') is False
	assert config.get_bool_value('bool.unset') is None
	assert config.get_bool_value('bool.invalid') is None


def test_get_str_list() -> None:
	assert config.get_str_list('str_list.valid') == [ 'a', 'b', 'c' ]
	assert config.get_str_list('str_list.unset', 'c b a') == [ 'c', 'b', 'a' ]
	assert config.get_str_list('str_list.unset') is None
	assert config.get_str_list('str_list.invalid') is None


def test_get_int_list() -> None:
	assert config.get_int_list('int_list.valid') == [ 1, 2, 3 ]
	assert config.get_int_list('int_list.unset', '3 2 1') == [ 3, 2, 1 ]
	assert config.get_int_list('int_list.unset') is None
	assert config.get_int_list('int_list.invalid') is None


def test_get_float_list() -> None:
	assert config.get_float_list('float_list.valid') == [ 1.0, 2.0, 3.0 ]
	assert config.get_float_list('float_list.unset', '3.0 2.0 1.0') == [ 3.0, 2.0, 1.0 ]
	assert config.get_float_list('float_list.unset') is None
	assert config.get_float_list('float_list.invalid') is None
