def test_urls(self, db_session, home_page, download_url, project_urls, expected): release = DBReleaseFactory.create(home_page=home_page, download_url=download_url) for urlspec in project_urls: db_session.add( Dependency( release=release, kind=DependencyKind.project_url.value, specifier=urlspec, )) # TODO: It'd be nice to test for the actual ordering here. assert dict(release.urls) == dict(expected)
def _construct_dependencies(form, types): for name, kind in types.items(): for item in getattr(form, name).data: yield Dependency(kind=kind.value, specifier=item)
def test_detail_renders(self, pyramid_config, db_request, db_session): project = ProjectFactory.create(has_docs=True) description_content_type = "text/x-rst" url = "/the/fake/url/" project_urls = [ "url," + url, "Homepage,https://example.com/home2/", "Source Code,https://example.com/source-code/", "uri,http://[email protected]:123/forum/questions/?tag=networking&order=newest#top", # noqa: E501 "ldap,ldap://[2001:db8::7]/c=GB?objectClass?one", "tel,tel:+1-816-555-1212", "telnet,telnet://192.0.2.16:80/", "urn,urn:oasis:names:specification:docbook:dtd:xml:4.1.2", "reservedchars,http://example.com?&$+/:;=@#", # Commas don't work! r"unsafechars,http://example.com <>[]{}|\^%", ] expected_urls = [] for project_url in reversed(project_urls): expected_urls.append(tuple(project_url.split(","))) expected_urls = OrderedDict(tuple(expected_urls)) releases = [ ReleaseFactory.create(project=project, version=v) for v in ["0.1", "1.0", "2.0"] ] releases += [ ReleaseFactory.create( project=project, version="3.0", description_content_type=description_content_type, ) ] for urlspec in project_urls: db_session.add( Dependency( release=releases[3], kind=DependencyKind.project_url.value, specifier=urlspec, )) files = [ FileFactory.create( release=r, filename="{}-{}.tar.gz".format(project.name, r.version), python_version="source", size=200, has_signature=True, ) for r in releases[1:] ] user = UserFactory.create() JournalEntryFactory.reset_sequence() je = JournalEntryFactory.create(name=project.name, submitted_by=user) db_request.route_url = pretend.call_recorder(lambda *args, **kw: url) result = json.json_release(releases[3], db_request) assert set(db_request.route_url.calls) == { pretend.call("packaging.file", path=files[0].path), pretend.call("packaging.file", path=files[1].path), pretend.call("packaging.file", path=files[2].path), pretend.call("packaging.project", name=project.name), pretend.call("packaging.release", name=project.name, version=releases[3].version), pretend.call("legacy.docs", project=project.name), } _assert_has_cors_headers(db_request.response.headers) assert db_request.response.headers["X-PyPI-Last-Serial"] == str(je.id) assert result == { "info": { "author": None, "author_email": None, "bugtrack_url": None, "classifiers": [], "description_content_type": description_content_type, "description": None, "docs_url": "/the/fake/url/", "download_url": None, "downloads": { "last_day": -1, "last_week": -1, "last_month": -1 }, "home_page": None, "keywords": None, "license": None, "maintainer": None, "maintainer_email": None, "name": project.name, "package_url": "/the/fake/url/", "platform": None, "project_url": "/the/fake/url/", "project_urls": expected_urls, "release_url": "/the/fake/url/", "requires_dist": None, "requires_python": None, "summary": None, "version": "3.0", }, "releases": { "0.1": [], "1.0": [{ "comment_text": None, "downloads": -1, "filename": files[0].filename, "has_sig": True, "md5_digest": files[0].md5_digest, "digests": { "md5": files[0].md5_digest, "sha256": files[0].sha256_digest, }, "packagetype": None, "python_version": "source", "size": 200, "upload_time": files[0].upload_time.strftime("%Y-%m-%dT%H:%M:%S"), "url": "/the/fake/url/", "requires_python": None, }], "2.0": [{ "comment_text": None, "downloads": -1, "filename": files[1].filename, "has_sig": True, "md5_digest": files[1].md5_digest, "digests": { "md5": files[1].md5_digest, "sha256": files[1].sha256_digest, }, "packagetype": None, "python_version": "source", "size": 200, "upload_time": files[1].upload_time.strftime("%Y-%m-%dT%H:%M:%S"), "url": "/the/fake/url/", "requires_python": None, }], "3.0": [{ "comment_text": None, "downloads": -1, "filename": files[2].filename, "has_sig": True, "md5_digest": files[2].md5_digest, "digests": { "md5": files[2].md5_digest, "sha256": files[2].sha256_digest, }, "packagetype": None, "python_version": "source", "size": 200, "upload_time": files[2].upload_time.strftime("%Y-%m-%dT%H:%M:%S"), "url": "/the/fake/url/", "requires_python": None, }], }, "urls": [{ "comment_text": None, "downloads": -1, "filename": files[2].filename, "has_sig": True, "md5_digest": files[2].md5_digest, "digests": { "md5": files[2].md5_digest, "sha256": files[2].sha256_digest, }, "packagetype": None, "python_version": "source", "size": 200, "upload_time": files[2].upload_time.strftime("%Y-%m-%dT%H:%M:%S"), "url": "/the/fake/url/", "requires_python": None, }], "last_serial": je.id, }