Commit d18b6520 by Arun Babu Neelicattu Committed by Randy Döring

tests: load plugins when for command tester

This change cleans up loading of plugins when testing commands.
parent 3ccd8fd8
...@@ -16,6 +16,7 @@ from cleo.events.event_dispatcher import EventDispatcher ...@@ -16,6 +16,7 @@ from cleo.events.event_dispatcher import EventDispatcher
from cleo.exceptions import CleoException from cleo.exceptions import CleoException
from cleo.formatters.style import Style from cleo.formatters.style import Style
from cleo.io.inputs.argv_input import ArgvInput from cleo.io.inputs.argv_input import ArgvInput
from cleo.io.null_io import NullIO
from poetry.__version__ import __version__ from poetry.__version__ import __version__
from poetry.console.command_loader import CommandLoader from poetry.console.command_loader import CommandLoader
...@@ -306,10 +307,13 @@ class Application(BaseApplication): ...@@ -306,10 +307,13 @@ class Application(BaseApplication):
installer.use_executor(poetry.config.get("experimental.new-installer", False)) installer.use_executor(poetry.config.get("experimental.new-installer", False))
command.set_installer(installer) command.set_installer(installer)
def _load_plugins(self, io: IO) -> None: def _load_plugins(self, io: IO = None) -> None:
if self._plugins_loaded: if self._plugins_loaded:
return return
if io is None:
io = NullIO()
self._disable_plugins = io.input.has_parameter_option("--no-plugins") self._disable_plugins = io.input.has_parameter_option("--no-plugins")
if not self._disable_plugins: if not self._disable_plugins:
......
...@@ -16,7 +16,6 @@ from typing import TextIO ...@@ -16,7 +16,6 @@ from typing import TextIO
import httpretty import httpretty
import pytest import pytest
from cleo.testers.command_tester import CommandTester
from keyring.backend import KeyringBackend from keyring.backend import KeyringBackend
from poetry.config.config import Config as BaseConfig from poetry.config.config import Config as BaseConfig
...@@ -24,14 +23,12 @@ from poetry.config.dict_config_source import DictConfigSource ...@@ -24,14 +23,12 @@ from poetry.config.dict_config_source import DictConfigSource
from poetry.factory import Factory from poetry.factory import Factory
from poetry.inspection.info import PackageInfo from poetry.inspection.info import PackageInfo
from poetry.inspection.info import PackageInfoError from poetry.inspection.info import PackageInfoError
from poetry.installation import Installer
from poetry.layouts import layout from poetry.layouts import layout
from poetry.repositories import Pool from poetry.repositories import Pool
from poetry.repositories import Repository from poetry.repositories import Repository
from poetry.utils.env import EnvManager from poetry.utils.env import EnvManager
from poetry.utils.env import SystemEnv from poetry.utils.env import SystemEnv
from poetry.utils.env import VirtualEnv from poetry.utils.env import VirtualEnv
from tests.helpers import TestExecutor
from tests.helpers import TestLocker from tests.helpers import TestLocker
from tests.helpers import TestRepository from tests.helpers import TestRepository
from tests.helpers import get_package from tests.helpers import get_package
...@@ -42,12 +39,7 @@ from tests.helpers import mock_download ...@@ -42,12 +39,7 @@ from tests.helpers import mock_download
if TYPE_CHECKING: if TYPE_CHECKING:
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from poetry.installation.executor import Executor
from poetry.poetry import Poetry from poetry.poetry import Poetry
from poetry.utils.env import Env
from poetry.utils.env import MockEnv
from tests.helpers import PoetryTestApplication
from tests.types import CommandTesterFactory
from tests.types import FixtureDirGetter from tests.types import FixtureDirGetter
from tests.types import ProjectFactory from tests.types import ProjectFactory
...@@ -406,60 +398,5 @@ def project_factory( ...@@ -406,60 +398,5 @@ def project_factory(
@pytest.fixture @pytest.fixture
def command_tester_factory(
app: PoetryTestApplication, env: MockEnv
) -> CommandTesterFactory:
def _tester(
command: str,
poetry: Poetry | None = None,
installer: Installer | None = None,
executor: Executor | None = None,
environment: Env | None = None,
) -> CommandTester:
command = app.find(command)
tester = CommandTester(command)
# Setting the formatter from the application
# TODO: Find a better way to do this in Cleo
app_io = app.create_io()
formatter = app_io.output.formatter
tester.io.output.set_formatter(formatter)
tester.io.error_output.set_formatter(formatter)
if poetry:
app._poetry = poetry
poetry = app.poetry
command._pool = poetry.pool
if hasattr(command, "set_env"):
command.set_env(environment or env)
if hasattr(command, "set_installer"):
installer = installer or Installer(
tester.io,
env,
poetry.package,
poetry.locker,
poetry.pool,
poetry.config,
executor=executor
or TestExecutor(env, poetry.pool, poetry.config, tester.io),
)
installer.use_executor(True)
command.set_installer(installer)
return tester
return _tester
@pytest.fixture
def do_lock(command_tester_factory: CommandTesterFactory, poetry: Poetry) -> None:
command_tester_factory("lock").execute()
assert poetry.locker.lock.exists()
@pytest.fixture
def project_root() -> Path: def project_root() -> Path:
return Path(__file__).parent.parent return Path(__file__).parent.parent
...@@ -10,8 +10,10 @@ import pytest ...@@ -10,8 +10,10 @@ import pytest
from cleo.io.null_io import NullIO from cleo.io.null_io import NullIO
from cleo.testers.application_tester import ApplicationTester from cleo.testers.application_tester import ApplicationTester
from cleo.testers.command_tester import CommandTester
from poetry.factory import Factory from poetry.factory import Factory
from poetry.installation import Installer
from poetry.installation.noop_installer import NoopInstaller from poetry.installation.noop_installer import NoopInstaller
from poetry.repositories import Pool from poetry.repositories import Pool
from poetry.utils.env import MockEnv from poetry.utils.env import MockEnv
...@@ -24,10 +26,13 @@ from tests.helpers import mock_clone ...@@ -24,10 +26,13 @@ from tests.helpers import mock_clone
if TYPE_CHECKING: if TYPE_CHECKING:
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from poetry.installation.executor import Executor
from poetry.poetry import Poetry from poetry.poetry import Poetry
from poetry.repositories import Repository from poetry.repositories import Repository
from poetry.utils.env import Env
from tests.conftest import Config from tests.conftest import Config
from tests.helpers import TestRepository from tests.helpers import TestRepository
from tests.types import CommandTesterFactory
@pytest.fixture() @pytest.fixture()
...@@ -117,7 +122,7 @@ def poetry(repo: TestRepository, project_directory: str, config: Config) -> Poet ...@@ -117,7 +122,7 @@ def poetry(repo: TestRepository, project_directory: str, config: Config) -> Poet
@pytest.fixture @pytest.fixture
def app(poetry: Poetry) -> PoetryTestApplication: def app(poetry: Poetry) -> PoetryTestApplication:
app_ = PoetryTestApplication(poetry) app_ = PoetryTestApplication(poetry)
app_._load_plugins()
return app_ return app_
...@@ -134,3 +139,58 @@ def new_installer_disabled(config: Config) -> None: ...@@ -134,3 +139,58 @@ def new_installer_disabled(config: Config) -> None:
@pytest.fixture() @pytest.fixture()
def executor(poetry: Poetry, config: Config, env: MockEnv) -> TestExecutor: def executor(poetry: Poetry, config: Config, env: MockEnv) -> TestExecutor:
return TestExecutor(env, poetry.pool, config, NullIO()) return TestExecutor(env, poetry.pool, config, NullIO())
@pytest.fixture
def command_tester_factory(
app: PoetryTestApplication, env: MockEnv
) -> CommandTesterFactory:
def _tester(
command: str,
poetry: Poetry | None = None,
installer: Installer | None = None,
executor: Executor | None = None,
environment: Env | None = None,
) -> CommandTester:
command = app.find(command)
tester = CommandTester(command)
# Setting the formatter from the application
# TODO: Find a better way to do this in Cleo
app_io = app.create_io()
formatter = app_io.output.formatter
tester.io.output.set_formatter(formatter)
tester.io.error_output.set_formatter(formatter)
if poetry:
app._poetry = poetry
poetry = app.poetry
command._pool = poetry.pool
if hasattr(command, "set_env"):
command.set_env(environment or env)
if hasattr(command, "set_installer"):
installer = installer or Installer(
tester.io,
env,
poetry.package,
poetry.locker,
poetry.pool,
poetry.config,
executor=executor
or TestExecutor(env, poetry.pool, poetry.config, tester.io),
)
installer.use_executor(True)
command.set_installer(installer)
return tester
return _tester
@pytest.fixture
def do_lock(command_tester_factory: CommandTesterFactory, poetry: Poetry) -> None:
command_tester_factory("lock").execute()
assert poetry.locker.lock.exists()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment