def test_update_from_path(path_to_config_file_on_disk): cfg = Config() # check that the default is still the default cfg.update_config() assert cfg["core"]["db_debug"] == False cfg.update_config(path=path_to_config_file_on_disk) assert cfg['a'] == 13 assert cfg['user']['foo'] == '2' expected_path = os.path.join(path_to_config_file_on_disk, 'qcodesrc.json') assert cfg.current_config_path == expected_path
def test_update_from_path(path_to_config_file_on_disk): with default_config(): cfg = Config() # check that the default is still the default assert cfg["core"]["db_debug"] is False cfg.update_config(path=path_to_config_file_on_disk) assert cfg['core']['db_debug'] is True # check that the settings NOT specified in our config file on path # are still saved as configurations assert cfg['gui']['notebook'] is True assert cfg['station_configurator']['default_folder'] == '.' expected_path = os.path.join(path_to_config_file_on_disk, 'qcodesrc.json') assert cfg.current_config_path == expected_path
class TestConfig(TestCase): def setUp(self): self.conf = Config() def test_missing_config_file(self): with self.assertRaises(FileNotFoundError): self.conf.load_config("./missing.json") @patch.object(Config, 'current_schema', new_callable=PropertyMock) @patch.object(Config, 'env_file_name', new_callable=PropertyMock) @patch.object(Config, 'load_config') @patch('os.path.isfile') @unittest.skipIf(Path.cwd() == Path.home(), 'This test requires that working dir is different from' 'homedir.') def test_default_config_files(self, isfile, load_config, env, schema): # don't try to load custom schemas self.conf.schema_cwd_file_name = None self.conf.schema_home_file_name = None self.conf.schema_env_file_name = None schema.return_value = SCHEMA env.return_value = ENV_KEY isfile.return_value = True load_config.side_effect = partial(side_effect, GOOD_CONFIG_MAP) self.conf.defaults, self.defaults_schema = self.conf.load_default() config = self.conf.update_config() self.assertEqual(config, CONFIG) @patch.object(Config, 'current_schema', new_callable=PropertyMock) @patch.object(Config, 'env_file_name', new_callable=PropertyMock) @patch.object(Config, 'load_config') @patch('os.path.isfile') @unittest.skipIf(Path.cwd() == Path.home(), 'This test requires that working dir is different from' 'homedir.') def test_bad_config_files(self, isfile, load_config, env, schema): # don't try to load custom schemas self.conf.schema_cwd_file_name = None self.conf.schema_home_file_name = None self.conf.schema_env_file_name = None schema.return_value = SCHEMA env.return_value = ENV_KEY isfile.return_value = True load_config.side_effect = partial(side_effect, BAD_CONFIG_MAP) with self.assertRaises(jsonschema.exceptions.ValidationError): self.conf.defaults, self.defaults_schema = self.conf.load_default() self.conf.update_config() @patch.object(Config, 'current_schema', new_callable=PropertyMock) @patch.object(Config, 'env_file_name', new_callable=PropertyMock) @patch.object(Config, 'load_config') @patch('os.path.isfile') @patch("builtins.open", mock_open(read_data=USER_SCHEMA)) @unittest.skipIf(Path.cwd() == Path.home(), 'This test requires that working dir is different from' 'homedir.') def test_user_schema(self, isfile, load_config, env, schema): schema.return_value = copy.deepcopy(SCHEMA) env.return_value = ENV_KEY isfile.return_value = True load_config.side_effect = partial(side_effect, GOOD_CONFIG_MAP) self.conf.defaults, self.defaults_schema = self.conf.load_default() config = self.conf.update_config() self.assertEqual(config, CONFIG) @patch.object(Config, 'current_schema', new_callable=PropertyMock) @patch.object(Config, 'env_file_name', new_callable=PropertyMock) @patch.object(Config, 'load_config') @patch('os.path.isfile') @patch("builtins.open", mock_open(read_data=USER_SCHEMA)) def test_bad_user_schema(self, isfile, load_config, env, schema): schema.return_value = copy.deepcopy(SCHEMA) env.return_value = ENV_KEY isfile.return_value = True load_config.side_effect = partial(side_effect, BAD_CONFIG_MAP) with self.assertRaises(jsonschema.exceptions.ValidationError): self.conf.defaults, self.defaults_schema = self.conf.load_default() self.conf.update_config() @patch.object(Config, "current_config", new_callable=PropertyMock) def test_update_user_config(self, config): # deep copy because we mutate state config.return_value = copy.deepcopy(CONFIG) self.conf.add("foo", "bar") self.assertEqual(self.conf.current_config, UPDATED_CONFIG) @patch.object(Config, 'current_schema', new_callable=PropertyMock) @patch.object(Config, "current_config", new_callable=PropertyMock) def test_update_and_validate_user_config(self, config, schema): self.maxDiff = None schema.return_value = copy.deepcopy(SCHEMA) # deep copy because we mutate state config.return_value = copy.deepcopy(CONFIG) self.conf.add("foo", "bar", "string", "foo", "bar") self.assertEqual(self.conf.current_config, UPDATED_CONFIG) self.assertEqual(self.conf.current_schema, UPDATED_SCHEMA)