From 5456859b5b28baca95ced74179a349563498a5f0 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Mon, 9 Jan 2017 10:58:45 +0100 Subject: [PATCH] Add method that checks for expiring build artifacts --- app/models/ci/build.rb | 4 ++ app/views/projects/builds/_sidebar.html.haml | 4 +- spec/features/projects/builds_spec.rb | 4 +- spec/models/build_spec.rb | 45 ++++++++++++++------ 4 files changed, 40 insertions(+), 17 deletions(-) diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 27042798741..48ffe40abc6 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -507,6 +507,10 @@ module Ci end end + def has_expiring_artifacts? + artifacts_expire_at.present? + end + def keep_artifacts! self.update(artifacts_expire_at: nil) end diff --git a/app/views/projects/builds/_sidebar.html.haml b/app/views/projects/builds/_sidebar.html.haml index bb279c97261..37bf085130a 100644 --- a/app/views/projects/builds/_sidebar.html.haml +++ b/app/views/projects/builds/_sidebar.html.haml @@ -22,14 +22,14 @@ %p.build-detail-row The artifacts were removed #{time_ago_with_tooltip(@build.artifacts_expire_at)} - - elsif @build.artifacts_expire_at + - elsif @build.has_expiring_artifacts? %p.build-detail-row The artifacts will be removed in %span.js-artifacts-remove= @build.artifacts_expire_at - if @build.artifacts? .btn-group.btn-group-justified{ role: :group } - - if @build.artifacts_expire_at && can?(current_user, :update_build, @build) + - if @build.has_expiring_artifacts? && can?(current_user, :update_build, @build) = link_to keep_namespace_project_build_artifacts_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-default', method: :post do Keep diff --git a/spec/features/projects/builds_spec.rb b/spec/features/projects/builds_spec.rb index 984918e22f7..11d27feab0b 100644 --- a/spec/features/projects/builds_spec.rb +++ b/spec/features/projects/builds_spec.rb @@ -155,8 +155,8 @@ feature 'Builds', :feature do click_link 'Keep' - expect(page).not_to have_link 'Keep' - expect(page).not_to have_content 'The artifacts will be removed' + expect(page).to have_no_link 'Keep' + expect(page).to have_no_content 'The artifacts will be removed' end end diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb index cd3b6d51545..4d71c20f525 100644 --- a/spec/models/build_spec.rb +++ b/spec/models/build_spec.rb @@ -652,6 +652,24 @@ describe Ci::Build, models: true do end end + describe '#has_expiring_artifacts?' do + context 'when artifacts have expiration date set' do + before { build.update(artifacts_expire_at: 1.day.from_now) } + + it 'has expiring artifacts' do + expect(build).to have_expiring_artifacts + end + end + + context 'when artifacts do not have expiration date set' do + before { build.update(artifacts_expire_at: nil) } + + it 'does not have expiring artifacts' do + expect(build).not_to have_expiring_artifacts + end + end + end + describe '#artifacts_metadata?' do subject { build.artifacts_metadata? } context 'artifacts metadata does not exist' do @@ -663,19 +681,6 @@ describe Ci::Build, models: true do it { is_expected.to be_truthy } end end - describe '#repo_url' do - let(:build) { create(:ci_build) } - let(:project) { build.project } - - subject { build.repo_url } - - it { is_expected.to be_a(String) } - it { is_expected.to end_with(".git") } - it { is_expected.to start_with(project.web_url[0..6]) } - it { is_expected.to include(build.token) } - it { is_expected.to include('gitlab-ci-token') } - it { is_expected.to include(project.web_url[7..-1]) } - end describe '#artifacts_expire_in' do subject { build.artifacts_expire_in } @@ -721,6 +726,20 @@ describe Ci::Build, models: true do end end + describe '#repo_url' do + let(:build) { create(:ci_build) } + let(:project) { build.project } + + subject { build.repo_url } + + it { is_expected.to be_a(String) } + it { is_expected.to end_with(".git") } + it { is_expected.to start_with(project.web_url[0..6]) } + it { is_expected.to include(build.token) } + it { is_expected.to include('gitlab-ci-token') } + it { is_expected.to include(project.web_url[7..-1]) } + end + describe '#depends_on_builds' do let!(:build) { create(:ci_build, pipeline: pipeline, name: 'build', stage_idx: 0, stage: 'build') } let!(:rspec_test) { create(:ci_build, pipeline: pipeline, name: 'rspec', stage_idx: 1, stage: 'test') }