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() )
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() == ""
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)
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() )
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() )
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
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")
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)
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"
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")
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
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()
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
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()
def test_run_passes_all_args(app_tester: ApplicationTester, env: MockEnv): app_tester.execute("run python -V") assert [["python", "-V"]] == env.executed