2016-11-04 15:15:47 +01:00
|
|
|
from tests.lib import create_test_package_with_setup
|
2016-06-26 16:20:09 +02:00
|
|
|
|
|
|
|
|
|
|
|
def matches_expected_lines(string, expected_lines):
|
|
|
|
# Ignore empty lines
|
|
|
|
output_lines = set(filter(None, string.splitlines()))
|
|
|
|
# Match regardless of order
|
|
|
|
return set(output_lines) == set(expected_lines)
|
|
|
|
|
|
|
|
|
2017-12-16 19:13:46 +01:00
|
|
|
def test_basic_check_clean(script):
|
2016-06-26 16:20:09 +02:00
|
|
|
"""On a clean environment, check should print a helpful message.
|
2013-06-19 14:13:06 +02:00
|
|
|
|
|
|
|
"""
|
|
|
|
result = script.pip('check')
|
2016-06-26 16:20:09 +02:00
|
|
|
|
|
|
|
expected_lines = (
|
|
|
|
"No broken requirements found.",
|
|
|
|
)
|
|
|
|
assert matches_expected_lines(result.stdout, expected_lines)
|
2018-03-28 10:10:47 +02:00
|
|
|
assert result.returncode == 0
|
2013-06-19 14:13:06 +02:00
|
|
|
|
|
|
|
|
2017-12-16 19:13:46 +01:00
|
|
|
def test_basic_check_missing_dependency(script):
|
2016-11-04 15:15:47 +01:00
|
|
|
# Setup a small project
|
|
|
|
pkga_path = create_test_package_with_setup(
|
|
|
|
script,
|
|
|
|
name='pkga', version='1.0', install_requires=['missing==0.1'],
|
|
|
|
)
|
|
|
|
# Let's install pkga without its dependency
|
|
|
|
res = script.pip('install', '--no-index', pkga_path, '--no-deps')
|
|
|
|
assert "Successfully installed pkga-1.0" in res.stdout, str(res)
|
2013-06-19 14:13:06 +02:00
|
|
|
|
|
|
|
result = script.pip('check', expect_error=True)
|
|
|
|
|
2016-06-26 16:20:09 +02:00
|
|
|
expected_lines = (
|
2016-11-04 15:15:47 +01:00
|
|
|
"pkga 1.0 requires missing, which is not installed.",
|
2016-06-26 16:20:09 +02:00
|
|
|
)
|
|
|
|
assert matches_expected_lines(result.stdout, expected_lines)
|
2013-06-19 14:13:06 +02:00
|
|
|
assert result.returncode == 1
|
|
|
|
|
|
|
|
|
2017-12-16 19:13:46 +01:00
|
|
|
def test_basic_check_broken_dependency(script):
|
2016-11-04 15:15:47 +01:00
|
|
|
# Setup pkga depending on pkgb>=1.0
|
|
|
|
pkga_path = create_test_package_with_setup(
|
|
|
|
script,
|
|
|
|
name='pkga', version='1.0', install_requires=['broken>=1.0'],
|
|
|
|
)
|
|
|
|
# Let's install pkga without its dependency
|
|
|
|
res = script.pip('install', '--no-index', pkga_path, '--no-deps')
|
|
|
|
assert "Successfully installed pkga-1.0" in res.stdout, str(res)
|
|
|
|
|
|
|
|
# Setup broken==0.1
|
|
|
|
broken_path = create_test_package_with_setup(
|
|
|
|
script,
|
|
|
|
name='broken', version='0.1',
|
|
|
|
)
|
|
|
|
# Let's install broken==0.1
|
2017-10-28 19:25:32 +02:00
|
|
|
res = script.pip(
|
|
|
|
'install', '--no-index', broken_path, '--no-warn-conflicts',
|
|
|
|
)
|
2016-11-04 15:15:47 +01:00
|
|
|
assert "Successfully installed broken-0.1" in res.stdout, str(res)
|
2013-06-19 14:13:06 +02:00
|
|
|
|
|
|
|
result = script.pip('check', expect_error=True)
|
|
|
|
|
2016-06-26 16:20:09 +02:00
|
|
|
expected_lines = (
|
2016-11-04 15:15:47 +01:00
|
|
|
"pkga 1.0 has requirement broken>=1.0, but you have broken 0.1.",
|
2016-06-26 16:20:09 +02:00
|
|
|
)
|
|
|
|
assert matches_expected_lines(result.stdout, expected_lines)
|
2013-06-19 14:13:06 +02:00
|
|
|
assert result.returncode == 1
|
|
|
|
|
|
|
|
|
2017-12-16 19:13:46 +01:00
|
|
|
def test_basic_check_broken_dependency_and_missing_dependency(script):
|
2016-11-04 15:15:47 +01:00
|
|
|
pkga_path = create_test_package_with_setup(
|
|
|
|
script,
|
|
|
|
name='pkga', version='1.0', install_requires=['broken>=1.0'],
|
|
|
|
)
|
|
|
|
# Let's install pkga without its dependency
|
|
|
|
res = script.pip('install', '--no-index', pkga_path, '--no-deps')
|
|
|
|
assert "Successfully installed pkga-1.0" in res.stdout, str(res)
|
|
|
|
|
|
|
|
# Setup broken==0.1
|
|
|
|
broken_path = create_test_package_with_setup(
|
|
|
|
script,
|
|
|
|
name='broken', version='0.1', install_requires=['missing'],
|
|
|
|
)
|
|
|
|
# Let's install broken==0.1
|
|
|
|
res = script.pip('install', '--no-index', broken_path, '--no-deps')
|
|
|
|
assert "Successfully installed broken-0.1" in res.stdout, str(res)
|
2013-06-19 14:13:06 +02:00
|
|
|
|
|
|
|
result = script.pip('check', expect_error=True)
|
|
|
|
|
2016-06-26 16:20:09 +02:00
|
|
|
expected_lines = (
|
2016-11-04 15:15:47 +01:00
|
|
|
"broken 0.1 requires missing, which is not installed.",
|
|
|
|
"pkga 1.0 has requirement broken>=1.0, but you have broken 0.1."
|
2016-06-26 16:20:09 +02:00
|
|
|
)
|
2016-11-04 15:15:47 +01:00
|
|
|
|
2016-06-26 16:20:09 +02:00
|
|
|
assert matches_expected_lines(result.stdout, expected_lines)
|
|
|
|
assert result.returncode == 1
|
|
|
|
|
|
|
|
|
2017-11-01 17:16:07 +01:00
|
|
|
def test_check_complicated_name_missing(script):
|
|
|
|
package_a_path = create_test_package_with_setup(
|
2016-11-04 15:15:47 +01:00
|
|
|
script,
|
2017-11-01 17:16:07 +01:00
|
|
|
name='package_A', version='1.0',
|
|
|
|
install_requires=['Dependency-B>=1.0'],
|
2016-11-04 15:15:47 +01:00
|
|
|
)
|
2016-06-26 16:20:09 +02:00
|
|
|
|
2017-11-01 17:16:07 +01:00
|
|
|
# Without dependency
|
|
|
|
result = script.pip('install', '--no-index', package_a_path, '--no-deps')
|
|
|
|
assert "Successfully installed package-A-1.0" in result.stdout, str(result)
|
|
|
|
|
|
|
|
result = script.pip('check', expect_error=True)
|
|
|
|
expected_lines = (
|
2018-01-26 03:55:50 +01:00
|
|
|
"package-a 1.0 requires dependency-b, which is not installed.",
|
2017-11-01 17:16:07 +01:00
|
|
|
)
|
|
|
|
assert matches_expected_lines(result.stdout, expected_lines)
|
2018-03-28 10:10:47 +02:00
|
|
|
assert result.returncode == 1
|
2017-11-01 17:16:07 +01:00
|
|
|
|
|
|
|
|
|
|
|
def test_check_complicated_name_broken(script):
|
|
|
|
package_a_path = create_test_package_with_setup(
|
2016-11-04 15:15:47 +01:00
|
|
|
script,
|
2017-11-01 17:16:07 +01:00
|
|
|
name='package_A', version='1.0',
|
|
|
|
install_requires=['Dependency-B>=1.0'],
|
|
|
|
)
|
|
|
|
dependency_b_path_incompatible = create_test_package_with_setup(
|
|
|
|
script,
|
|
|
|
name='dependency-b', version='0.1',
|
2016-11-04 15:15:47 +01:00
|
|
|
)
|
2016-06-26 16:20:09 +02:00
|
|
|
|
2017-11-01 17:16:07 +01:00
|
|
|
# With broken dependency
|
|
|
|
result = script.pip('install', '--no-index', package_a_path, '--no-deps')
|
|
|
|
assert "Successfully installed package-A-1.0" in result.stdout, str(result)
|
2016-06-26 16:20:09 +02:00
|
|
|
|
2017-11-01 17:16:07 +01:00
|
|
|
result = script.pip(
|
|
|
|
'install', '--no-index', dependency_b_path_incompatible, '--no-deps',
|
|
|
|
)
|
|
|
|
assert "Successfully installed dependency-b-0.1" in result.stdout
|
|
|
|
|
|
|
|
result = script.pip('check', expect_error=True)
|
|
|
|
expected_lines = (
|
|
|
|
"package-a 1.0 has requirement Dependency-B>=1.0, but you have "
|
|
|
|
"dependency-b 0.1.",
|
|
|
|
)
|
|
|
|
assert matches_expected_lines(result.stdout, expected_lines)
|
2018-03-28 10:10:47 +02:00
|
|
|
assert result.returncode == 1
|
2017-11-01 17:16:07 +01:00
|
|
|
|
|
|
|
|
|
|
|
def test_check_complicated_name_clean(script):
|
|
|
|
package_a_path = create_test_package_with_setup(
|
|
|
|
script,
|
|
|
|
name='package_A', version='1.0',
|
|
|
|
install_requires=['Dependency-B>=1.0'],
|
|
|
|
)
|
|
|
|
dependency_b_path = create_test_package_with_setup(
|
|
|
|
script,
|
|
|
|
name='dependency-b', version='1.0',
|
|
|
|
)
|
|
|
|
|
|
|
|
result = script.pip('install', '--no-index', package_a_path, '--no-deps')
|
|
|
|
assert "Successfully installed package-A-1.0" in result.stdout, str(result)
|
|
|
|
|
|
|
|
result = script.pip(
|
|
|
|
'install', '--no-index', dependency_b_path, '--no-deps',
|
|
|
|
)
|
|
|
|
assert "Successfully installed dependency-b-1.0" in result.stdout
|
|
|
|
|
|
|
|
result = script.pip('check', expect_error=True)
|
|
|
|
expected_lines = (
|
|
|
|
"No broken requirements found.",
|
|
|
|
)
|
|
|
|
assert matches_expected_lines(result.stdout, expected_lines)
|
2018-03-28 10:10:47 +02:00
|
|
|
assert result.returncode == 0
|
2018-03-28 10:14:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
def test_check_considers_conditional_reqs(script):
|
|
|
|
package_a_path = create_test_package_with_setup(
|
|
|
|
script,
|
|
|
|
name='package_A', version='1.0',
|
|
|
|
install_requires=[
|
|
|
|
"Dependency-B>=1.0; python_version != '2.7'",
|
|
|
|
"Dependency-B>=2.0; python_version == '2.7'",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
result = script.pip('install', '--no-index', package_a_path, '--no-deps')
|
|
|
|
assert "Successfully installed package-A-1.0" in result.stdout, str(result)
|
|
|
|
|
|
|
|
result = script.pip('check', expect_error=True)
|
|
|
|
expected_lines = (
|
|
|
|
"package-a 1.0 requires dependency-b, which is not installed.",
|
|
|
|
)
|
|
|
|
assert matches_expected_lines(result.stdout, expected_lines)
|
|
|
|
assert result.returncode == 1
|