diff --git a/src/configuration.py b/src/configuration.py index 4548c4e5..41aadf1e 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -25,7 +25,10 @@ def load_configuration(self, filename: str) -> None: with open(filename, encoding="utf-8") as fin: config_dict = yaml.safe_load(fin) logger.info("Loaded configuration: %s", config_dict) - self._configuration = Configuration(**config_dict) + self.init_from_dict(config_dict) + + def init_from_dict(self, config_dict: dict[Any, Any]): + self._configuration = Configuration(**config_dict) @property def configuration(self) -> Configuration: diff --git a/tests/integration/test_configuration.py b/tests/integration/test_configuration.py new file mode 100644 index 00000000..45def940 --- /dev/null +++ b/tests/integration/test_configuration.py @@ -0,0 +1,28 @@ +"""Integration tests for configuration loading and handling.""" + +import pytest +from src.configuration import configuration + + +@pytest.fixture +def configuration_filename(): + return "tests/configuration/lightspeed-stack.yaml" + + +def test_default_configuration(): + cfg = configuration + assert cfg is not None + with pytest.raises(Exception, match="logic error: configuration is not loaded"): + configuration.configuration + + +def test_loading_proper_configuration(configuration_filename): + cfg = configuration + cfg.load_configuration(configuration_filename) + assert cfg is not None + assert cfg.configuration is not None + assert cfg.llama_stack_configuration is not None + name = cfg.configuration.name + assert name == "foo bar baz" + ls_config = cfg.llama_stack_configuration + assert ls_config.url == "http://localhost:8321" diff --git a/tests/unit/test_configuration.py b/tests/unit/test_configuration.py index 9b80a9e5..4d01c596 100644 --- a/tests/unit/test_configuration.py +++ b/tests/unit/test_configuration.py @@ -1,8 +1,58 @@ """Unit tests for functions defined in src/configuration.py.""" -from src.configuration import configuration +import pytest +from src.configuration import AppConfig def test_default_configuration(): - cfg = configuration + cfg = AppConfig() assert cfg is not None + + # configuration is not loaded + with pytest.raises(Exception, match="logic error: configuration is not loaded"): + # try to read property + cfg.configuration + + with pytest.raises(Exception, match="logic error: configuration is not loaded"): + # try to read property + cfg.llama_stack_configuration + + +def test_configuration_is_singleton(): + cfg1 = AppConfig() + cfg2 = AppConfig() + assert cfg1 == cfg2 + + +def test_init_from_dict(): + config_dict = { + "name": "foo", + "llama_stack": { + "api_key": "xyzzy", + "url": "http://x.y.com:1234", + "use_as_library_client": False, + }, + } + cfg = AppConfig() + cfg.init_from_dict(config_dict) + assert cfg.configuration is not None + assert cfg.llama_stack_configuration is not None + + +def test_load_proper_configuration(tmpdir): + cfg_filename = tmpdir / "config.yaml" + with open(cfg_filename, "w") as fout: + fout.write( + """ +name: foo bar baz +llama_stack: + use_as_library_client: false + url: http://localhost:8321 + api_key: xyzzy + """ + ) + + cfg = AppConfig() + cfg.load_configuration(cfg_filename) + assert cfg.configuration is not None + assert cfg.llama_stack_configuration is not None