import pytest from moulinette.actionsmap import ( CommentParameter, AskParameter, PatternParameter, RequiredParameter, ActionsMap, ) from moulinette.interfaces import BaseActionsMapParser from moulinette.core import MoulinetteError @pytest.fixture def iface(): return "iface" def test_comment_parameter_bad_bool_value(iface, caplog): comment = CommentParameter(iface) assert comment.validate(True, "a") == "a" assert any("expecting a non-empty string" in message for message in caplog.messages) def test_comment_parameter_bad_empty_string(iface, caplog): comment = CommentParameter(iface) assert comment.validate("", "a") == "a" assert any("expecting a non-empty string" in message for message in caplog.messages) def test_comment_parameter_bad_type(iface): comment = CommentParameter(iface) with pytest.raises(TypeError): comment.validate({}, "b") def test_ask_parameter_bad_bool_value(iface, caplog): ask = AskParameter(iface) assert ask.validate(True, "a") == "a" assert any("expecting a non-empty string" in message for message in caplog.messages) def test_ask_parameter_bad_empty_string(iface, caplog): ask = AskParameter(iface) assert ask.validate("", "a") == "a" assert any("expecting a non-empty string" in message for message in caplog.messages) def test_ask_parameter_bad_type(iface): ask = AskParameter(iface) with pytest.raises(TypeError): ask.validate({}, "b") def test_pattern_parameter_bad_str_value(iface, caplog): pattern = PatternParameter(iface) assert pattern.validate("", "a") == ["", "pattern_not_match"] assert any("expecting a list" in message for message in caplog.messages) @pytest.mark.parametrize( "iface", [[], ["pattern_alone"], ["pattern", "message", "extra stuff"]] ) def test_pattern_parameter_bad_list_len(iface): pattern = PatternParameter(iface) with pytest.raises(TypeError): pattern.validate(iface, "a") def test_required_paremeter_missing_value(iface): required = RequiredParameter(iface) with pytest.raises(MoulinetteError) as exception: required(True, "a", "") assert "is required" in str(exception) def test_actions_map_unknown_authenticator(monkeypatch, tmp_path): monkeypatch.setenv("MOULINETTE_DATA_DIR", str(tmp_path)) actionsmap_dir = actionsmap_dir = tmp_path / "actionsmap" actionsmap_dir.mkdir() amap = ActionsMap(BaseActionsMapParser) with pytest.raises(ValueError) as exception: amap.get_authenticator_for_profile("unknown") assert "Unknown authenticator" in str(exception)