def master(package_json): from bandersnatch.master import Master class FakeReader: async def read(self, *args): return b"" class FakeAiohttpClient: headers = {"X-PYPI-LAST-SERIAL": "1"} async def __aenter__(self): return self async def __aexit__(self, *args): pass @property def content(self, *args): return FakeReader() async def json(self, *args): return package_json master = Master("https://pypi.example.com") master.rpc = mock.Mock() master.session = asynctest.MagicMock() master.session.get = asynctest.MagicMock(return_value=FakeAiohttpClient()) master.session.request = asynctest.MagicMock( return_value=FakeAiohttpClient()) return master
def master(package_json: Dict[str, Any]) -> "Master": from bandersnatch.master import Master class FakeReader: async def read(self, *args: Any) -> bytes: return b"" class FakeAiohttpClient: headers = {"X-PYPI-LAST-SERIAL": "1"} async def __aenter__(self) -> "FakeAiohttpClient": return self async def __aexit__(self, *args: Any) -> None: pass @property def content(self) -> "FakeReader": return FakeReader() async def json(self, *args: Any) -> Dict[str, Any]: return package_json master = Master("https://pypi.example.com") master.rpc = mock.Mock() # type: ignore master.session = mock.MagicMock() master.session.get = mock.MagicMock(return_value=FakeAiohttpClient()) master.session.request = mock.MagicMock(return_value=FakeAiohttpClient()) return master
def master(package_json: Dict[str, Any]) -> "Master": from bandersnatch.master import Master class FakeReader: async def read(self, *args: Any) -> bytes: return b"" class FakeAiohttpClient: headers = {"X-PYPI-LAST-SERIAL": "1"} async def __aenter__(self) -> "FakeAiohttpClient": return self async def __aexit__(self, *args: Any) -> None: pass @property def content(self) -> "FakeReader": return FakeReader() async def json(self, *args: Any) -> Dict[str, Any]: return package_json def session_side_effect(*args: Any, **kwargs: Any) -> Any: if args[0].startswith("https://not-working.example.com"): raise AssertionError("Requested for expected not-working URL") else: return FakeAiohttpClient() master = Master("https://pypi.example.com") master.rpc = mock.Mock() # type: ignore master.session = mock.MagicMock() master.session.get.side_effect = session_side_effect master.session.request.side_effect = session_side_effect return master
def master(requests): from bandersnatch.master import Master master = Master('https://pypi.example.com') master.rpc = mock.Mock() master.session = mock.Mock() master.session.get = requests return master
def master(requests): from bandersnatch.master import Master master = Master("https://pypi.example.com") master.rpc = mock.Mock() master.session = mock.Mock() master.session.get = requests return master
async def test_changed_packages_with_changes(master: Master) -> None: list_of_package_changes = [ ("foobar", "1", 0, "added", 17), ("baz", "2", 1, "updated", 18), ("foobar", "1", 0, "changed", 20), # The server usually just hands out monotonous serials in the # changelog. This verifies that we don't fail even with garbage input. ("foobar", "1", 0, "changed", 19), ] master.rpc = AsyncMock(return_value=list_of_package_changes) # type: ignore changes = await master.changed_packages(4) assert changes == {"baz": 18, "foobar": 20}
async def test_changed_packages_no_changes(master: Master) -> None: master.rpc = asynctest.CoroutineMock(return_value=None) # type: ignore changes = await master.changed_packages(4) assert changes == {}
async def test_all_packages_raises(master: Master) -> None: master.rpc = asynctest.CoroutineMock(return_value=[]) # type: ignore with pytest.raises(XmlRpcError): await master.all_packages()
async def test_all_packages(master: Master) -> None: expected = [["aiohttp", "", "", "", "69"]] master.rpc = asynctest.CoroutineMock(return_value=expected) # type: ignore pacakges = await master.all_packages() assert expected == pacakges
def test_rpc_factory(): master = Master("https://pypi.example.com") assert isinstance(master.rpc(), xmlrpc2.client.Client)
def master(): from bandersnatch.master import Master class FakeReader: async def read(self, *args): return b"" class FakeAiohttpClient: headers = {"X-PYPI-LAST-SERIAL": "1"} async def __aenter__(self): return self async def __aexit__(self, *args): pass @property def content(self, *args): return FakeReader() async def json(self, *args): return { "info": { "name": "foo", "version": "0.1" }, "last_serial": 654_321, "releases": { "0.1": [ { "url": "https://pypi.example.com/packages/any/f/foo/foo.zip", "filename": "foo.zip", "digests": { "md5": "6bd3ddc295176f4dca196b5eb2c4d858", "sha256": ("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ), }, "md5_digest": "b6bcb391b040c4468262706faf9d3cce", }, { "url": "https://pypi.example.com/packages/2.7/f/foo/foo.whl", "filename": "foo.whl", "digests": { "md5": "6bd3ddc295176f4dca196b5eb2c4d858", "sha256": ("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ), }, "md5_digest": "6bd3ddc295176f4dca196b5eb2c4d858", }, ] }, } master = Master("https://pypi.example.com") master.rpc = mock.Mock() master.session = asynctest.MagicMock() master.session.get = asynctest.MagicMock(return_value=FakeAiohttpClient()) master.session.request = asynctest.MagicMock( return_value=FakeAiohttpClient()) return master
def test_rpc_factory(): master = Master('https://pypi.example.com') assert isinstance(master.rpc(), xmlrpc2.client.Client)