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