def test_json_missing(monkeypatch, project): get_project = pretend.call_recorder(lambda n: project) get_project_versions = pretend.call_recorder(lambda n: []) app = pretend.stub( db=pretend.stub( packaging=pretend.stub( get_project=get_project, get_project_versions=get_project_versions, ) ) ) request = pretend.stub(args={}) with pytest.raises(NotFound): pypi.project_json(app, request, project_name='spam')
def test_json_missing(monkeypatch, project, version): return_value = {'name': project} if project else None get_project = pretend.call_recorder(lambda n: return_value) get_project_versions = pretend.call_recorder(lambda n: []) app = pretend.stub( db=pretend.stub( packaging=pretend.stub( get_project=get_project, get_project_versions=get_project_versions, ) ) ) request = pretend.stub(args={}) with pytest.raises(NotFound): pypi.project_json(app, request, project_name='spam', version=version)
def test_json(monkeypatch, version, callback): get_project = pretend.call_recorder(lambda n: {'name': 'spam'}) get_project_versions = pretend.call_recorder(lambda n: ['2.0', '1.0']) get_last_serial = pretend.call_recorder(lambda *n: 42) app = pretend.stub( config=pretend.stub(cache=pretend.stub(browser=False, varnish=False)), db=pretend.stub( packaging=pretend.stub( get_project=get_project, get_project_versions=get_project_versions, get_last_serial=get_last_serial, ) ) ) request = pretend.stub(args={}) if callback: request.args['callback'] = callback release_data = pretend.call_recorder(lambda n, v: dict(some='data')) release_urls = pretend.call_recorder(lambda n, v: [dict( some='url', upload_time=datetime.date(1970, 1, 1) )]) all_release_urls = pretend.call_recorder(lambda *n: { '1.0': [dict(some='data', upload_time=datetime.date(1970, 1, 1))], '2.0': [dict(some='data', upload_time=datetime.date(1970, 1, 1))], }) Interface = pretend.call_recorder(lambda a, r: pretend.stub( release_data=release_data, release_urls=release_urls, all_release_urls=all_release_urls, )) monkeypatch.setattr(xmlrpc, 'Interface', Interface) resp = pypi.project_json(app, request, project_name='spam', version=version) assert get_project.calls == [pretend.call('spam')] assert get_project_versions.calls == [pretend.call('spam')] assert release_data.calls == [pretend.call('spam', version or '2.0')] assert release_urls.calls == [pretend.call('spam', version or '2.0')] assert all_release_urls.calls == [pretend.call('spam')] assert get_last_serial.calls == [pretend.call()] expected = '{"info": {"some": "data"}, ' \ '"releases": ' \ '{"1.0": [{"some": "data", "upload_time": "1970-01-01T00:00:00"}], ' \ '"2.0": [{"some": "data", "upload_time": "1970-01-01T00:00:00"}]}, ' \ '"urls": [{"some": "url", "upload_time": "1970-01-01T00:00:00"}]}' if callback: expected = '/**/ %s(%s);' % (callback, expected) assert resp.data == expected.encode("utf8")
def test_jsonp_invalid(): app = pretend.stub() request = pretend.stub(args={'callback': 'quite invalid'}) with pytest.raises(BadRequest): pypi.project_json(app, request, project_name='spam')