Commit a544d270 authored by Matija Čupić's avatar Matija Čupić

Extract artifact availability check into method

Extracts artifact availability checks into a method in Ci::Build
parent 829b9f5c
...@@ -647,6 +647,10 @@ module Ci ...@@ -647,6 +647,10 @@ module Ci
!artifacts_expired? && artifacts_file&.exists? !artifacts_expired? && artifacts_file&.exists?
end end
def locked_artifacts?
pipeline.artifacts_locked? && artifacts_file&.exists?
end
# This method is similar to #artifacts? but it includes the artifacts # This method is similar to #artifacts? but it includes the artifacts
# locking mechanics. A new method was created to prevent breaking existing # locking mechanics. A new method was created to prevent breaking existing
# behavior and avoid introducing N+1s. # behavior and avoid introducing N+1s.
......
...@@ -27,15 +27,15 @@ class BuildDetailsEntity < JobEntity ...@@ -27,15 +27,15 @@ class BuildDetailsEntity < JobEntity
end end
expose :artifact, if: -> (*) { can?(current_user, :read_build, build) } do expose :artifact, if: -> (*) { can?(current_user, :read_build, build) } do
expose :download_path, if: -> (*) { build.pipeline.artifacts_locked? || build.artifacts? } do |build| expose :download_path, if: -> (*) { build.locked_artifacts? || build.artifacts? } do |build|
download_project_job_artifacts_path(project, build) download_project_job_artifacts_path(project, build)
end end
expose :browse_path, if: -> (*) { build.pipeline.artifacts_locked? || build.browsable_artifacts? } do |build| expose :browse_path, if: -> (*) { build.locked_artifacts? || build.browsable_artifacts? } do |build|
browse_project_job_artifacts_path(project, build) browse_project_job_artifacts_path(project, build)
end end
expose :keep_path, if: -> (*) { build.has_expiring_archive_artifacts? && can?(current_user, :update_build, build) } do |build| expose :keep_path, if: -> (*) { (build.locked_artifacts? || build.has_expiring_archive_artifacts?) && can?(current_user, :update_build, build) } do |build|
keep_project_job_artifacts_path(project, build) keep_project_job_artifacts_path(project, build)
end end
......
...@@ -612,6 +612,42 @@ RSpec.describe Ci::Build do ...@@ -612,6 +612,42 @@ RSpec.describe Ci::Build do
end end
end end
describe '#locked_artifacts?' do
subject(:locked_artifacts) { build.locked_artifacts? }
context 'when pipeline is artifacts_locked' do
context 'artifacts archive does not exist' do
let(:build) { create(:ci_build) }
it { is_expected.to be_falsy }
end
context 'artifacts archive exists' do
let(:build) { create(:ci_build, :artifacts) }
it { is_expected.to be_truthy }
end
end
context 'when pipeline is unlocked' do
before do
build.pipeline.unlocked!
end
context 'artifacts archive does not exist' do
let(:build) { create(:ci_build) }
it { is_expected.to be_falsy }
end
context 'artifacts archive exists' do
let(:build) { create(:ci_build, :artifacts) }
it { is_expected.to be_falsy }
end
end
end
describe '#available_artifacts?' do describe '#available_artifacts?' do
let(:build) { create(:ci_build) } let(:build) { create(:ci_build) }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment