From 5af22a5b0ff01e075721d54bc9c317d52a6bd4eb Mon Sep 17 00:00:00 2001 From: finswimmer Date: Thu, 24 Sep 2020 09:43:33 +0200 Subject: [PATCH] Support dependency parameters for interactive init Resolves: #711 --- poetry/console/commands/init.py | 16 ++- tests/console/commands/test_init.py | 182 ++++++++++++++++++++++++++++ 2 files changed, 194 insertions(+), 4 deletions(-) diff --git a/poetry/console/commands/init.py b/poetry/console/commands/init.py index ab23da95c4e..976988f26c2 100644 --- a/poetry/console/commands/init.py +++ b/poetry/console/commands/init.py @@ -144,6 +144,10 @@ def handle(self): self.line("") requirements = {} + if self.option("dependency"): + requirements = self._format_requirements( + self._determine_requirements(self.option("dependency")) + ) question = "Would you like to define your main dependencies interactively?" help_message = ( @@ -160,12 +164,16 @@ def handle(self): if self.confirm(question, True): self.line(help_message) help_displayed = True - requirements = self._format_requirements( - self._determine_requirements(self.option("dependency")) + requirements.update( + self._format_requirements(self._determine_requirements([])) ) self.line("") dev_requirements = {} + if self.option("dev-dependency"): + dev_requirements = self._format_requirements( + self._determine_requirements(self.option("dev-dependency")) + ) question = ( "Would you like to define your development dependencies interactively?" @@ -174,8 +182,8 @@ def handle(self): if not help_displayed: self.line(help_message) - dev_requirements = self._format_requirements( - self._determine_requirements(self.option("dev-dependency")) + dev_requirements.update( + self._format_requirements(self._determine_requirements([])) ) self.line("") diff --git a/tests/console/commands/test_init.py b/tests/console/commands/test_init.py index 4ca7d44c44c..59c263d91ae 100644 --- a/tests/console/commands/test_init.py +++ b/tests/console/commands/test_init.py @@ -484,3 +484,185 @@ def test_python_option(app, mocker, poetry): """ assert expected in tester.io.fetch_output() + + +def test_predefined_dependency(app, repo, mocker, poetry): + repo.add_package(get_package("pendulum", "2.0.0")) + + command = app.find("init") + command._pool = poetry.pool + + mocker.patch("poetry.utils._compat.Path.open") + p = mocker.patch("poetry.utils._compat.Path.cwd") + p.return_value = Path(__file__) + + tester = CommandTester(command) + inputs = [ + "my-package", # Package name + "1.2.3", # Version + "This is a description", # Description + "n", # Author + "MIT", # License + "~2.7 || ^3.6", # Python + "n", # Interactive packages + "n", # Interactive dev packages + "\n", # Generate + ] + tester.execute("--dependency pendulum", inputs="\n".join(inputs)) + + expected = """\ +[tool.poetry] +name = "my-package" +version = "1.2.3" +description = "This is a description" +authors = ["Your Name "] +license = "MIT" + +[tool.poetry.dependencies] +python = "~2.7 || ^3.6" +pendulum = "^2.0.0" + +[tool.poetry.dev-dependencies] +""" + + assert expected in tester.io.fetch_output() + + +def test_predefined_and_interactive_dependencies(app, repo, mocker, poetry): + repo.add_package(get_package("pendulum", "2.0.0")) + repo.add_package(get_package("pyramid", "1.10")) + + command = app.find("init") + command._pool = poetry.pool + + mocker.patch("poetry.utils._compat.Path.open") + p = mocker.patch("poetry.utils._compat.Path.cwd") + p.return_value = Path(__file__) + + tester = CommandTester(command) + inputs = [ + "my-package", # Package name + "1.2.3", # Version + "This is a description", # Description + "n", # Author + "MIT", # License + "~2.7 || ^3.6", # Python + "", # Interactive packages + "pyramid", # Search for package + "0", # First option + "", # Do not set constraint + "", # Stop searching for packages + "n", # Interactive dev packages + "\n", # Generate + ] + + tester.execute("--dependency pendulum", inputs="\n".join(inputs)) + + expected = """\ +[tool.poetry] +name = "my-package" +version = "1.2.3" +description = "This is a description" +authors = ["Your Name "] +license = "MIT" + +[tool.poetry.dependencies] +python = "~2.7 || ^3.6" +""" + output = tester.io.fetch_output() + assert expected in output + assert 'pendulum = "^2.0.0"' in output + assert 'pyramid = "^1.10"' in output + + +def test_predefined_dev_dependency(app, repo, mocker, poetry): + repo.add_package(get_package("pytest", "3.6.0")) + + command = app.find("init") + command._pool = poetry.pool + + mocker.patch("poetry.utils._compat.Path.open") + p = mocker.patch("poetry.utils._compat.Path.cwd") + p.return_value = Path(__file__) + + tester = CommandTester(command) + inputs = [ + "my-package", # Package name + "1.2.3", # Version + "This is a description", # Description + "n", # Author + "MIT", # License + "~2.7 || ^3.6", # Python + "n", # Interactive packages + "n", # Interactive dev packages + "\n", # Generate + ] + + tester.execute("--dev-dependency pytest", inputs="\n".join(inputs)) + + expected = """\ +[tool.poetry] +name = "my-package" +version = "1.2.3" +description = "This is a description" +authors = ["Your Name "] +license = "MIT" + +[tool.poetry.dependencies] +python = "~2.7 || ^3.6" + +[tool.poetry.dev-dependencies] +pytest = "^3.6.0" +""" + + assert expected in tester.io.fetch_output() + + +def test_predefined_and_interactive_dev_dependencies(app, repo, mocker, poetry): + repo.add_package(get_package("pytest", "3.6.0")) + repo.add_package(get_package("pytest-requests", "0.2.0")) + + command = app.find("init") + command._pool = poetry.pool + + mocker.patch("poetry.utils._compat.Path.open") + p = mocker.patch("poetry.utils._compat.Path.cwd") + p.return_value = Path(__file__) + + tester = CommandTester(command) + inputs = [ + "my-package", # Package name + "1.2.3", # Version + "This is a description", # Description + "n", # Author + "MIT", # License + "~2.7 || ^3.6", # Python + "n", # Interactive packages + "", # Interactive dev packages + "pytest-requests", # Search for package + "0", # Select first option + "", # Do not set constraint + "", # Stop searching for dev packages + "\n", # Generate + ] + + tester.execute("--dev-dependency pytest", inputs="\n".join(inputs)) + + expected = """\ +[tool.poetry] +name = "my-package" +version = "1.2.3" +description = "This is a description" +authors = ["Your Name "] +license = "MIT" + +[tool.poetry.dependencies] +python = "~2.7 || ^3.6" + +[tool.poetry.dev-dependencies] +""" + + output = tester.io.fetch_output() + assert expected in output + assert 'pytest-requests = "^0.2.0"' in output + assert 'pytest = "^3.6.0"' in output