Skip to content
Snippets Groups Projects
Commit de24df98 authored by Grzegorz Bizon's avatar Grzegorz Bizon Committed by Filipa Lacerda
Browse files

Do not serialize deployment details for build details page

parent 412a3857
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -14,7 +14,7 @@ class BuildDetailsEntity < JobEntity
expose :deployment_status, if: -> (*) { build.starts_environment? } do
expose :deployment_status, as: :status
expose :persisted_environment, as: :environment do |build, options|
options.merge(except: [{ last_deployment: [:commit] }]).yield_self do |opts|
options.merge(deployment_details: false).yield_self do |opts|
EnvironmentEntity.represent(build.persisted_environment, opts)
end
end
Loading
Loading
Loading
Loading
@@ -20,15 +20,19 @@ class DeploymentEntity < Grape::Entity
expose :created_at
expose :tag
expose :last?
expose :user, using: UserEntity
expose :commit, using: CommitEntity
expose :deployable, using: JobEntity
expose :manual_actions, using: JobEntity, if: -> (*) { can_create_deployment? }
expose :scheduled_actions, using: JobEntity, if: -> (*) { can_create_deployment? }
expose :commit, using: CommitEntity, if: -> (*) { include_details? }
expose :deployable, using: JobEntity, if: -> (*) { include_details? }
expose :manual_actions, using: JobEntity, if: -> (*) { include_details? && can_create_deployment? }
expose :scheduled_actions, using: JobEntity, if: -> (*) { include_details? && can_create_deployment? }
 
private
 
def include_details?
options.fetch(:deployment_details, true)
end
def can_create_deployment?
can?(request.current_user, :create_deployment, request.project)
end
Loading
Loading
Loading
Loading
@@ -253,14 +253,14 @@ describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
 
context 'with deployment' do
before do
create(:deployment, :success, environment: environment, project: project)
end
let(:merge_request) { create(:merge_request, source_project: project) }
let(:environment) { create(:environment, project: project, name: 'staging', state: :available) }
let(:job) { create(:ci_build, :running, environment: environment.name, pipeline: pipeline) }
 
before do
create(:deployment, :success, environment: environment, project: project)
end
it 'exposes the deployment information' do
get_show_json
 
Loading
Loading
Loading
Loading
@@ -138,11 +138,11 @@ describe BuildDetailsEntity do
allow(request).to receive(:project).and_return(project)
end
 
it 'does not serialize latest deployment commit' do
it 'does not serialize latest deployment commit and associated builds' do
response = subject.with_indifferent_access
 
response.dig(:deployment_status, :environment, :last_deployment).tap do |deployment|
expect(deployment).not_to include(:commit)
expect(deployment).not_to include(:commit, :deployable, :manual_actions, :scheduled_actions)
end
end
end
Loading
Loading
Loading
Loading
@@ -10,6 +10,7 @@ describe DeploymentEntity do
let(:build) { create(:ci_build, :manual, pipeline: pipeline) }
let(:pipeline) { create(:ci_pipeline, project: project, user: user) }
let(:entity) { described_class.new(deployment, request: request) }
subject { entity.as_json }
 
before do
Loading
Loading
@@ -47,6 +48,16 @@ describe DeploymentEntity do
expect(subject[:manual_actions]).not_to be_present
end
end
context 'when deployment details serialization was disabled' do
let(:entity) do
described_class.new(deployment, request: request, deployment_details: false)
end
it 'does not serialize manual actions details' do
expect(subject.with_indifferent_access).not_to include(:manual_actions)
end
end
end
 
describe 'scheduled_actions' do
Loading
Loading
@@ -69,5 +80,26 @@ describe DeploymentEntity do
expect(subject[:scheduled_actions]).to be_empty
end
end
context 'when deployment details serialization was disabled' do
let(:entity) do
described_class.new(deployment, request: request, deployment_details: false)
end
it 'does not serialize scheduled actions details' do
expect(subject.with_indifferent_access).not_to include(:scheduled_actions)
end
end
end
context 'when deployment details serialization was disabled' do
let(:entity) do
described_class.new(deployment, request: request, deployment_details: false)
end
it 'does not serialize deployment details' do
expect(subject.with_indifferent_access)
.not_to include(:commit, :deployable, :manual_actions, :scheduled_actions)
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment