diff --git a/src/poetry/console/commands/add.py b/src/poetry/console/commands/add.py index fc13f6fc1c4..e02af59caa0 100644 --- a/src/poetry/console/commands/add.py +++ b/src/poetry/console/commands/add.py @@ -122,7 +122,9 @@ def handle(self) -> int: # dictionary. content: dict[str, Any] = self.poetry.file.read() poetry_content = content["tool"]["poetry"] - project_name = canonicalize_name(poetry_content["name"]) + project_name = ( + canonicalize_name(name) if (name := poetry_content.get("name")) else None + ) if group == MAIN_GROUP: if "dependencies" not in poetry_content: diff --git a/tests/console/commands/test_add.py b/tests/console/commands/test_add.py index f334f586582..503848d0146 100644 --- a/tests/console/commands/test_add.py +++ b/tests/console/commands/test_add.py @@ -101,6 +101,29 @@ def test_add_no_constraint( assert content["dependencies"]["cachy"] == "^0.2.0" +def test_add_non_package_mode_no_name( + repo: TestRepository, + project_factory: ProjectFactory, + command_tester_factory: CommandTesterFactory, +) -> None: + repo.add_package(get_package("cachy", "0.2.0")) + + poetry = project_factory( + name="foobar", pyproject_content="[tool.poetry]\npackage-mode = false\n" + ) + tester = command_tester_factory("add", poetry=poetry) + tester.execute("cachy") + + assert isinstance(tester.command, InstallerCommand) + assert tester.command.installer.executor.installations_count == 1 + + pyproject: dict[str, Any] = poetry.file.read() + content = pyproject["tool"]["poetry"] + + assert "cachy" in content["dependencies"] + assert content["dependencies"]["cachy"] == "^0.2.0" + + def test_add_replace_by_constraint( app: PoetryTestApplication, repo: TestRepository, tester: CommandTester ) -> None: