ยปCore Development>Code coverage>Lib/packaging/tests/test_pypi_xmlrpc.py

Python code coverage for Lib/packaging/tests/test_pypi_xmlrpc.py

#countcontent
1n/a"""Tests for the packaging.pypi.xmlrpc module."""
2n/a
3n/afrom packaging.pypi.xmlrpc import Client, InvalidSearchField, ProjectNotFound
4n/a
5n/afrom packaging.tests import unittest
6n/afrom packaging.tests.support import fake_dec
7n/a
8n/atry:
9n/a import threading
10n/a from packaging.tests.pypi_server import use_xmlrpc_server
11n/aexcept ImportError:
12n/a threading = None
13n/a use_xmlrpc_server = fake_dec
14n/a
15n/a
16n/a@unittest.skipIf(threading is None, "Needs threading")
17n/aclass TestXMLRPCClient(unittest.TestCase):
18n/a def _get_client(self, server, *args, **kwargs):
19n/a return Client(server.full_address, *args, **kwargs)
20n/a
21n/a @use_xmlrpc_server()
22n/a def test_search_projects(self, server):
23n/a client = self._get_client(server)
24n/a server.xmlrpc.set_search_result(['FooBar', 'Foo', 'FooFoo'])
25n/a results = [r.name for r in client.search_projects(name='Foo')]
26n/a self.assertEqual(3, len(results))
27n/a self.assertIn('FooBar', results)
28n/a self.assertIn('Foo', results)
29n/a self.assertIn('FooFoo', results)
30n/a
31n/a def test_search_projects_bad_fields(self):
32n/a client = Client()
33n/a self.assertRaises(InvalidSearchField, client.search_projects,
34n/a invalid="test")
35n/a
36n/a @use_xmlrpc_server()
37n/a def test_get_releases(self, server):
38n/a client = self._get_client(server)
39n/a server.xmlrpc.set_distributions([
40n/a {'name': 'FooBar', 'version': '1.1'},
41n/a {'name': 'FooBar', 'version': '1.2', 'url': 'http://some/url/'},
42n/a {'name': 'FooBar', 'version': '1.3', 'url': 'http://other/url/'},
43n/a ])
44n/a
45n/a # use a lambda here to avoid an useless mock call
46n/a server.xmlrpc.list_releases = lambda *a, **k: ['1.1', '1.2', '1.3']
47n/a
48n/a releases = client.get_releases('FooBar (<=1.2)')
49n/a # dont call release_data and release_url; just return name and version.
50n/a self.assertEqual(2, len(releases))
51n/a versions = releases.get_versions()
52n/a self.assertIn('1.1', versions)
53n/a self.assertIn('1.2', versions)
54n/a self.assertNotIn('1.3', versions)
55n/a
56n/a self.assertRaises(ProjectNotFound, client.get_releases, 'Foo')
57n/a
58n/a @use_xmlrpc_server()
59n/a def test_get_distributions(self, server):
60n/a client = self._get_client(server)
61n/a server.xmlrpc.set_distributions([
62n/a {'name': 'FooBar', 'version': '1.1',
63n/a 'url': 'http://example.org/foobar-1.1-sdist.tar.gz',
64n/a 'digest': '1234567',
65n/a 'type': 'sdist', 'python_version': 'source'},
66n/a {'name':'FooBar', 'version': '1.1',
67n/a 'url': 'http://example.org/foobar-1.1-bdist.tar.gz',
68n/a 'digest': '8912345', 'type': 'bdist'},
69n/a ])
70n/a
71n/a releases = client.get_releases('FooBar', '1.1')
72n/a client.get_distributions('FooBar', '1.1')
73n/a release = releases.get_release('1.1')
74n/a self.assertTrue('http://example.org/foobar-1.1-sdist.tar.gz',
75n/a release['sdist'].url['url'])
76n/a self.assertTrue('http://example.org/foobar-1.1-bdist.tar.gz',
77n/a release['bdist'].url['url'])
78n/a self.assertEqual(release['sdist'].python_version, 'source')
79n/a
80n/a @use_xmlrpc_server()
81n/a def test_get_metadata(self, server):
82n/a client = self._get_client(server)
83n/a server.xmlrpc.set_distributions([
84n/a {'name': 'FooBar',
85n/a 'version': '1.1',
86n/a 'keywords': '',
87n/a 'obsoletes_dist': ['FooFoo'],
88n/a 'requires_external': ['Foo'],
89n/a }])
90n/a release = client.get_metadata('FooBar', '1.1')
91n/a self.assertEqual(['Foo'], release.metadata['requires_external'])
92n/a self.assertEqual(['FooFoo'], release.metadata['obsoletes_dist'])
93n/a
94n/a
95n/adef test_suite():
96n/a suite = unittest.TestSuite()
97n/a suite.addTest(unittest.makeSuite(TestXMLRPCClient))
98n/a return suite
99n/a
100n/aif __name__ == '__main__':
101n/a unittest.main(defaultTest='test_suite')