2015-01-15 00:53:15 +01:00
|
|
|
import pytest
|
2014-09-12 00:58:57 +02:00
|
|
|
from pip.commands.search import (highest_version,
|
2010-07-02 14:27:22 +02:00
|
|
|
transform_hits,
|
2011-12-04 23:33:03 +01:00
|
|
|
SearchCommand)
|
|
|
|
from pip.status_codes import NO_MATCHES_FOUND, SUCCESS
|
2013-08-22 06:40:46 +02:00
|
|
|
from tests.lib import pyversion
|
2011-03-15 20:49:48 +01:00
|
|
|
|
|
|
|
|
|
|
|
if pyversion >= '3':
|
|
|
|
VERBOSE_FALSE = False
|
|
|
|
else:
|
|
|
|
VERBOSE_FALSE = 0
|
2010-02-24 11:24:55 +01:00
|
|
|
|
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_version_compare():
|
|
|
|
"""
|
|
|
|
Test version comparison.
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
"""
|
2010-02-24 11:24:55 +01:00
|
|
|
assert highest_version(['1.0', '2.0', '0.1']) == '2.0'
|
|
|
|
assert highest_version(['1.0a1', '1.0']) == '1.0'
|
|
|
|
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
def test_pypi_xml_transformation():
|
|
|
|
"""
|
|
|
|
Test transformation of data structures (pypi xmlrpc to custom list).
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
"""
|
2014-01-28 15:17:51 +01:00
|
|
|
pypi_hits = [
|
|
|
|
{
|
|
|
|
'name': 'foo',
|
|
|
|
'summary': 'foo summary',
|
|
|
|
'version': '1.0',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'name': 'foo',
|
|
|
|
'summary': 'foo summary v2',
|
|
|
|
'version': '2.0',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'_pypi_ordering': 50,
|
|
|
|
'name': 'bar',
|
|
|
|
'summary': 'bar summary',
|
|
|
|
'version': '1.0',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
expected = [
|
|
|
|
{
|
|
|
|
'versions': ['1.0', '2.0'],
|
|
|
|
'name': 'foo',
|
|
|
|
'summary': 'foo summary v2',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'versions': ['1.0'],
|
|
|
|
'name': 'bar',
|
|
|
|
'summary': 'bar summary',
|
|
|
|
},
|
|
|
|
]
|
2013-08-21 11:16:07 +02:00
|
|
|
assert transform_hits(pypi_hits) == expected
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2012-05-14 05:13:50 +02:00
|
|
|
|
2015-01-15 00:53:15 +01:00
|
|
|
@pytest.mark.network
|
2013-08-22 06:40:46 +02:00
|
|
|
def test_search(script):
|
2010-02-25 00:16:43 +01:00
|
|
|
"""
|
|
|
|
End to end test of search command.
|
2010-06-03 04:25:26 +02:00
|
|
|
|
2010-02-25 00:16:43 +01:00
|
|
|
"""
|
2013-08-21 11:16:07 +02:00
|
|
|
output = script.pip('search', 'pip')
|
2014-01-28 15:17:51 +01:00
|
|
|
assert (
|
2015-09-11 14:04:21 +02:00
|
|
|
'The PyPA recommended tool for installing '
|
|
|
|
'Python packages.' in output.stdout
|
2014-01-28 15:17:51 +01:00
|
|
|
)
|
2010-02-24 11:24:55 +01:00
|
|
|
|
2010-07-02 14:27:22 +02:00
|
|
|
|
2015-01-15 00:53:15 +01:00
|
|
|
@pytest.mark.network
|
2013-08-22 06:40:46 +02:00
|
|
|
def test_multiple_search(script):
|
2011-04-16 18:00:10 +02:00
|
|
|
"""
|
2011-04-16 22:03:03 +02:00
|
|
|
Test searching for multiple packages at once.
|
2011-04-16 18:00:10 +02:00
|
|
|
|
|
|
|
"""
|
2013-08-21 11:16:07 +02:00
|
|
|
output = script.pip('search', 'pip', 'INITools')
|
2014-01-28 15:17:51 +01:00
|
|
|
assert (
|
2015-09-11 14:04:21 +02:00
|
|
|
'The PyPA recommended tool for installing '
|
|
|
|
'Python packages.' in output.stdout
|
2014-01-28 15:17:51 +01:00
|
|
|
)
|
2011-04-16 22:03:03 +02:00
|
|
|
assert 'Tools for parsing and using INI-style files' in output.stdout
|
2011-04-16 18:00:10 +02:00
|
|
|
|
|
|
|
|
2013-08-22 06:40:46 +02:00
|
|
|
def test_search_missing_argument(script):
|
2011-07-20 20:46:16 +02:00
|
|
|
"""
|
|
|
|
Test missing required argument for search
|
|
|
|
"""
|
2013-08-21 11:16:07 +02:00
|
|
|
result = script.pip('search', expect_error=True)
|
2015-03-16 13:34:52 +01:00
|
|
|
assert 'ERROR: Missing required argument (search query).' in result.stderr
|
2011-08-02 19:16:18 +02:00
|
|
|
|
2012-01-30 07:26:12 +01:00
|
|
|
|
2015-01-15 00:53:15 +01:00
|
|
|
@pytest.mark.network
|
2015-12-26 23:58:23 +01:00
|
|
|
def test_run_method_should_return_success_when_find_packages():
|
2011-08-02 19:16:18 +02:00
|
|
|
"""
|
|
|
|
Test SearchCommand.run for found package
|
|
|
|
"""
|
2014-06-28 00:26:40 +02:00
|
|
|
command = SearchCommand()
|
2016-06-22 20:06:28 +02:00
|
|
|
cmdline = "--index=https://pypi.python.org/pypi pip"
|
2014-06-28 00:26:40 +02:00
|
|
|
options, args = command.parse_args(cmdline.split())
|
|
|
|
status = command.run(options, args)
|
2011-08-02 19:16:18 +02:00
|
|
|
assert status == SUCCESS
|
|
|
|
|
2012-01-30 07:26:12 +01:00
|
|
|
|
2015-01-15 00:53:15 +01:00
|
|
|
@pytest.mark.network
|
2014-01-28 15:17:51 +01:00
|
|
|
def test_run_method_should_return_no_matches_found_when_does_not_find_pkgs():
|
2011-08-02 19:16:18 +02:00
|
|
|
"""
|
|
|
|
Test SearchCommand.run for no matches
|
|
|
|
"""
|
2014-06-28 00:26:40 +02:00
|
|
|
command = SearchCommand()
|
2016-06-22 20:06:28 +02:00
|
|
|
cmdline = "--index=https://pypi.python.org/pypi nonexistentpackage"
|
2014-06-28 00:26:40 +02:00
|
|
|
options, args = command.parse_args(cmdline.split())
|
|
|
|
status = command.run(options, args)
|
|
|
|
assert status == NO_MATCHES_FOUND
|
2011-08-02 19:16:18 +02:00
|
|
|
|
2012-01-30 07:26:12 +01:00
|
|
|
|
2015-01-15 00:53:15 +01:00
|
|
|
@pytest.mark.network
|
2013-08-22 06:40:46 +02:00
|
|
|
def test_search_should_exit_status_code_zero_when_find_packages(script):
|
2011-08-02 19:16:18 +02:00
|
|
|
"""
|
|
|
|
Test search exit status code for package found
|
|
|
|
"""
|
2013-08-21 11:16:07 +02:00
|
|
|
result = script.pip('search', 'pip')
|
2011-08-02 19:16:18 +02:00
|
|
|
assert result.returncode == SUCCESS
|
|
|
|
|
2012-01-30 07:26:12 +01:00
|
|
|
|
2015-01-15 00:53:15 +01:00
|
|
|
@pytest.mark.network
|
2013-08-22 06:40:46 +02:00
|
|
|
def test_search_exit_status_code_when_finds_no_package(script):
|
2011-08-02 19:16:18 +02:00
|
|
|
"""
|
|
|
|
Test search exit status code for no matches
|
|
|
|
"""
|
2015-09-14 10:01:57 +02:00
|
|
|
result = script.pip('search', 'nonexistentpackage', expect_error=True)
|
2013-05-27 19:46:31 +02:00
|
|
|
assert result.returncode == NO_MATCHES_FOUND, result.returncode
|