def test_workspacedetail_unknown_workspace(rf): project = ProjectFactory() request = rf.get("/") with pytest.raises(Http404): WorkspaceDetail.as_view()( request, org_slug=project.org.slug, project_slug=project.slug, workspace_slug="", )
def test_workspacedetail_unauthorized(rf): workspace = WorkspaceFactory() request = rf.get("/") request.user = UserFactory() response = WorkspaceDetail.as_view(get_github_api=FakeGitHubAPI)( request, org_slug=workspace.project.org.slug, project_slug=workspace.project.slug, workspace_slug=workspace.name, ) assert response.status_code == 200 # this is false because while the user can view outputs, but they have no # Backends with a level 4 URL set up. assert not response.context_data["user_can_view_files"] assert not response.context_data["user_can_run_jobs"] assert not response.context_data["user_can_view_releases"] # this is false because: # the user is either logged out # OR doesn't have the right permission to see outputs # AND there are no published Snapshots to show the user. assert not response.context_data["user_can_view_outputs"]
def test_workspacedetail_authorized_view_snaphots(rf): workspace = WorkspaceFactory() SnapshotFactory(workspace=workspace, published_at=timezone.now()) request = rf.get("/") request.user = UserFactory() response = WorkspaceDetail.as_view(get_github_api=FakeGitHubAPI)( request, org_slug=workspace.project.org.slug, project_slug=workspace.project.slug, workspace_slug=workspace.name, ) assert response.status_code == 200 assert response.context_data["user_can_view_outputs"]
def test_workspacedetail_authorized_view_releases(rf): workspace = WorkspaceFactory() ReleaseFactory(workspace=workspace) request = rf.get("/") request.user = UserFactory() response = WorkspaceDetail.as_view(get_github_api=FakeGitHubAPI)( request, org_slug=workspace.project.org.slug, project_slug=workspace.project.slug, workspace_slug=workspace.name, ) assert response.status_code == 200 assert response.context_data["user_can_view_releases"]
def test_workspacedetail_authorized_view_files(rf): backend = BackendFactory(level_4_url="http://test/") user = UserFactory(roles=[ProjectCollaborator]) workspace = WorkspaceFactory() BackendMembershipFactory(backend=backend, user=user) request = rf.get("/") request.user = user response = WorkspaceDetail.as_view(get_github_api=FakeGitHubAPI)( request, org_slug=workspace.project.org.slug, project_slug=workspace.project.slug, workspace_slug=workspace.name, ) assert response.status_code == 200 assert response.context_data["user_can_view_files"]
def test_workspacedetail_with_no_github(rf): workspace = WorkspaceFactory() request = rf.get("/") request.user = UserFactory() class BrokenGitHubAPI: def get_repo_is_private(self, *args): raise requests.HTTPError response = WorkspaceDetail.as_view(get_github_api=BrokenGitHubAPI)( request, org_slug=workspace.project.org.slug, project_slug=workspace.project.slug, workspace_slug=workspace.name, ) assert response.status_code == 200 assert response.context_data["repo_is_private"] is None
def test_workspacedetail_authorized_honeycomb(rf): workspace = WorkspaceFactory() SnapshotFactory(workspace=workspace, published_at=timezone.now()) request = rf.get("/") request.user = UserFactory(roles=[CoreDeveloper]) response = WorkspaceDetail.as_view(get_github_api=FakeGitHubAPI)( request, org_slug=workspace.project.org.slug, project_slug=workspace.project.slug, workspace_slug=workspace.name, ) assert response.status_code == 200 assert "Honeycomb" in response.rendered_content assert ( f"workspace_name%22%2C%22op%22%3A%22%3D%22%2C%22value%22%3A%22{workspace.name}" in response.rendered_content )
def test_workspacedetail_authorized_run_jobs_with_opensafely_interactive_role(rf): workspace = WorkspaceFactory() user = UserFactory(roles=[OpensafelyInteractive]) ProjectMembershipFactory( project=workspace.project, user=user, roles=[ProjectDeveloper] ) request = rf.get("/") request.user = user response = WorkspaceDetail.as_view(get_github_api=FakeGitHubAPI)( request, org_slug=workspace.project.org.slug, project_slug=workspace.project.slug, workspace_slug=workspace.name, ) assert response.status_code == 200 assert response.context_data["run_jobs_url"] == workspace.get_pick_ref_url()
def test_workspacedetail_authorized_archive_workspaces(rf): workspace = WorkspaceFactory() user = UserFactory() ProjectMembershipFactory( project=workspace.project, user=user, roles=[ProjectDeveloper] ) request = rf.get("/") request.user = user response = WorkspaceDetail.as_view(get_github_api=FakeGitHubAPI)( request, org_slug=workspace.project.org.slug, project_slug=workspace.project.slug, workspace_slug=workspace.name, ) assert response.status_code == 200 assert response.context_data["user_can_archive_workspace"]