Skip to content

Commit

Permalink
Support dependency parameters for interactive init
Browse files Browse the repository at this point in the history
Resolves: #711
  • Loading branch information
finswimmer committed Sep 24, 2020
1 parent ef48697 commit 5af22a5
Show file tree
Hide file tree
Showing 2 changed files with 194 additions and 4 deletions.
16 changes: 12 additions & 4 deletions poetry/console/commands/init.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = (
Expand All @@ -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?"
Expand All @@ -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("")

Expand Down
182 changes: 182 additions & 0 deletions tests/console/commands/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 <you@example.com>"]
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 <you@example.com>"]
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 <you@example.com>"]
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 <you@example.com>"]
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

0 comments on commit 5af22a5

Please sign in to comment.