From 8eeed761a9c25ea8ccfc347fbd3f5894b5957d9e Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Mon, 28 Dec 2015 11:43:15 +0100 Subject: [PATCH] Update specs for CI Build, add `artifacts?` method `artifacts?` method checks if artifacts archive is available. --- .../projects/artifacts_controller.rb | 2 + app/models/ci/build.rb | 26 ++++---- app/views/admin/builds/_build.html.haml | 2 +- app/views/projects/builds/show.html.haml | 2 +- .../commit_statuses/_commit_status.html.haml | 2 +- spec/models/build_spec.rb | 60 +++++++++++-------- 6 files changed, 53 insertions(+), 41 deletions(-) diff --git a/app/controllers/projects/artifacts_controller.rb b/app/controllers/projects/artifacts_controller.rb index 399aa11fcbe..18677fb1e95 100644 --- a/app/controllers/projects/artifacts_controller.rb +++ b/app/controllers/projects/artifacts_controller.rb @@ -15,6 +15,8 @@ class Projects::ArtifactsController < Projects::ApplicationController end def browse + return render_404 unless build.artifacts? + current_path = params[:path] ? "./#{params[:path]}/" : './' artifacts_metadata = build.artifacts_metadata(current_path) @path = Gitlab::StringPath.new(current_path, artifacts_metadata) diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 9adbfdd2c92..327114e0350 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -319,24 +319,26 @@ module Ci pending? && !any_runners_online? end - def artifacts_download_url - if artifacts_file.exists? - download_namespace_project_build_artifacts_path(project.namespace, project, self) - end - end - - def artifacts_browse_url - if artifacts_file.exists? - browse_namespace_project_build_artifacts_path(project.namespace, project, self) - end - end - def execute_hooks build_data = Gitlab::BuildDataBuilder.build(self) project.execute_hooks(build_data.dup, :build_hooks) project.execute_services(build_data.dup, :build_hooks) end + def artifacts? + artifacts_file.exists? + end + + def artifacts_download_url + download_namespace_project_build_artifacts_path(project.namespace, project, self) if + artifacts? + end + + def artifacts_browse_url + browse_namespace_project_build_artifacts_path(project.namespace, project, self) if + artifacts? + end + def artifacts_metadata(path) [] end diff --git a/app/views/admin/builds/_build.html.haml b/app/views/admin/builds/_build.html.haml index 7cd98c0f540..26cdb162b76 100644 --- a/app/views/admin/builds/_build.html.haml +++ b/app/views/admin/builds/_build.html.haml @@ -60,7 +60,7 @@ %td .pull-right - - if current_user && can?(current_user, :download_build_artifacts, project) && build.artifacts_file.exist? + - if current_user && can?(current_user, :download_build_artifacts, project) && build.artifacts? = link_to build.artifacts_download_url, title: 'Download artifacts' do %i.fa.fa-download - if current_user && can?(current_user, :manage_builds, build.project) diff --git a/app/views/projects/builds/show.html.haml b/app/views/projects/builds/show.html.haml index 5780d7ad175..c7fd047949e 100644 --- a/app/views/projects/builds/show.html.haml +++ b/app/views/projects/builds/show.html.haml @@ -89,7 +89,7 @@ Test coverage %h1 #{@build.coverage}% - - if current_user && can?(current_user, :download_build_artifacts, @project) && @build.artifacts_file.exist? + - if current_user && can?(current_user, :download_build_artifacts, @project) && @build.artifacts? .build-widget.center .panel.panel-default .panel-heading Build artifacts diff --git a/app/views/projects/commit_statuses/_commit_status.html.haml b/app/views/projects/commit_statuses/_commit_status.html.haml index 5e7f55fdbff..7872eec72b0 100644 --- a/app/views/projects/commit_statuses/_commit_status.html.haml +++ b/app/views/projects/commit_statuses/_commit_status.html.haml @@ -66,7 +66,7 @@ %td .pull-right - - if current_user && can?(current_user, :download_build_artifacts, commit_status.project) && commit_status.artifacts_file.exist? + - if current_user && can?(current_user, :download_build_artifacts, commit_status.project) && commit_status.artifacts? = link_to commit_status.artifacts_download_url, title: 'Download artifacts' do %i.fa.fa-download - if current_user && can?(current_user, :manage_builds, commit_status.project) diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb index 85cba9c3e57..33e0eb7d5d7 100644 --- a/spec/models/build_spec.rb +++ b/spec/models/build_spec.rb @@ -1,28 +1,3 @@ -# == Schema Information -# -# Table name: builds -# -# id :integer not null, primary key -# project_id :integer -# status :string(255) -# finished_at :datetime -# trace :text -# created_at :datetime -# updated_at :datetime -# started_at :datetime -# runner_id :integer -# commit_id :integer -# coverage :float -# commands :text -# job_id :integer -# name :string(255) -# deploy :boolean default(FALSE) -# options :text -# allow_failure :boolean default(FALSE), not null -# stage :string(255) -# trigger_request_id :integer -# - require 'spec_helper' describe Ci::Build, models: true do @@ -376,13 +351,46 @@ describe Ci::Build, models: true do is_expected.to be_nil end - it 'should be nil if artifact exist' do + it 'should not be nil if artifact exist' do gif = fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') build.update_attributes(artifacts_file: gif) is_expected.to_not be_nil end end + describe :artifacts_browse_url do + subject { build.artifacts_browse_url } + + it "should be nil if artifact doesn't exist" do + build.update_attributes(artifacts_file: nil) + is_expected.to be_nil + end + + it 'should not be nil if artifact exist' do + gif = fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') + build.update_attributes(artifacts_file: gif) + is_expected.to_not be_nil + end + end + + describe :artifacts? do + subject { build.artifacts? } + + context 'artifacts archive does not exist' do + before { build.update_attributes(artifacts_file: nil) } + it { is_expected.to be_falsy } + end + + context 'artifacts archive exists' do + before do + gif = fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') + build.update_attributes(artifacts_file: gif) + end + + it { is_expected.to be_truthy } + end + end + describe :repo_url do let(:build) { FactoryGirl.create :ci_build } let(:project) { build.project }