Fix deployable nil exception on job controller
When deployable is nil, we gracefully take care of the case.
This commit is contained in:
parent
153f25af9c
commit
f246db4446
4 changed files with 23 additions and 1 deletions
|
@ -23,7 +23,7 @@ class DeploymentEntity < Grape::Entity
|
||||||
expose :last?
|
expose :last?
|
||||||
expose :deployed_by, as: :user, using: UserEntity
|
expose :deployed_by, as: :user, using: UserEntity
|
||||||
|
|
||||||
expose :deployable do |deployment, opts|
|
expose :deployable, if: -> (deployment) { deployment.deployable.present? } do |deployment, opts|
|
||||||
deployment.deployable.yield_self do |deployable|
|
deployment.deployable.yield_self do |deployable|
|
||||||
if include_details?
|
if include_details?
|
||||||
JobEntity.represent(deployable, opts)
|
JobEntity.represent(deployable, opts)
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Fix users cannot access job detail page when deployable does not exist
|
||||||
|
merge_request: 32247
|
||||||
|
author:
|
||||||
|
type: fixed
|
|
@ -609,6 +609,14 @@ describe 'Jobs', :clean_gitlab_redis_shared_state do
|
||||||
expect(find('.js-environment-link')['href']).to match("environments/#{environment.id}")
|
expect(find('.js-environment-link')['href']).to match("environments/#{environment.id}")
|
||||||
expect(find('.js-job-deployment-link')['href']).to include(second_deployment.deployable.project.path, second_deployment.deployable_id.to_s)
|
expect(find('.js-job-deployment-link')['href']).to include(second_deployment.deployable.project.path, second_deployment.deployable_id.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when deployment does not have a deployable' do
|
||||||
|
let!(:second_deployment) { create(:deployment, :success, environment: environment, deployable: nil) }
|
||||||
|
|
||||||
|
it 'has an empty href' do
|
||||||
|
expect(find('.js-job-deployment-link')['href']).to be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'job failed to deploy' do
|
context 'job failed to deploy' do
|
||||||
|
|
|
@ -36,6 +36,15 @@ describe DeploymentEntity do
|
||||||
expect(subject).to include(:deployed_at)
|
expect(subject).to include(:deployed_at)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when deployable is nil' do
|
||||||
|
let(:entity) { described_class.new(deployment, request: request, deployment_details: false) }
|
||||||
|
let(:deployment) { create(:deployment, deployable: nil, project: project) }
|
||||||
|
|
||||||
|
it 'does not expose deployable entry' do
|
||||||
|
expect(subject).not_to include(:deployable)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when the pipeline has another manual action' do
|
context 'when the pipeline has another manual action' do
|
||||||
let(:other_build) { create(:ci_build, :manual, name: 'another deploy', pipeline: pipeline) }
|
let(:other_build) { create(:ci_build, :manual, name: 'another deploy', pipeline: pipeline) }
|
||||||
let!(:other_deployment) { create(:deployment, deployable: other_build) }
|
let!(:other_deployment) { create(:deployment, deployable: other_build) }
|
||||||
|
|
Loading…
Reference in a new issue