import pytest from confdoc.parsers.json_parser import JsonParser from confdoc.parsers.yaml_parser import YamlParser from confdoc.parsers.toml_parser import TomlParser from confdoc.parsers.factory import ConfigParserFactory class TestJsonParser: def test_parse_valid_json(self): parser = JsonParser() content = '{"name": "test", "value": 123}' result = parser.parse(content) assert result == {"name": "test", "value": 123} def test_parse_nested_json(self): parser = JsonParser() content = '{"app": {"name": "test", "version": "1.0"}}' result = parser.parse(content) assert result == {"app": {"name": "test", "version": "1.0"}} def test_parse_array_json(self): parser = JsonParser() content = '[1, 2, 3, "test"]' result = parser.parse(content) assert result == [1, 2, 3, "test"] def test_dump_json(self): parser = JsonParser() data = {"name": "test", "value": 123} result = parser.dump(data) assert '"name": "test"' in result assert '"value": 123' in result def test_get_format(self): parser = JsonParser() assert parser.get_format() == "json" class TestYamlParser: def test_parse_valid_yaml(self): parser = YamlParser() content = "name: test\nvalue: 123" result = parser.parse(content) assert result == {"name": "test", "value": 123} def test_parse_nested_yaml(self): parser = YamlParser() content = "app:\n name: test\n version: '1.0'" result = parser.parse(content) assert result == {"app": {"name": "test", "version": "1.0"}} def test_parse_list_yaml(self): parser = YamlParser() content = "items:\n - item1\n - item2" result = parser.parse(content) assert result == {"items": ["item1", "item2"]} def test_get_format(self): parser = YamlParser() assert parser.get_format() == "yaml" class TestTomlParser: def test_parse_valid_toml(self): parser = TomlParser() content = 'name = "test"\nvalue = 123' result = parser.parse(content) assert result["name"] == "test" assert result["value"] == 123 def test_parse_table_toml(self): parser = TomlParser() content = '[app]\nname = "test"\nversion = "1.0"' result = parser.parse(content) assert result["app"]["name"] == "test" assert result["app"]["version"] == "1.0" def test_get_format(self): parser = TomlParser() assert parser.get_format() == "toml" class TestConfigParserFactory: def test_get_json_parser(self): factory = ConfigParserFactory() parser = factory.get_parser("json") assert isinstance(parser, JsonParser) def test_get_yaml_parser(self): factory = ConfigParserFactory() parser = factory.get_parser("yaml") assert isinstance(parser, YamlParser) def test_get_toml_parser(self): factory = ConfigParserFactory() parser = factory.get_parser("toml") assert isinstance(parser, TomlParser) def test_get_parser_for_json_file(self): factory = ConfigParserFactory() parser = factory.get_parser_for_file("config.json") assert isinstance(parser, JsonParser) def test_get_parser_for_yaml_file(self): factory = ConfigParserFactory() parser = factory.get_parser_for_file("config.yaml") assert isinstance(parser, YamlParser) def test_get_parser_for_yml_file(self): factory = ConfigParserFactory() parser = factory.get_parser_for_file("config.yml") assert isinstance(parser, YamlParser) def test_get_parser_for_toml_file(self): factory = ConfigParserFactory() parser = factory.get_parser_for_file("config.toml") assert isinstance(parser, TomlParser) def test_invalid_format_raises_error(self): factory = ConfigParserFactory() with pytest.raises(ValueError): factory.get_parser("invalid") def test_detect_json_format(self): factory = ConfigParserFactory() assert factory.detect_format('{"key": "value"}') == "json" def test_detect_yaml_format(self): factory = ConfigParserFactory() assert factory.detect_format("key: value") == "yaml" def test_detect_toml_format(self): factory = ConfigParserFactory() assert factory.detect_format('key = "value"') == "toml"