Add config parser functionality

Signed-off-by: Václav Valíček <valicek1994@gmail.com>
This commit is contained in:
2022-07-24 21:14:05 +02:00
parent b31b2e199b
commit 8e92bc70a7
9 changed files with 265 additions and 11 deletions

View File

@@ -66,7 +66,7 @@ def test_set_property():
# invalid type
with pytest.raises(ValueError) as exc:
x._set_property("cloner_interval", "č")
assert exc.exconly() == "ValueError: Invalid value for key cloner_interval: type is <class 'str'>"
assert exc.exconly() == "ValueError: Invalid value for key cloner_interval: type is <class 'str'> instead of <class 'int'>, conversion failed"
x._set_property("cloner_project_name", "č")
@@ -74,3 +74,15 @@ def test_set_property():
with pytest.raises(KeyError) as exc:
x._set_property("nonexistent_key", 888)
assert exc.exconly() == "KeyError: 'nonexistent_key is not recognized config option'"
# boolean conversion
x._set_property("cloner_submodules", "1")
assert x.cloner_submodules == True
x._set_property("cloner_submodules", "0")
assert x.cloner_submodules == False
# integer conversion
x._set_property("cloner_interval", 60)
assert x.cloner_interval == 60

View File

@@ -0,0 +1,72 @@
from repo_cloner.lib.cloner_config import ClonerConfigParser
import pytest
from repo_cloner.lib.config_file_not_found_error import ConfigFileNotFoundError
from pathlib import Path
@pytest.fixture
def config_path() -> Path:
path = Path(__file__).parent.parent
return path.joinpath("_support_data", "config")
def test_no_config_file():
with pytest.raises(ConfigFileNotFoundError) as e:
x = ClonerConfigParser("/tmp/path/that/does/not/exist")
assert e.__str__() == "<ExceptionInfo ConfigFileNotFoundError('/tmp/path/that/does/not/exist') tblen=2>"
def test_valid_config(config_path: Path):
cfg = config_path.joinpath("valid.cfg")
x = ClonerConfigParser(cfg)
assert x.invalid == False
assert x.invalid_lines == []
c = x.config
assert c.cloner_project_name == "some-random-project"
assert c.cloner_repo_url == "git@git.somerandomserver.test:/path"
assert c.cloner_interval == 666
assert c.cloner_submodules == True
assert c.cloner_submodule_depth == 500000
def test_empty_config(config_path: Path):
cfg = config_path.joinpath("empty.cfg")
x = ClonerConfigParser(cfg)
assert x.invalid == False
assert x.invalid_lines == []
c = x.config
assert c.cloner_project_name == ""
assert c.cloner_repo_url == ""
assert c.cloner_interval == 5
assert c.cloner_submodules == True
assert c.cloner_submodule_depth == 50000
def test_invalid_config(config_path: Path, caplog):
cfg = config_path.joinpath("invalid.cfg")
with caplog.at_level(30):
x = ClonerConfigParser(cfg)
# two invalid lines
assert x.invalid == True
assert x.invalid_lines == [
('invalid_option1', None),
('invalid_option', "2"),
]
# test logging
assert any(
(r.levelname == "CRITICAL" and r.message == "'invalid_option is not recognized config option'")
for r in caplog.records
)
assert any(
(r.levelname == "WARNING" and r.message == "Line 'invalid_option1' has invalid format!")
for r in caplog.records
)
c = x.config
assert c.cloner_project_name == "some-random-project"
assert c.cloner_repo_url == "git@git.somerandomserver.test:/path"
assert c.cloner_interval == 666
assert c.cloner_submodules == True
assert c.cloner_submodule_depth == 500000

View File

@@ -102,3 +102,25 @@ def test_has_config(tmp_path: PosixPath):
tmp_path.joinpath("config", "cloner.cfg").touch()
assert X.has_config
def test_config_file(tmp_path: PosixPath):
X = RepoDirStructure(tmp_path)
assert X.config_file == tmp_path.joinpath("config", "cloner.cfg").__str__()
def test_get_config(tmp_path: PosixPath):
tmp_path.joinpath("config").mkdir()
tmp_path.joinpath("cache").mkdir()
tmp_path.joinpath("repos").mkdir()
X = RepoDirStructure(tmp_path)
# no file provided
with pytest.raises(ConfigFileNotFoundError) as excinfo:
X.config
# create config file
tmp_path.joinpath("config", "cloner.cfg").touch()
X = RepoDirStructure(tmp_path)
assert X.has_config == True
assert 5 == X.config.cloner_interval