diff --git a/tests/test_parsers.py b/tests/test_parsers.py new file mode 100644 index 0000000..7042443 --- /dev/null +++ b/tests/test_parsers.py @@ -0,0 +1,134 @@ +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"