forked from conda/conda
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_pip.py
51 lines (38 loc) · 1.75 KB
/
test_pip.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import random
import unittest
try:
import mock
skip_mocked = False
except ImportError:
skip_mocked = True
from conda import pip
def generate_random_version():
return '%s.%s' % (random.randint(1, 5), random.randint(0, 20))
class PipPackageTestCase(unittest.TestCase):
def test_acts_like_dict(self):
p = pip.PipPackage(name='foo', version='0.1')
self.assertIsInstance(p, dict)
def test_simple_string_as_spec(self):
version = generate_random_version()
p = pip.PipPackage(name='bar', version=version)
expected = 'bar-{version}-<pip>'.format(version=version)
self.assertEqual(expected, str(p))
def test_handles_case_where_path_provided(self):
version = generate_random_version()
path = '/some/path/%s/foo' % random.randint(0, 10)
p = pip.PipPackage(name='baz', path=path, version=version)
expected = 'baz ({path})-{version}-<pip>'.format(path=path,
version=version)
self.assertEqual(expected, str(p))
class installed_test(unittest.TestCase):
@unittest.skipIf(skip_mocked, 'install mock to test')
# TODO brittle test -- shows code that needs refactoring
def test_stops_on_exception(self):
with mock.patch.object(pip, 'subprocess') as subprocess:
subprocess.check_output = mock.Mock(side_effect=[Exception(), ])
with mock.patch.object(pip, 'pip_args') as pip_args:
# make sure that installed doesn't bail early
pip_args.return_value = ['pip', 'list']
for pkg in pip.installed('/some/prefix'):
self.fail('should never get here')
self.assertEqual(1, subprocess.check_output.call_count)