예제 #1
0
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
예제 #2
0
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")])
예제 #3
0
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()
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
    }
예제 #7
0
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?: "