diff --git a/src/poetry/console/commands/check.py b/src/poetry/console/commands/check.py index ba533f992ee..bd672409a81 100644 --- a/src/poetry/console/commands/check.py +++ b/src/poetry/console/commands/check.py @@ -130,21 +130,27 @@ def handle(self) -> int: # Load poetry config and display errors, if any poetry_file = self.poetry.file.path - config = PyProjectTOML(poetry_file).poetry_config - check_result = Factory.validate(config, strict=True) + toml_data = PyProjectTOML(poetry_file).data + check_result = Factory.validate(toml_data, strict=True) + + project = toml_data.get("project", {}) + poetry_config = toml_data["tool"]["poetry"] # Validate trove classifiers - project_classifiers = set(config.get("classifiers", [])) + project_classifiers = set( + project.get("classifiers") or poetry_config.get("classifiers", []) + ) errors, warnings = self._validate_classifiers(project_classifiers) check_result["errors"].extend(errors) check_result["warnings"].extend(warnings) # Validate readme (files must exist) - if "readme" in config: - errors = self._validate_readme(config["readme"], poetry_file) + # TODO: consider [project.readme] as well + if "readme" in poetry_config: + errors = self._validate_readme(poetry_config["readme"], poetry_file) check_result["errors"].extend(errors) - check_result["errors"] += self._validate_dependencies_source(config) + check_result["errors"] += self._validate_dependencies_source(poetry_config) # Verify that lock file is consistent if self.option("lock") and not self.poetry.locker.is_locked(): diff --git a/src/poetry/console/commands/version.py b/src/poetry/console/commands/version.py index 3968557a8aa..85c97d4c28c 100644 --- a/src/poetry/console/commands/version.py +++ b/src/poetry/console/commands/version.py @@ -69,8 +69,12 @@ def handle(self) -> int: if not self.option("dry-run"): content: dict[str, Any] = self.poetry.file.read() - poetry_content = content["tool"]["poetry"] - poetry_content["version"] = version.text + project_content = content.get("project", {}) + if "version" in project_content: + project_content["version"] = version.text + poetry_content = content.get("tool", {}).get("poetry", {}) + if "version" in poetry_content: + poetry_content["version"] = version.text assert isinstance(content, TOMLDocument) self.poetry.file.write(content) diff --git a/src/poetry/factory.py b/src/poetry/factory.py index 4cfcd91d060..f016dcf88e6 100644 --- a/src/poetry/factory.py +++ b/src/poetry/factory.py @@ -73,7 +73,7 @@ def create_poetry( # Load local sources repositories = {} existing_repositories = config.get("repositories", {}) - for source in base_poetry.pyproject.poetry_config.get("source", []): + for source in base_poetry.local_config.get("source", []): name = source.get("name") url = source.get("url") if name and url and name not in existing_repositories: @@ -340,22 +340,26 @@ def create_pyproject_from_package(cls, package: Package) -> TOMLDocument: @classmethod def validate( - cls, config: dict[str, Any], strict: bool = False + cls, toml_data: dict[str, Any], strict: bool = False ) -> dict[str, list[str]]: - results = super().validate(config, strict) + results = super().validate(toml_data, strict) + poetry_config = toml_data["tool"]["poetry"] - results["errors"].extend(validate_object(config)) + results["errors"].extend(validate_object(poetry_config)) # A project should not depend on itself. - dependencies = set(config.get("dependencies", {}).keys()) - dependencies.update(config.get("dev-dependencies", {}).keys()) - groups = config.get("group", {}).values() + # TODO: consider [project.dependencies] and [project.optional-dependencies] + dependencies = set(poetry_config.get("dependencies", {}).keys()) + dependencies.update(poetry_config.get("dev-dependencies", {}).keys()) + groups = poetry_config.get("group", {}).values() for group in groups: dependencies.update(group.get("dependencies", {}).keys()) dependencies = {canonicalize_name(d) for d in dependencies} - project_name = config.get("name") + project_name = toml_data.get("project", {}).get("name") or poetry_config.get( + "name" + ) if project_name is not None and canonicalize_name(project_name) in dependencies: results["errors"].append( f"Project name ({project_name}) is same as one of its dependencies" diff --git a/tests/console/commands/test_check.py b/tests/console/commands/test_check.py index 67cfef8410b..1496ebcd544 100644 --- a/tests/console/commands/test_check.py +++ b/tests/console/commands/test_check.py @@ -22,8 +22,8 @@ @pytest.fixture -def poetry_sample_project(set_project_context: SetProjectContext) -> Iterator[Poetry]: - with set_project_context("sample_project", in_place=False) as cwd: +def poetry_simple_project(set_project_context: SetProjectContext) -> Iterator[Poetry]: + with set_project_context("simple_project", in_place=False) as cwd: yield Factory().create_poetry(cwd) @@ -45,9 +45,9 @@ def poetry_with_up_to_date_lockfile( @pytest.fixture() def tester( - command_tester_factory: CommandTesterFactory, poetry_sample_project: Poetry + command_tester_factory: CommandTesterFactory, poetry_simple_project: Poetry ) -> CommandTester: - return command_tester_factory("check", poetry=poetry_sample_project) + return command_tester_factory("check", poetry=poetry_simple_project) def test_check_valid(tester: CommandTester) -> None: @@ -60,6 +60,57 @@ def test_check_valid(tester: CommandTester) -> None: assert tester.io.fetch_output() == expected +def test_check_valid_legacy( + mocker: MockerFixture, tester: CommandTester, fixture_dir: FixtureDirGetter +) -> None: + mocker.patch( + "poetry.poetry.Poetry.file", + return_value=TOMLFile(fixture_dir("simple_project_legacy") / "pyproject.toml"), + new_callable=mocker.PropertyMock, + ) + tester.execute() + + expected = ( + "Warning: [tool.poetry.name] is deprecated. Use [project.name] instead.\n" + "Warning: [tool.poetry.version] is set but 'version' is not in " + "[project.dynamic]. If it is static use [project.version]. If it is dynamic, " + "add 'version' to [project.dynamic].\n" + "If you want to set the version dynamically via `poetry build " + "--local-version` or you are using a plugin, which sets the version " + "dynamically, you should define the version in [tool.poetry] and add " + "'version' to [project.dynamic].\n" + "Warning: [tool.poetry.description] is deprecated. Use [project.description] " + "instead.\n" + "Warning: [tool.poetry.readme] is set but 'readme' is not in " + "[project.dynamic]. If it is static use [project.readme]. If it is dynamic, " + "add 'readme' to [project.dynamic].\n" + "If you want to define multiple readmes, you should define them in " + "[tool.poetry] and add 'readme' to [project.dynamic].\n" + "Warning: [tool.poetry.license] is deprecated. Use [project.license] instead.\n" + "Warning: [tool.poetry.authors] is deprecated. Use [project.authors] instead.\n" + "Warning: [tool.poetry.keywords] is deprecated. Use [project.keywords] " + "instead.\n" + "Warning: [tool.poetry.classifiers] is set but 'classifiers' is not in " + "[project.dynamic]. If it is static use [project.classifiers]. If it is " + "dynamic, add 'classifiers' to [project.dynamic].\n" + "ATTENTION: Per default Poetry determines classifiers for supported Python " + "versions and license automatically. If you define classifiers in [project], " + "you disable the automatic enrichment. In other words, you have to define all " + "classifiers manually. If you want to use Poetry's automatic enrichment of " + "classifiers, you should define them in [tool.poetry] and add 'classifiers' " + "to [project.dynamic].\n" + "Warning: [tool.poetry.homepage] is deprecated. Use [project.urls] instead.\n" + "Warning: [tool.poetry.repository] is deprecated. Use [project.urls] instead.\n" + "Warning: [tool.poetry.documentation] is deprecated. Use [project.urls] " + "instead.\n" + "Warning: Defining console scripts in [tool.poetry.scripts] is deprecated. " + "Use [project.scripts] instead. ([tool.poetry.scripts] should only be used " + "for scripts of type 'file').\n" + ) + + assert tester.io.fetch_error() == expected + + def test_check_invalid( mocker: MockerFixture, tester: CommandTester, fixture_dir: FixtureDirGetter ) -> None: @@ -71,10 +122,7 @@ def test_check_invalid( tester.execute("--lock") - fastjsonschema_error = "data must contain ['description'] properties" - custom_error = "The fields ['description'] are required in package mode." - expected_template = """\ -Error: {schema_error} + expected = """\ Error: Project name (invalid) is same as one of its dependencies Error: Unrecognized classifiers: ['Intended Audience :: Clowns']. Error: Declared README file does not exist: never/exists.md @@ -91,12 +139,8 @@ def test_check_invalid( 'Topic :: Communications :: Chat :: AOL Instant Messenger'.\ Must be removed. """ - expected = { - expected_template.format(schema_error=schema_error) - for schema_error in (fastjsonschema_error, custom_error) - } - assert tester.io.fetch_error() in expected + assert tester.io.fetch_error() == expected def test_check_private( diff --git a/tests/fixtures/invalid_pyproject/pyproject.toml b/tests/fixtures/invalid_pyproject/pyproject.toml index 94c7d9fb4d5..b830211ac6e 100644 --- a/tests/fixtures/invalid_pyproject/pyproject.toml +++ b/tests/fixtures/invalid_pyproject/pyproject.toml @@ -1,17 +1,17 @@ -[tool.poetry] +[project] name = "invalid" version = "1.0.0" -authors = [ - "Foo " -] -readme = "never/exists.md" -license = "INVALID" +license = { text = "INVALID" } classifiers = [ "Environment :: Console", "Intended Audience :: Clowns", "Natural Language :: Ukranian", "Topic :: Communications :: Chat :: AOL Instant Messenger", ] +dynamic = [ "readme", "dependencies", "requires-python" ] + +[tool.poetry] +readme = "never/exists.md" [tool.poetry.dependencies] python = "*" diff --git a/tests/fixtures/no_name_project/pyproject.toml b/tests/fixtures/no_name_project/pyproject.toml index f18fa403c06..10d8f3f3f3d 100644 --- a/tests/fixtures/no_name_project/pyproject.toml +++ b/tests/fixtures/no_name_project/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "" +package-mode = false version = "1.2.3" description = "This project has no name" authors = [ diff --git a/tests/fixtures/outdated_lock/pyproject.toml b/tests/fixtures/outdated_lock/pyproject.toml index 257fbe6ea74..79dd46973fe 100644 --- a/tests/fixtures/outdated_lock/pyproject.toml +++ b/tests/fixtures/outdated_lock/pyproject.toml @@ -1,14 +1,10 @@ -[tool.poetry] +[project] name = "foobar" version = "0.1.0" -description = "" -authors = ["Poetry Developer "] - -[tool.poetry.dependencies] -python = "^3.8" -docker = "4.3.1" - -[tool.poetry.group.dev.dependencies] +requires-python = ">=3.8,<4.0" +dependencies = [ + "docker>=4.3.1", +] [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/tests/fixtures/private_pyproject/pyproject.toml b/tests/fixtures/private_pyproject/pyproject.toml index a572e83c8ff..f3cc460cf0e 100644 --- a/tests/fixtures/private_pyproject/pyproject.toml +++ b/tests/fixtures/private_pyproject/pyproject.toml @@ -1,17 +1,11 @@ -[tool.poetry] +[project] name = "private" version = "0.1.0" -description = "" -authors = ["Your Name "] -readme = "README.md" +requires-python = ">=3.7,<4.0" classifiers = [ "Private :: Do Not Upload", ] - -[tool.poetry.dependencies] -python = "^3.7" - [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" diff --git a/tests/fixtures/simple_project/pyproject.toml b/tests/fixtures/simple_project/pyproject.toml index 45a61d43cad..e85c7a74a20 100644 --- a/tests/fixtures/simple_project/pyproject.toml +++ b/tests/fixtures/simple_project/pyproject.toml @@ -1,20 +1,26 @@ -[tool.poetry] +[project] name = "simple-project" version = "1.2.3" description = "Some description." authors = [ - "Sébastien Eustace " + { name = "Sébastien Eustace", email = "sebastien@eustace.io" } ] -license = "MIT" - -readme = ["README.rst"] +license = { text = "MIT" } +readme = "README.rst" +keywords = ["packaging", "dependency", "poetry"] +dynamic = [ "classifiers", "dependencies", "requires-python" ] +[project.urls] homepage = "https://python-poetry.org" repository = "https://github.com/python-poetry/poetry" documentation = "https://python-poetry.org/docs" -keywords = ["packaging", "dependency", "poetry"] +[project.scripts] +foo = "foo:bar" +baz = "bar:baz.boom.bim" +fox = "fuz.foo:bar.baz" +[tool.poetry] classifiers = [ "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Libraries :: Python Modules" @@ -24,12 +30,6 @@ classifiers = [ [tool.poetry.dependencies] python = "~2.7 || ^3.4" -[tool.poetry.scripts] -foo = "foo:bar" -baz = "bar:baz.boom.bim" -fox = "fuz.foo:bar.baz" - - [build-system] requires = ["poetry-core>=1.1.0a7"] build-backend = "poetry.core.masonry.api" diff --git a/tests/fixtures/simple_project_legacy/README.rst b/tests/fixtures/simple_project_legacy/README.rst new file mode 100644 index 00000000000..f7fe15470f9 --- /dev/null +++ b/tests/fixtures/simple_project_legacy/README.rst @@ -0,0 +1,2 @@ +My Package +========== diff --git a/tests/fixtures/simple_project_legacy/pyproject.toml b/tests/fixtures/simple_project_legacy/pyproject.toml new file mode 100644 index 00000000000..45a61d43cad --- /dev/null +++ b/tests/fixtures/simple_project_legacy/pyproject.toml @@ -0,0 +1,35 @@ +[tool.poetry] +name = "simple-project" +version = "1.2.3" +description = "Some description." +authors = [ + "Sébastien Eustace " +] +license = "MIT" + +readme = ["README.rst"] + +homepage = "https://python-poetry.org" +repository = "https://github.com/python-poetry/poetry" +documentation = "https://python-poetry.org/docs" + +keywords = ["packaging", "dependency", "poetry"] + +classifiers = [ + "Topic :: Software Development :: Build Tools", + "Topic :: Software Development :: Libraries :: Python Modules" +] + +# Requirements +[tool.poetry.dependencies] +python = "~2.7 || ^3.4" + +[tool.poetry.scripts] +foo = "foo:bar" +baz = "bar:baz.boom.bim" +fox = "fuz.foo:bar.baz" + + +[build-system] +requires = ["poetry-core>=1.1.0a7"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/fixtures/private_pyproject/README.md b/tests/fixtures/simple_project_legacy/simple_project/__init__.py similarity index 100% rename from tests/fixtures/private_pyproject/README.md rename to tests/fixtures/simple_project_legacy/simple_project/__init__.py diff --git a/tests/fixtures/up_to_date_lock/poetry.lock b/tests/fixtures/up_to_date_lock/poetry.lock index ad184f3353c..c3b04ddf2a3 100644 --- a/tests/fixtures/up_to_date_lock/poetry.lock +++ b/tests/fixtures/up_to_date_lock/poetry.lock @@ -140,4 +140,4 @@ six = "*" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "ff2489c48d3c858a11c1ce7463ae5dc1524d9d457826c1bf16fd687a7bc1e819" +content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" diff --git a/tests/fixtures/up_to_date_lock/pyproject.toml b/tests/fixtures/up_to_date_lock/pyproject.toml index adaafb9481a..79dd46973fe 100644 --- a/tests/fixtures/up_to_date_lock/pyproject.toml +++ b/tests/fixtures/up_to_date_lock/pyproject.toml @@ -1,14 +1,10 @@ -[tool.poetry] +[project] name = "foobar" version = "0.1.0" -description = "" -authors = ["Poetry Developer "] - -[tool.poetry.dependencies] -python = "^3.8" -docker = ">=4.3.1" - -[tool.poetry.group.dev.dependencies] +requires-python = ">=3.8,<4.0" +dependencies = [ + "docker>=4.3.1", +] [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/tests/installation/test_chef.py b/tests/installation/test_chef.py index ffe0e06b3bd..9a659bc0a2a 100644 --- a/tests/installation/test_chef.py +++ b/tests/installation/test_chef.py @@ -69,7 +69,7 @@ def test_prepare_directory( chef = Chef( artifact_cache, EnvManager.get_system_env(), Factory.create_pool(config) ) - archive = fixture_dir("simple_project").resolve() + archive = fixture_dir("simple_project_legacy").resolve() wheel = chef.prepare(archive) @@ -111,7 +111,7 @@ def test_prepare_directory_editable( chef = Chef( artifact_cache, EnvManager.get_system_env(), Factory.create_pool(config) ) - archive = fixture_dir("simple_project").resolve() + archive = fixture_dir("simple_project_legacy").resolve() wheel = chef.prepare(archive, editable=True) diff --git a/tests/json/test_schema_sources.py b/tests/json/test_schema_sources.py index f0a998276db..9e5d6fca50b 100644 --- a/tests/json/test_schema_sources.py +++ b/tests/json/test_schema_sources.py @@ -12,22 +12,19 @@ def test_pyproject_toml_valid_legacy() -> None: toml: dict[str, Any] = TOMLFile(FIXTURE_DIR / "complete_valid_legacy.toml").read() - content = toml["tool"]["poetry"] - assert Factory.validate(content) == {"errors": [], "warnings": []} + assert Factory.validate(toml) == {"errors": [], "warnings": []} def test_pyproject_toml_valid() -> None: toml: dict[str, Any] = TOMLFile(FIXTURE_DIR / "complete_valid.toml").read() - content = toml["tool"]["poetry"] - assert Factory.validate(content) == {"errors": [], "warnings": []} + assert Factory.validate(toml) == {"errors": [], "warnings": []} def test_pyproject_toml_invalid_priority() -> None: toml: dict[str, Any] = TOMLFile( FIXTURE_DIR / "complete_invalid_priority.toml" ).read() - content = toml["tool"]["poetry"] - assert Factory.validate(content) == { + assert Factory.validate(toml) == { "errors": [ "data.source[0].priority must be one of ['primary', 'default', " "'secondary', 'supplemental', 'explicit']" @@ -40,8 +37,7 @@ def test_pyproject_toml_invalid_priority_legacy_and_new() -> None: toml: dict[str, Any] = TOMLFile( FIXTURE_DIR / "complete_invalid_priority_legacy_and_new.toml" ).read() - content = toml["tool"]["poetry"] - assert Factory.validate(content) == { + assert Factory.validate(toml) == { "errors": ["data.source[0] must NOT match a disallowed definition"], "warnings": [], } diff --git a/tests/masonry/builders/test_editable_builder.py b/tests/masonry/builders/test_editable_builder.py index 6e2e332fdbb..18551c5af6e 100644 --- a/tests/masonry/builders/test_editable_builder.py +++ b/tests/masonry/builders/test_editable_builder.py @@ -108,9 +108,19 @@ def expected_metadata_version() -> str: return metadata.metadata_version +@pytest.mark.parametrize("project", ("simple_project", "simple_project_legacy")) def test_builder_installs_proper_files_for_standard_packages( - simple_poetry: Poetry, tmp_venv: VirtualEnv + project: str, + simple_poetry: Poetry, + tmp_path: Path, + fixture_dir: FixtureDirGetter, ) -> None: + simple_poetry = Factory().create_poetry(fixture_dir(project)) + env_manager = EnvManager(simple_poetry) + venv_path = tmp_path / "venv" + env_manager.build_venv(venv_path) + tmp_venv = VirtualEnv(venv_path) + builder = EditableBuilder(simple_poetry, tmp_venv, NullIO()) builder.build() diff --git a/tests/puzzle/test_solver.py b/tests/puzzle/test_solver.py index 36f41d88b05..5c2fc8496ce 100644 --- a/tests/puzzle/test_solver.py +++ b/tests/puzzle/test_solver.py @@ -13,6 +13,8 @@ from cleo.io.null_io import NullIO from packaging.utils import canonicalize_name from poetry.core.packages.dependency import Dependency +from poetry.core.packages.dependency_group import MAIN_GROUP +from poetry.core.packages.dependency_group import DependencyGroup from poetry.core.packages.package import Package from poetry.core.packages.project_package import ProjectPackage from poetry.core.packages.vcs_dependency import VCSDependency @@ -3118,17 +3120,30 @@ def test_solver_chooses_from_correct_repository_if_forced( assert ops[0].package.source_url == legacy_repository.url +@pytest.mark.parametrize("project_dependencies", [True, False]) def test_solver_chooses_from_correct_repository_if_forced_and_transitive_dependency( package: ProjectPackage, io: NullIO, legacy_repository: LegacyRepository, pypi_repository: PyPiRepository, + project_dependencies: bool, ) -> None: package.python_versions = "^3.7" - package.add_dependency(Factory.create_dependency("foo", "^1.0")) - package.add_dependency( - Factory.create_dependency("tomlkit", {"version": "^0.5", "source": "legacy"}) - ) + if project_dependencies: + main_group = DependencyGroup(MAIN_GROUP) + package.add_dependency_group(main_group) + main_group.add_dependency(Factory.create_dependency("foo", "^1.0")) + main_group.add_dependency(Factory.create_dependency("tomlkit", "^0.5")) + main_group.add_poetry_dependency( + Factory.create_dependency("tomlkit", {"source": "legacy"}) + ) + else: + package.add_dependency(Factory.create_dependency("foo", "^1.0")) + package.add_dependency( + Factory.create_dependency( + "tomlkit", {"version": "^0.5", "source": "legacy"} + ) + ) repo = Repository("repo") foo = get_package("foo", "1.0.0") diff --git a/tests/test_factory.py b/tests/test_factory.py index 5cc433bb3c0..dee66ba6a9f 100644 --- a/tests/test_factory.py +++ b/tests/test_factory.py @@ -153,7 +153,7 @@ def test_create_poetry(fixture_dir: FixtureDirGetter) -> None: @pytest.mark.parametrize( ("project",), [ - ("simple_project",), + ("simple_project_legacy",), ("project_with_extras",), ], ) @@ -502,23 +502,21 @@ def test_poetry_with_two_default_sources( def test_validate(fixture_dir: FixtureDirGetter) -> None: complete = TOMLFile(fixture_dir("complete.toml")) pyproject: dict[str, Any] = complete.read() - content = pyproject["tool"]["poetry"] - assert Factory.validate(content) == {"errors": [], "warnings": []} + assert Factory.validate(pyproject) == {"errors": [], "warnings": []} def test_validate_fails(fixture_dir: FixtureDirGetter) -> None: complete = TOMLFile(fixture_dir("complete.toml")) pyproject: dict[str, Any] = complete.read() - content = pyproject["tool"]["poetry"] - content["this key is not in the schema"] = "" + pyproject["tool"]["poetry"]["this key is not in the schema"] = "" expected = ( "Additional properties are not allowed " "('this key is not in the schema' was unexpected)" ) - assert Factory.validate(content) == {"errors": [expected], "warnings": []} + assert Factory.validate(pyproject) == {"errors": [expected], "warnings": []} def test_create_poetry_fails_on_invalid_configuration( @@ -527,20 +525,12 @@ def test_create_poetry_fails_on_invalid_configuration( with pytest.raises(RuntimeError) as e: Factory().create_poetry(fixture_dir("invalid_pyproject")) - fastjsonschema_error = "data must contain ['description'] properties" - custom_error = "The fields ['description'] are required in package mode." - - expected_template = """\ + expected = """\ The Poetry configuration is invalid: - - {schema_error} - Project name (invalid) is same as one of its dependencies """ - expected = { - expected_template.format(schema_error=schema_error) - for schema_error in (fastjsonschema_error, custom_error) - } - assert str(e.value) in expected + assert str(e.value) == expected def test_create_poetry_fails_on_nameless_project( @@ -549,19 +539,12 @@ def test_create_poetry_fails_on_nameless_project( with pytest.raises(RuntimeError) as e: Factory().create_poetry(fixture_dir("nameless_pyproject")) - fastjsonschema_error = "data must contain ['name'] properties" - custom_error = "The fields ['name'] are required in package mode." - - expected_template = """\ + expected = """\ The Poetry configuration is invalid: - - {schema_error} + - Either [project.name] or [tool.poetry.name] is required in package mode. """ - expected = { - expected_template.format(schema_error=schema_error) - for schema_error in (fastjsonschema_error, custom_error) - } - assert str(e.value) in expected + assert str(e.value) == expected def test_create_poetry_with_local_config(fixture_dir: FixtureDirGetter) -> None: diff --git a/tests/utils/env/test_env_manager.py b/tests/utils/env/test_env_manager.py index a7b02c54513..88d973da3c7 100644 --- a/tests/utils/env/test_env_manager.py +++ b/tests/utils/env/test_env_manager.py @@ -1156,7 +1156,9 @@ def test_create_venv_project_name_empty_sets_correct_prompt( manager = EnvManager(poetry) poetry.package.python_versions = "^3.7" - venv_name = manager.generate_env_name("", str(poetry.file.path.parent)) + venv_name = manager.generate_env_name( + "non-package-mode", str(poetry.file.path.parent) + ) mocker.patch("sys.version_info", (2, 7, 16)) mocker.patch("shutil.which", side_effect=lambda py: f"/usr/bin/{py}") @@ -1179,7 +1181,7 @@ def test_create_venv_project_name_empty_sets_correct_prompt( "no-pip": False, "no-setuptools": False, }, - prompt="virtualenv-py3.7", + prompt="non-package-mode-py3.7", )