diff --git a/moulinette/actionsmap.py b/moulinette/actionsmap.py index 63483701..fd88ec72 100644 --- a/moulinette/actionsmap.py +++ b/moulinette/actionsmap.py @@ -95,7 +95,7 @@ class CommentParameter(_ExtraParameter): def validate(klass, value, arg_name): # Deprecated boolean or empty string if isinstance(value, bool) or (isinstance(value, str) and not value): - logger.warning("expecting a string for extra parameter '%s' of " + logger.warning("expecting a non-empty string for extra parameter '%s' of " "argument '%s'", klass.name, arg_name) value = arg_name elif not isinstance(value, str): @@ -130,7 +130,7 @@ class AskParameter(_ExtraParameter): def validate(klass, value, arg_name): # Deprecated boolean or empty string if isinstance(value, bool) or (isinstance(value, str) and not value): - logger.warning("expecting a string for extra parameter '%s' of " + logger.warning("expecting a non-empty string for extra parameter '%s' of " "argument '%s'", klass.name, arg_name) value = arg_name elif not isinstance(value, str): @@ -198,7 +198,7 @@ class PatternParameter(_ExtraParameter): def validate(value, arg_name): # Deprecated string type if isinstance(value, str): - logger.warning("expecting a list for extra parameter 'pattern' of " + logger.warning("expecting a list as extra parameter 'pattern' of " "argument '%s'", arg_name) value = [value, 'pattern_not_match'] elif not isinstance(value, list) or len(value) != 2: diff --git a/test/test_actionsmap.py b/test/test_actionsmap.py new file mode 100644 index 00000000..82f153a8 --- /dev/null +++ b/test/test_actionsmap.py @@ -0,0 +1,87 @@ +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(profile='unknown') + assert 'Unknown authenticator' in str(exception)