def test_fetch_package_should_update_existing_package(pypi_stub): repository = RepositoryFactory(upstream_pypi_url=pypi_stub.url) package = PackageFactory(repository=repository, name='minibar') ReleaseFactory(package=package, version='0.1') ReleaseFactory(package=package, version='0.2') fetch_package(repository.pk, 'minibar') package = repository.packages.filter(name='minibar').first() assert package assert package.name == 'minibar' assert not package.is_local assert package.releases.count() == 3 release_1, release_2, release_3 = package.releases.all() assert release_1.version == '0.4.0' assert release_2.version == '0.2' assert release_3.version == '0.1' assert release_3.author == 'Cesar Canassa' assert release_3.author_email == '*****@*****.**' assert release_3.description == 'Minibar' assert release_3.download_url == 'UNKNOWN' assert release_3.home_page == 'https://github.com/canassa/minibar' assert release_3.license == 'MIT' assert release_3.metadata_version == '1.0' assert release_3.summary == 'Simple text progress bar library'
def test_search_operator_and(client, admin_user, live_server, repository, rpc_endpoint): ReleaseFactory(package__name='my-package-1', package__repository=repository, summary='Test summary') ReleaseFactory(package__name='arcoiro', package__repository=repository, summary='Test summary') ReleaseFactory(package__name='my-package-2', package__repository=repository, summary='arcoiro') client = xmlrpclib.ServerProxy(live_server + rpc_endpoint) response = client.search( { 'name': ['my-package'], 'summary': ['Test summary'] }, 'and') assert response == [{ '_pypi_ordering': 0, 'name': 'my-package-1', 'summary': 'Test summary', 'version': '1.0.0' }]
def test_reviewapi_success(api_rf): release = ReleaseFactory() ReleaseFileFactory(release=release, name="test1", filehash="test1") ReleaseFileFactory(release=release, name="test2", filehash="test2") data = { "files": [ { "name": "test1", "url": "url", "size": 7, "sha256": "test1", "date": timezone.now(), "metadata": {}, "review": { "status": "APPROVED", "comments": {"test": "foo"}, }, }, { "name": "test2", "url": "url", "size": 7, "sha256": "test2", "date": timezone.now(), "metadata": {}, "review": { "status": "REJECTED", "comments": {"test": "bar"}, }, }, ], "metadata": {}, "review": {"foo": "bar"}, } request = api_rf.post("/", data=data, format="json") request.user = UserFactory(roles=[OutputChecker]) response = ReviewAPI.as_view()(request, release_id=release.pk) assert response.status_code == 200, response.data release.refresh_from_db() assert release.review == {"foo": "bar"} review1, review2 = ReleaseFileReview.objects.filter( release_file__release=release ).order_by("release_file__name") assert review1.status == "APPROVED" assert review1.comments == {"test": "foo"} assert review2.status == "REJECTED" assert review2.comments == {"test": "bar"}
def test_release_get_download_url(): release = ReleaseFactory() url = release.get_download_url() assert url == reverse( "release-download", kwargs={ "org_slug": release.workspace.project.org.slug, "project_slug": release.workspace.project.slug, "workspace_slug": release.workspace.name, "pk": release.id, }, )
def test_releaseapi_get_with_anonymous_user(api_rf): release = ReleaseFactory() request = api_rf.get("/") response = ReleaseAPI.as_view()(request, release_id=release.id) assert response.status_code == 403
def test_releaseapi_post_with_no_backend_token(api_rf): release = ReleaseFactory() request = api_rf.post("/") response = ReleaseAPI.as_view()(request, release_id=release.id) assert response.status_code == 403
def test_releaseapi_post_bad_backend_token(api_rf): release = ReleaseFactory() request = api_rf.post("/", HTTP_AUTHORIZATION="invalid") response = ReleaseAPI.as_view()(request, release_id=release.id) assert response.status_code == 403
def test_releaseapi_get_without_permission(api_rf): release = ReleaseFactory() request = api_rf.get("/") request.user = UserFactory() response = ReleaseAPI.as_view()(request, release_id=release.id) assert response.status_code == 403
def test_releaseapi_post_no_user(api_rf): release = ReleaseFactory() request = api_rf.post( "/", HTTP_AUTHORIZATION=release.backend.auth_token, ) response = ReleaseAPI.as_view()(request, release_id=release.id) assert response.status_code == 403
def test_reviewapi_without_permission(api_rf): release = ReleaseFactory() data = { "files": [], "metadata": {}, "review": {}, } request = api_rf.post("/", data=data, format="json") response = ReviewAPI.as_view()(request, release_id=release.pk) assert response.status_code == 200, response.data
def test_search_package_name(client, admin_user, live_server, repository, rpc_endpoint): ReleaseFactory(package__name='my-package', package__repository=repository, summary='Test summary') client = xmlrpclib.ServerProxy(live_server + rpc_endpoint) response = client.search({'name': 'my-package'}) assert response == [{ '_pypi_ordering': 0, 'name': 'my-package', 'summary': 'Test summary', 'version': '1.0.0' }]
def test_releaseapi_post_no_files(api_rf): user = UserFactory(roles=[OutputChecker]) release = ReleaseFactory() BackendMembershipFactory(backend=release.backend, user=user) request = api_rf.post( "/", HTTP_CONTENT_DISPOSITION="attachment; filename=file1.txt", HTTP_AUTHORIZATION=release.backend.auth_token, HTTP_OS_USER=user.username, ) response = ReleaseAPI.as_view()(request, release_id=release.id) assert response.status_code == 400 assert "No data" in response.data["detail"]
def test_releaseworkspaceapi_post_release_already_exists(api_rf): user = UserFactory(roles=[OutputChecker]) release = ReleaseFactory() rfile = ReleaseFileFactory( release=release, created_by=user, name="file.txt", filehash="hash", ) BackendMembershipFactory(backend=release.backend, user=user) ProjectMembershipFactory(project=release.workspace.project, user=user) data = { "files": [ { "name": rfile.name, "url": "url", "size": 7, "sha256": rfile.filehash, "date": timezone.now(), "metadata": {}, "review": None, } ], "metadata": {}, "review": {}, } request = api_rf.post( "/", data=data, format="json", HTTP_AUTHORIZATION=release.backend.auth_token, HTTP_OS_USER=user.username, ) response = ReleaseWorkspaceAPI.as_view()( request, workspace_name=release.workspace.name ) assert response.status_code == 400 assert "file.txt" in response.data["detail"] assert "already been uploaded" in response.data["detail"]
def test_reviewapi_unknown_filename_or_content(api_rf): release = ReleaseFactory() ReleaseFileFactory(release=release, name="test1", filehash="test1") ReleaseFileFactory(release=release, name="test2", filehash="test2") data = { "files": [ { "name": "unknown", "url": "url", "size": 7, "sha256": "test1", "date": timezone.now(), "metadata": {}, "review": { "status": "APPROVED", "comments": {"test": "foo"}, }, }, { "name": "test2", "url": "url", "size": 7, "sha256": "unknown", "date": timezone.now(), "metadata": {}, "review": { "status": "REJECTED", "comments": {"test": "bar"}, }, }, ], "metadata": {}, "review": {}, } request = api_rf.post("/", data=data, format="json") request.user = UserFactory(roles=[OutputChecker]) response = ReviewAPI.as_view()(request, release_id=release.pk) assert response.status_code == 400, response.data
def test_release_ulid(): assert ReleaseFactory().ulid.timestamp
def test_release_get_api_url(): release = ReleaseFactory() assert release.get_api_url() == f"/api/v2/releases/release/{release.id}"