from id_configurator.config import Configuration from id_configurator.context import Context from id_configurator.modules.ruby import RubyModule CONFIG_WITH_REPO = { "uuid": "12345678-1234-5678-1234-567812345678", "organisation": "InterDiode", "configurations": { "ruby": {"repositories": [{"name": "demo", "url": "https://example.invalid/"}]} }, } CONFIG_WITH_TWO_REPOS = { "uuid": "12345678-1234-5678-1234-567812345678", "organisation": "InterDiode", "configurations": { "ruby": { "repositories": [ {"name": "demo", "url": "https://example.invalid/"}, {"name": "other", "url": "https://other.invalid/"}, ] } }, } EMPTY_CONFIG = { "uuid": "12345678-1234-5678-1234-567812345678", "organisation": "InterDiode", } def make_config(data: dict) -> Configuration: return Configuration.model_validate(data) def test_is_relevant_false_when_no_repositories(tmp_path) -> None: context = Context(config=make_config(EMPTY_CONFIG), dst=tmp_path / "dst", src=None) assert RubyModule().is_relevant(context) is False def test_is_relevant_true_with_repository(tmp_path) -> None: context = Context( config=make_config(CONFIG_WITH_REPO), dst=tmp_path / "dst", src=None ) assert RubyModule().is_relevant(context) is True def test_apply_writes_gemrc(tmp_path) -> None: dst = tmp_path / "dst" context = Context(config=make_config(CONFIG_WITH_REPO), dst=dst, src=None) RubyModule().apply(context) expected = ":sources:\n- https://example.invalid/\n" assert (dst / "usr/local/etc/gemrc").read_text(encoding="utf-8") == expected assert (dst / "etc/gemrc").read_text(encoding="utf-8") == expected def test_apply_writes_multiple_sources_in_order(tmp_path) -> None: dst = tmp_path / "dst" context = Context(config=make_config(CONFIG_WITH_TWO_REPOS), dst=dst, src=None) RubyModule().apply(context) expected = ":sources:\n- https://example.invalid/\n- https://other.invalid/\n" assert (dst / "usr/local/etc/gemrc").read_text(encoding="utf-8") == expected assert (dst / "etc/gemrc").read_text(encoding="utf-8") == expected