def test_execute_should_gracefully_handle_io_error(config: Config, pool: Pool, mocker: MockerFixture, io: BufferedIO, env: MockEnv): executor = Executor(env, pool, config, io) executor.verbose() original_write_line = executor._io.write_line def write_line(string: str, **kwargs: Any) -> None: # Simulate UnicodeEncodeError string.encode("ascii") original_write_line(string, **kwargs) mocker.patch.object(io, "write_line", side_effect=write_line) assert executor.execute([Install(Package("clikit", "0.2.3"))]) == 1 expected = r""" Package operations: 1 install, 0 updates, 0 removals \s*Unicode\w+Error """ assert re.match(expected, io.fetch_output())
def test_execute_should_show_operation_as_cancelled_on_subprocess_keyboard_interrupt( config, mocker, io, env): executor = Executor(env, pool, config, io) executor.verbose() # A return code of -2 means KeyboardInterrupt in the pip subprocess mocker.patch.object(executor, "_install", return_value=-2) assert 1 == executor.execute([Install(Package("clikit", "0.2.3"))]) expected = """ Package operations: 1 install, 0 updates, 0 removals • Installing clikit (0.2.3) • Installing clikit (0.2.3): Cancelled """ assert expected == io.fetch_output()
def test_execute_shows_skipped_operations_if_verbose(config, pool, io): config = Config() config.merge({"cache-dir": "/foo"}) env = MockEnv() executor = Executor(env, pool, config, io) executor.verbose() assert 0 == executor.execute([ Uninstall(Package("clikit", "0.2.3")).skip("Not currently installed") ]) expected = """ Package operations: 0 installs, 0 updates, 0 removals, 1 skipped • Removing clikit (0.2.3): Skipped for the following reason: Not currently installed """ assert expected == io.fetch_output() assert 0 == len(env.executed)
def test_execute_should_show_errors(config, mocker, io, env): executor = Executor(env, pool, config, io) executor.verbose() mocker.patch.object(executor, "_install", side_effect=Exception("It failed!")) assert 1 == executor.execute([Install(Package("clikit", "0.2.3"))]) expected = """ Package operations: 1 install, 0 updates, 0 removals • Installing clikit (0.2.3) Exception It failed! """ assert expected in io.fetch_output()
def test_execute_shows_skipped_operations_if_verbose(config: Config, pool: Pool, io: BufferedIO, config_cache_dir: Path, env: MockEnv): config.merge({"cache-dir": config_cache_dir.as_posix()}) executor = Executor(env, pool, config, io) executor.verbose() assert (executor.execute([ Uninstall(Package("clikit", "0.2.3")).skip("Not currently installed") ]) == 0) expected = """ Package operations: 0 installs, 0 updates, 0 removals, 1 skipped • Removing clikit (0.2.3): Skipped for the following reason: Not currently installed """ assert io.fetch_output() == expected assert len(env.executed) == 0
def test_execute_should_gracefully_handle_io_error(config, mocker, io, env): executor = Executor(env, pool, config, io) executor.verbose() original_write_line = executor._io.write_line def write_line(string, flags=None): # Simulate UnicodeEncodeError string.encode("ascii") original_write_line(string, flags) mocker.patch.object(io, "write_line", side_effect=write_line) assert 1 == executor.execute([Install(Package("clikit", "0.2.3"))]) expected = r""" Package operations: 1 install, 0 updates, 0 removals \s*Unicode\w+Error """ assert re.match(expected, io.fetch_output())