Source code for aiida.backends.tests.manage.configuration.test_options

# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################
"""Tests for the configuration options."""
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import

from aiida.backends.testbase import AiidaTestCase
from aiida.backends.tests.utils.configuration import with_temporary_config_instance
from aiida.manage.configuration.options import get_option, get_option_names, parse_option, Option, CONFIG_OPTIONS
from aiida.manage.configuration import get_config, get_config_option


[docs]class TestConfigurationOptions(AiidaTestCase): """Tests for the Options class."""
[docs] def test_get_option_names(self): """Test `get_option_names` function.""" self.assertEqual(get_option_names(), CONFIG_OPTIONS.keys())
[docs] def test_get_option(self): """Test `get_option` function.""" with self.assertRaises(ValueError): get_option('no_existing_option') option_name = list(CONFIG_OPTIONS)[0] option = get_option(option_name) self.assertIsInstance(option, Option) self.assertEqual(option.name, option_name)
[docs] def test_parse_option(self): """Test `parse_option` function.""" with self.assertRaises(ValueError): parse_option('logging.aiida_loglevel', 1) with self.assertRaises(ValueError): parse_option('logging.aiida_loglevel', 'INVALID_LOG_LEVEL')
[docs] def test_options(self): """Test that all defined options can be converted into Option namedtuples.""" for option_name, option_settings in CONFIG_OPTIONS.items(): option = get_option(option_name) self.assertEqual(option.name, option_name) self.assertEqual(option.key, option_settings['key']) self.assertEqual(option.valid_type, option_settings['valid_type']) self.assertEqual(option.valid_values, option_settings['valid_values']) self.assertEqual(option.default, option_settings['default']) self.assertEqual(option.description, option_settings['description'])
@with_temporary_config_instance def test_get_config_option_default(self): """Tests that `get_option` return option default if not specified globally or for current profile.""" option_name = 'logging.aiida_loglevel' option = get_option(option_name) # If we haven't set the option explicitly, `get_config_option` should return the option default option_value = get_config_option(option_name) self.assertEqual(option_value, option.default) @with_temporary_config_instance def test_get_config_option_profile_specific(self): """Tests that `get_option` correctly gets a configuration option if specified for the current profile.""" config = get_config() profile = config.current_profile option_name = 'logging.aiida_loglevel' option_value_profile = 'WARNING' # Setting a specific value for the current profile which should then be returned by `get_config_option` config.option_set(option_name, option_value_profile, scope=profile.name) option_value = get_config_option(option_name) self.assertEqual(option_value, option_value_profile) @with_temporary_config_instance def test_get_config_option_global(self): """Tests that `get_option` correctly agglomerates upwards and so retrieves globally set config options.""" config = get_config() option_name = 'logging.aiida_loglevel' option_value_global = 'CRITICAL' # Setting a specific value globally which should then be returned by `get_config_option` due to agglomeration config.option_set(option_name, option_value_global) option_value = get_config_option(option_name) self.assertEqual(option_value, option_value_global)