def test_silent_help(app: Application):
    app.catch_exceptions(False)

    tester = ApplicationTester(app)
    tester.execute("-h -q", decorated=False)

    assert tester.io.fetch_output() == ""
def test_run_runs_the_list_command_without_arguments(tester: ApplicationTester):
    tester.execute("", decorated=False)

    assert (
        tester.io.fetch_output()
        == FIXTURES_PATH.joinpath("application_run1.txt").read_text()
    )
Exemple #3
0
def test_publish_with_client_cert(app_tester: ApplicationTester, mocker: MockerFixture):
    publisher_publish = mocker.patch("poetry.publishing.Publisher.publish")

    app_tester.execute("publish --client-cert path/to/client.pem")
    assert [
        (None, None, None, None, Path("path/to/client.pem"), False, False)
    ] == publisher_publish.call_args
def test_run_removes_all_output_if_quiet(tester: ApplicationTester):
    tester.execute("list --quiet")

    assert tester.io.fetch_output() == ""

    tester.execute("list -q")

    assert tester.io.fetch_output() == ""
Exemple #5
0
def test_run_keeps_options_passed_before_command(app_tester: ApplicationTester,
                                                 env: MockEnv):
    app_tester.execute("-V --no-ansi run python", decorated=True)

    assert not app_tester.io.is_decorated()
    assert app_tester.io.fetch_output() == app_tester.io.remove_format(
        app_tester.application.long_version + "\n")
    assert [] == env.executed
    def test_application_accepts_command(self):
        app = application

        tester = ApplicationTester(app)
        tester.execute("")

        self.assertTrue(re.search("Console Tool", tester.io.fetch_output()))
        self.assertTrue(
            re.search("Display the manual of a command",
                      tester.io.fetch_output()))
        self.assertEqual(0, tester.status_code)
Exemple #7
0
    def test_application_accepts_watch_command(self):
        app = application

        tester = ApplicationTester(app)
        tester.execute("watch --help")

        self.assertTrue(
            re.search(r"<folder>\s+Which folder do you want to watch?",
                      tester.io.fetch_output()))
        self.assertTrue(
            re.search(r"<command>\s+What command to run?",
                      tester.io.fetch_output()))
        self.assertEqual(0, tester.status_code)
def test_run_runs_help_command_with_command(tester: ApplicationTester):
    tester.execute("--help list", decorated=False)

    assert (
        tester.io.fetch_output()
        == FIXTURES_PATH.joinpath("application_run3.txt").read_text()
    )

    tester.execute("list -h", decorated=False)

    assert (
        tester.io.fetch_output()
        == FIXTURES_PATH.joinpath("application_run3.txt").read_text()
    )
def test_run_with_version(tester: ApplicationTester):
    tester.execute("--version")

    assert (
        tester.io.fetch_output()
        == FIXTURES_PATH.joinpath("application_run4.txt").read_text()
    )

    tester.execute("-V")

    assert (
        tester.io.fetch_output()
        == FIXTURES_PATH.joinpath("application_run4.txt").read_text()
    )
Exemple #10
0
def test_run_with_help(tester: ApplicationTester):
    tester.execute("help --help")

    assert (
        tester.io.fetch_output()
        == FIXTURES_PATH.joinpath("application_run5.txt").read_text()
    )

    tester.execute("-h help")

    assert (
        tester.io.fetch_output()
        == FIXTURES_PATH.joinpath("application_run5.txt").read_text()
    )
Exemple #11
0
def test_publish_returns_non_zero_code_for_upload_errors(
    app: PoetryTestApplication,
    app_tester: ApplicationTester,
    http: type[httpretty.httpretty],
):
    http.register_uri(http.POST,
                      "https://upload.pypi.org/legacy/",
                      status=400,
                      body="Bad Request")

    exit_code = app_tester.execute("publish --username foo --password bar")

    assert exit_code == 1

    expected_output = """
Publishing simple-project (1.2.3) to PyPI
"""
    expected_error_output = """\
  UploadError

  HTTP Error 400: Bad Request
"""

    assert expected_output in app_tester.io.fetch_output()
    assert expected_error_output in app_tester.io.fetch_error()
def test_application_execute_plugin_command(mocker: MockerFixture):
    mocker.patch(
        "entrypoints.get_group_all",
        return_value=[
            EntryPoint("my-plugin", "tests.console.test_application",
                       "AddCommandPlugin")
        ],
    )

    app = Application()

    tester = ApplicationTester(app)
    tester.execute("foo")

    assert tester.io.fetch_output() == "foo called\n"
    assert tester.status_code == 0
def test_application_with_plugins_disabled(mocker: MockerFixture):
    mocker.patch(
        "entrypoints.get_group_all",
        return_value=[
            EntryPoint("my-plugin", "tests.console.test_application",
                       "AddCommandPlugin")
        ],
    )

    app = Application()

    tester = ApplicationTester(app)
    tester.execute("--no-plugins")

    assert re.search(r"\s+foo\s+Foo Command", tester.io.fetch_output()) is None
    assert tester.status_code == 0
def test_application_verify_source_cache_flag(disable_cache: bool):
    app = Application()

    tester = ApplicationTester(app)
    command = "debug info"

    if disable_cache:
        command = f"{command} --no-cache"

    assert not app._poetry

    tester.execute(command)

    assert app.poetry.pool.repositories

    for repo in app.poetry.pool.repositories:
        assert repo._disable_cache == disable_cache
def test_application_execute_plugin_command_with_plugins_disabled(mocker):
    mocker.patch(
        "entrypoints.get_group_all",
        return_value=[
            EntryPoint("my-plugin", "tests.console.test_application",
                       "AddCommandPlugin")
        ],
    )

    app = Application()

    tester = ApplicationTester(app)
    tester.execute("foo --no-plugins")

    assert "" == tester.io.fetch_output()
    assert '\nThe command "foo" does not exist.\n' == tester.io.fetch_error()
    assert 1 == tester.status_code
Exemple #16
0
def test_cache_clear_pkg_no(
    tester: ApplicationTester,
    repository_one: str,
    cache: CacheManager,
):
    exit_code = tester.execute(f"cache clear {repository_one}:cachy:0.1", inputs="no")

    assert exit_code == 0
    assert tester.io.fetch_output() == ""
    assert cache.has("cachy:0.1")
    assert cache.has("cleo:0.2")
Exemple #17
0
def test_set_catch_exceptions(app: Application, environ: Dict[str, str]):
    app.auto_exits(False)
    os.environ["COLUMNS"] = "120"

    tester = ApplicationTester(app)
    app.catch_exceptions(True)

    assert app.are_exceptions_caught()

    tester.execute("foo", decorated=False)

    assert tester.io.fetch_output() == ""
    assert (
        tester.io.fetch_error()
        == FIXTURES_PATH.joinpath("application_exception1.txt").read_text()
    )

    app.catch_exceptions(False)

    with pytest.raises(CommandNotFoundException):
        tester.execute("foo", decorated=False)
Exemple #18
0
def test_run_has_helpful_error_when_command_not_found(
        app_tester: ApplicationTester, env: MockEnv,
        capfd: pytest.CaptureFixture[str]):
    env._execute = True
    app_tester.execute("run nonexistent-command")

    assert env.executed == [["nonexistent-command"]]
    assert app_tester.status_code == 1
    if WINDOWS:
        # On Windows we use a shell to run commands which provides its own error
        # message when a command is not found that is not captured by the
        # ApplicationTester but is captured by pytest, and we can access it via capfd.
        # The expected string in this assertion assumes Command Prompt (cmd.exe) is the
        # shell used.
        assert capfd.readouterr().err.splitlines() == [
            "'nonexistent-command' is not recognized as an internal or external"
            " command,",
            "operable program or batch file.",
        ]
    else:
        assert app_tester.io.fetch_error(
        ) == "Command not found: nonexistent-command\n"
Exemple #19
0
def test_cache_clear_all_no(
    tester: ApplicationTester,
    repository_one: str,
    repository_cache_dir: Path,
    cache: CacheManager,
):
    exit_code = tester.execute(f"cache clear {repository_one} --all", inputs="no")

    assert exit_code == 0
    assert tester.io.fetch_output() == ""
    # ensure directory is not empty
    assert any((repository_cache_dir / repository_one).iterdir())
    assert cache.has("cachy:0.1")
    assert cache.has("cleo:0.2")
Exemple #20
0
def test_skip_existing_output(app_tester: ApplicationTester,
                              http: type[httpretty.httpretty]):
    http.register_uri(http.POST,
                      "https://upload.pypi.org/legacy/",
                      status=409,
                      body="Conflict")

    exit_code = app_tester.execute(
        "publish --skip-existing --username foo --password bar")

    assert exit_code == 0

    error = app_tester.io.fetch_error()
    assert "- Uploading simple-project-1.2.3.tar.gz File exists. Skipping" in error
Exemple #21
0
def test_run_with_verbosity(tester: ApplicationTester):
    tester.execute("list --verbose")

    assert tester.io.is_verbose()

    tester.execute("list -v")

    assert tester.io.is_verbose()

    tester.execute("list -vv")

    assert tester.io.is_very_verbose()

    tester.execute("list -vvv")

    assert tester.io.is_debug()
Exemple #22
0
def test_publish_dry_run_skip_existing(
    app_tester: ApplicationTester, http: type[httpretty.httpretty], options: str
):
    http.register_uri(
        http.POST, "https://upload.pypi.org/legacy/", status=409, body="Conflict"
    )

    exit_code = app_tester.execute(f"publish {options} --username foo --password bar")

    assert exit_code == 0

    output = app_tester.io.fetch_output()
    error = app_tester.io.fetch_error()

    assert "Publishing simple-project (1.2.3) to PyPI" in output
    assert "- Uploading simple-project-1.2.3.tar.gz" in error
    assert "- Uploading simple_project-1.2.3-py2.py3-none-any.whl" in error
Exemple #23
0
def test_publish_returns_non_zero_code_for_connection_errors(
    app: PoetryTestApplication,
    app_tester: ApplicationTester,
    http: type[httpretty.httpretty],
):
    def request_callback(*_: Any, **__: Any) -> None:
        raise requests.ConnectionError()

    http.register_uri(
        http.POST, "https://upload.pypi.org/legacy/", body=request_callback
    )

    exit_code = app_tester.execute("publish --username foo --password bar")

    assert exit_code == 1

    expected = str(UploadError(error=requests.ConnectionError()))

    assert expected in app_tester.io.fetch_error()
def test_execute(tester: ApplicationTester):
    assert 0 == tester.execute("foo baz --bar")
    assert 0 == tester.status_code
    assert "baz\n--bar activated\n" == tester.io.fetch_output()
def test_execute_namespace_command(tester: ApplicationTester):
    tester.application.catch_exceptions(False)
    assert 0 == tester.execute("foo bar baz --baz")
    assert 0 == tester.status_code
    assert "baz\n--baz activated\n" == tester.io.fetch_output()
Exemple #26
0
def test_run_passes_all_args(app_tester: ApplicationTester, env: MockEnv):
    app_tester.execute("run python -V")
    assert [["python", "-V"]] == env.executed