Ejemplo n.º 1
0
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'
Ejemplo n.º 2
0
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'
    }]
Ejemplo n.º 3
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"}
Ejemplo n.º 4
0
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,
        },
    )
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
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'
    }]
Ejemplo n.º 12
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"]
Ejemplo n.º 13
0
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"]
Ejemplo n.º 14
0
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
Ejemplo n.º 15
0
def test_release_ulid():
    assert ReleaseFactory().ulid.timestamp
Ejemplo n.º 16
0
def test_release_get_api_url():
    release = ReleaseFactory()

    assert release.get_api_url() == f"/api/v2/releases/release/{release.id}"