Commit 47a05c26 by Sébastien Eustace

Add tests for the add command

parent 480ea470
......@@ -32,6 +32,15 @@ class Pool(BaseRepository):
return self
def remove_repository(self, repository_name): # type: (str) -> Pool
for i, repository in enumerate(self._repositories):
if repository.name == repository_name:
del self._repositories[i]
break
return self
def configure(self, source): # type: (dict) -> Pool
"""
Configures a repository based on a source
......
......@@ -32,6 +32,9 @@ class Repository(BaseRepository):
if extras is None:
extras = []
if constraint is None:
constraint = '*'
if not isinstance(constraint, BaseConstraint):
parser = VersionParser()
constraint = parser.parse_constraints(constraint)
......
......@@ -57,6 +57,7 @@ pytest-cov = "^2.5"
mkdocs = "^0.17.3"
pymdown-extensions = "^4.9"
pygments = "^2.2"
pytest-mock = "^1.9"
[tool.poetry.scripts]
......
from cleo.testers import CommandTester
from tests.helpers import get_dependency
from tests.helpers import get_package
def test_add_no_constraint(app, repo, installer):
command = app.find('add')
tester = CommandTester(command)
repo.add_package(get_package('cachy', '0.1.0'))
repo.add_package(get_package('cachy', '0.2.0'))
tester.execute([
('command', command.get_name()),
('name', ['cachy'])
])
expected = """\
Using version ^0.2.0 for cachy
Updating dependencies
Resolving dependencies
Package operations: 1 install, 0 updates, 0 removals
Writing lock file
- Installing cachy (0.2.0)
"""
assert tester.get_display() == expected
assert len(installer.installs) == 1
def test_add_constraint(app, repo, installer):
command = app.find('add')
tester = CommandTester(command)
repo.add_package(get_package('cachy', '0.1.0'))
repo.add_package(get_package('cachy', '0.2.0'))
tester.execute([
('command', command.get_name()),
('name', ['cachy=0.1.0'])
])
expected = """\
Updating dependencies
Resolving dependencies
Package operations: 1 install, 0 updates, 0 removals
Writing lock file
- Installing cachy (0.1.0)
"""
assert tester.get_display() == expected
assert len(installer.installs) == 1
def test_add_constraint_dependencies(app, repo, installer):
command = app.find('add')
tester = CommandTester(command)
cachy2 = get_package('cachy', '0.2.0')
msgpack_dep = get_dependency('msgpack-python', '>=0.5 <0.6')
cachy2.requires = [
msgpack_dep,
]
repo.add_package(get_package('cachy', '0.1.0'))
repo.add_package(cachy2)
repo.add_package(get_package('msgpack-python', '0.5.3'))
tester.execute([
('command', command.get_name()),
('name', ['cachy=0.2.0'])
])
expected = """\
Updating dependencies
Resolving dependencies
Package operations: 2 installs, 0 updates, 0 removals
Writing lock file
- Installing msgpack-python (0.5.3)
- Installing cachy (0.2.0)
"""
assert tester.get_display() == expected
assert len(installer.installs) == 2
import pytest
from poetry.config import Config as BaseConfig
from poetry.console import Application as BaseApplication
from poetry.installation.noop_installer import NoopInstaller
from poetry.poetry import Poetry as BasePoetry
from poetry.packages import Locker as BaseLocker
from poetry.repositories import Pool
from poetry.repositories import Repository
from poetry.utils._compat import Path
from poetry.utils.toml_file import TomlFile
from poetry.utils.toml_file import TOMLFile
@pytest.fixture()
def installer():
return NoopInstaller()
@pytest.fixture(autouse=True)
def setup(mocker, installer):
# Set Installer's installer
p = mocker.patch('poetry.installation.installer.Installer._get_installer')
p.return_value = installer
p = mocker.patch('poetry.installation.installer.Installer._get_installed')
p.return_value = Repository()
class Application(BaseApplication):
def __init__(self, poetry_path):
def __init__(self, poetry):
super(Application, self).__init__()
self._poetry_path = poetry_path
self._poetry = poetry
def reset_poetry(self):
poetry = self._poetry
self._poetry = Poetry.create(self._poetry.file.path.parent)
self._poetry._pool = poetry.pool
class Config(BaseConfig):
def __init__(self, _):
self._raw_content = {}
self._content = TOMLFile([])
class Locker(BaseLocker):
@property
def poetry(self):
from poetry.poetry import Poetry
def __init__(self, lock, local_config):
self._lock = TomlFile(lock)
self._local_config = local_config
self._lock_data = None
self._content_hash = self._get_content_hash()
if self._poetry is not None:
return self._poetry
self._poetry = Poetry.create(self._poetry_path)
class Poetry(BasePoetry):
return self._poetry
def __init__(self,
file,
local_config,
package,
locker
):
self._file = TomlFile(file)
self._package = package
self._local_config = local_config
self._locker = Locker(locker.lock.path, locker._local_config)
self._config = Config.create('config.toml')
# Configure sources
self._pool = Pool()
@pytest.fixture
def repo():
return Repository()
@pytest.fixture
def app():
return Application(
Path(__file__).parent.parent / 'fixtures' / 'sample_project'
def poetry(repo):
p = Poetry.create(
Path(__file__).parent.parent / 'fixtures' / 'simple_project'
)
with p.file.path.open() as f:
content = f.read()
p.pool.remove_repository('pypi')
p.pool.add_repository(repo)
yield p
with p.file.path.open('w') as f:
f.write(content)
@pytest.fixture
def app(poetry):
return Application(poetry)
[tool.poetry]
name = "my-package"
version = "1.2.3"
description = "Some description."
authors = [
"Sébastien Eustace <sebastien@eustace.io>"
]
license = "MIT"
readme = "README.rst"
homepage = "https://poetry.eustace.io"
repository = "https://github.com/sdispater/poetry"
documentation = "https://poetry.eustace.io/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.6"
[tool.poetry.dev-dependencies]
......@@ -16,7 +16,6 @@ from poetry.utils._compat import Path
from poetry.utils._compat import PY2
from poetry.utils.venv import NullVenv
from tests.helpers import fixture as root_fixture
from tests.helpers import get_dependency
from tests.helpers import get_package
from tests.repositories.test_pypi_repository import MockRepository
......
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