def test_prompt_disallows_empty_response(mocker): console = RichConsole(file=io.StringIO()) Prompt.prompt_( "What is your name?", console=console, stream=io.StringIO("\nfoo"), ) expected = ("What is your name?: Response required. Please try again.\n" "What is your name?: ") assert console.file.getvalue() == expected
def test_prompt_default(mocker): console = RichConsole(file=io.StringIO()) mocked_validator = mocker.MagicMock(return_value="default") assert (Prompt.ask( "What is your name?", console=console, stream=io.StringIO(""), default="default", validator=mocked_validator, ) == "default") assert console.file.getvalue() == "What is your name? [default]: " mocked_validator.assert_has_calls([call("default")])
def test_prompt_with_conditional_skip(mocker, default, brack): console = RichConsole(file=io.StringIO()) mocked_validator = mocker.MagicMock(return_value="something") assert (Prompt.prompt_( "What is your name?", console=console, allow_omission=True, stream=io.StringIO("n\n"), default=default, validator=mocked_validator, ) is None) assert console.file.getvalue() == f"What is your name? {brack}: " mocked_validator.assert_not_called()
def test_prompt_shows_message_from_validator_response(mocker): console = RichConsole(file=io.StringIO()) mocked_validator = mocker.MagicMock( return_value=("foo@email", "failed to send a verification email")) assert (Prompt.ask( "what is your email?", console=console, stream=io.StringIO("foo@email"), validator=mocked_validator, ) == "foo@email") mocked_validator.assert_has_calls([call("foo@email")]) expected = "what is your email?: failed to send a verification email\n" assert console.file.getvalue() == expected
def test_prompt_retries_on_invalid_response_from_validator(mocker): console = RichConsole(file=io.StringIO()) mocked_validator = mocker.MagicMock( side_effect=[InvalidResponse("it is a number"), "foo"]) assert (Prompt.ask( "what is your name?", console=console, stream=io.StringIO("3\nfoo"), validator=mocked_validator, ) == "foo") mocked_validator.assert_has_calls([call("3"), call("foo")]) expected = "what is your name?: it is a number\nwhat is your name?: " assert console.file.getvalue() == expected
def _prompts( keys: Iterable[str], defaults: Dict[str, str] = None, validator: Callable[[str, str], Union[str, Tuple[str, str]]] = None, allow_omission: bool = True, stream: Optional[TextIO] = None, ) -> Dict[str, OptStr]: from dvc.ui.prompt import Prompt defaults = defaults or {} return { key: Prompt.prompt_( PROMPTS[key], console=ui.error_console, default=defaults.get(key), validator=partial(validator, key) if validator else None, allow_omission=allow_omission, stream=stream, ) for key in keys }
def test_prompt_str(): console = RichConsole(file=io.StringIO()) assert (Prompt.ask("What is your name?", console=console, stream=io.StringIO("foo")) == "foo") assert console.file.getvalue() == "What is your name?: "