import pytest
@pytest.mark.parametrize(
('input', 'expected', 'prereleases'),
((tup + (False,))[:3] for tup in [
(['Django'], ['django==1.8']),
(['Flask'],
['flask==0.10.1', 'itsdangerous==0.24', 'markupsafe==0.23',
'jinja2==2.7.3', 'werkzeug==0.10.4']),
(['Jinja2', 'markupsafe'],
['jinja2==2.7.3', 'markupsafe==0.23']),
(['SQLAlchemy'],
['sqlalchemy==0.9.9']),
(['SQLAlchemy'],
['sqlalchemy==1.0.0b5'],
True),
(['ipython'],
['ipython==2.1.0', 'gnureadline==6.3.3']),
(['ipython[notebook]'],
[
'ipython[notebook]==2.1.0',
'pyzmq==2.1.12',
'jinja2==2.7.3',
'tornado==3.2.2',
'markupsafe==0.23',
'gnureadline==6.3.3']
),
(['ipython[notebook,nbconvert]'],
[
'ipython[nbconvert,notebook]==2.1.0',
'pyzmq==2.1.12',
'jinja2==2.7.3',
'tornado==3.2.2',
'markupsafe==0.23',
'gnureadline==6.3.3',
'pygments==1.5',
'sphinx==0.3']
),
(['ipython[notebook]', 'ipython[nbconvert]'],
[
'ipython[nbconvert,notebook]==2.1.0',
'pyzmq==2.1.12',
'jinja2==2.7.3',
'tornado==3.2.2',
'markupsafe==0.23',
'gnureadline==6.3.3',
'pygments==1.5',
'sphinx==0.3']
),
(['celery<=3.1.23', 'librabbitmq'],
[
'amqp==1.4.9',
'anyjson==0.3.3',
'billiard==3.5.0.2',
'celery==3.1.23',
'kombu==3.0.35',
'librabbitmq==1.6.1',
'pytz==2016.4']
),
(['billiard', 'celery',
'fake-piptools-test-with-pinned-deps'],
[
'amqp==1.4.9',
'anyjson==0.3.3',
'billiard==3.3.0.23',
'celery==3.1.18', 'fake-piptools-test-with-pinned-deps==0.1',
'kombu==3.0.35',
'pytz==2016.4']
),
(['html5lib'], ['html5lib==0.999999999']),
(['Flask', ('click', True), ('itsdangerous', True)],
['flask==0.10.1', 'itsdangerous==0.24', 'markupsafe==0.23',
'jinja2==2.7.3', 'werkzeug==0.10.4']
),
(['setuptools==35.0.0', 'anyjson==0.3.3'], ['anyjson==0.3.3']),
(['fake-piptools-test-with-unsafe-deps==0.1'],
['fake-piptools-test-with-unsafe-deps==0.1']
),
])
)
def test_resolver(resolver, from_line, input, expected, prereleases):
input = [line if isinstance(line, tuple) else (line, False) for line in input]
input = [from_line(req[0], constraint=req[1]) for req in input]
output = resolver(input, prereleases=prereleases).resolve()
output = {str(line) for line in output}
assert output == {str(line) for line in expected}
@pytest.mark.parametrize(
('input', 'expected', 'prereleases'),
((tup + (False,))[:3] for tup in [
(['setuptools==34.0.0'], ['appdirs==1.4.9', 'setuptools==34.0.0', 'packaging==16.8']),
(['fake-piptools-test-with-unsafe-deps==0.1'],
['appdirs==1.4.9',
'setuptools==34.0.0',
'packaging==16.8',
'fake-piptools-test-with-unsafe-deps==0.1'
]),
])
)
def test_resolver__allows_unsafe_deps(resolver, from_line, input, expected, prereleases):
input = [line if isinstance(line, tuple) else (line, False) for line in input]
input = [from_line(req[0], constraint=req[1]) for req in input]
output = resolver(input, prereleases=prereleases, allow_unsafe=True).resolve()
output = {str(line) for line in output}
assert output == {str(line) for line in expected}