2019-10-16 05:07:51 -04:00
# frozen_string_literal: true
2017-05-18 07:32:22 -04:00
require 'spec_helper'
require 'tempfile'
2018-07-05 02:32:05 -04:00
describe 'Jobs' , :clean_gitlab_redis_shared_state do
2019-03-20 10:02:36 -04:00
include Gitlab :: Routing
include ProjectForksHelper
2017-05-18 07:32:22 -04:00
let ( :user ) { create ( :user ) }
let ( :user_access_level ) { :developer }
2017-07-24 18:51:14 -04:00
let ( :project ) { create ( :project , :repository ) }
2018-09-25 04:07:47 -04:00
let ( :pipeline ) { create ( :ci_pipeline , project : project , sha : project . commit ( 'HEAD' ) . sha ) }
2017-05-18 07:32:22 -04:00
2018-02-05 04:07:37 -05:00
let ( :job ) { create ( :ci_build , :trace_live , pipeline : pipeline ) }
2017-06-06 10:21:39 -04:00
let ( :job2 ) { create ( :ci_build ) }
2017-05-18 07:32:22 -04:00
let ( :artifacts_file ) do
2018-06-05 17:18:06 -04:00
fixture_file_upload ( 'spec/fixtures/banana_sample.gif' , 'image/gif' )
2017-05-18 07:32:22 -04:00
end
before do
2017-12-22 03:18:28 -05:00
project . add_role ( user , user_access_level )
2017-06-21 19:44:10 -04:00
sign_in ( user )
2017-05-18 07:32:22 -04:00
end
describe " GET /:project/jobs " do
2018-09-25 04:07:47 -04:00
let! ( :job ) { create ( :ci_build , pipeline : pipeline ) }
2017-05-18 07:32:22 -04:00
context " Pending scope " do
before do
2017-07-06 12:20:50 -04:00
visit project_jobs_path ( project , scope : :pending )
2017-05-18 07:32:22 -04:00
end
it " shows Pending tab jobs " do
expect ( page ) . to have_selector ( '.nav-links li.active' , text : 'Pending' )
2017-06-06 10:21:39 -04:00
expect ( page ) . to have_content job . short_sha
expect ( page ) . to have_content job . ref
expect ( page ) . to have_content job . name
2017-05-18 07:32:22 -04:00
end
end
context " Running scope " do
before do
2017-06-06 10:21:39 -04:00
job . run!
2017-07-06 12:20:50 -04:00
visit project_jobs_path ( project , scope : :running )
2017-05-18 07:32:22 -04:00
end
it " shows Running tab jobs " do
expect ( page ) . to have_selector ( '.nav-links li.active' , text : 'Running' )
2017-06-06 10:21:39 -04:00
expect ( page ) . to have_content job . short_sha
expect ( page ) . to have_content job . ref
expect ( page ) . to have_content job . name
2017-05-18 07:32:22 -04:00
end
end
context " Finished scope " do
before do
2017-06-06 10:21:39 -04:00
job . run!
2017-07-06 12:20:50 -04:00
visit project_jobs_path ( project , scope : :finished )
2017-05-18 07:32:22 -04:00
end
it " shows Finished tab jobs " do
expect ( page ) . to have_selector ( '.nav-links li.active' , text : 'Finished' )
expect ( page ) . to have_content 'No jobs to show'
end
end
context " All jobs " do
before do
project . builds . running_or_pending . each ( & :success )
2017-07-06 12:20:50 -04:00
visit project_jobs_path ( project )
2017-05-18 07:32:22 -04:00
end
it " shows All tab jobs " do
expect ( page ) . to have_selector ( '.nav-links li.active' , text : 'All' )
2017-06-06 10:21:39 -04:00
expect ( page ) . to have_content job . short_sha
expect ( page ) . to have_content job . ref
expect ( page ) . to have_content job . name
2017-05-18 07:32:22 -04:00
end
end
context " when visiting old URL " do
let ( :jobs_url ) do
2017-07-06 12:20:50 -04:00
project_jobs_path ( project )
2017-05-18 07:32:22 -04:00
end
before do
2017-05-26 09:55:29 -04:00
visit jobs_url . sub ( '/-/jobs' , '/builds' )
2017-05-18 07:32:22 -04:00
end
it " redirects to new URL " do
expect ( page . current_path ) . to eq ( jobs_url )
end
end
end
describe " GET /:project/jobs/:id " do
context " Job from project " do
2018-03-26 14:23:11 -04:00
let ( :job ) { create ( :ci_build , :success , :trace_live , pipeline : pipeline ) }
2017-06-12 05:20:19 -04:00
2018-09-25 04:07:47 -04:00
it 'shows status name' , :js do
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job )
2017-05-18 07:32:22 -04:00
2018-09-25 04:07:47 -04:00
wait_for_requests
2017-06-12 05:20:19 -04:00
expect ( page ) . to have_css ( '.ci-status.ci-success' , text : 'passed' )
end
2018-09-25 04:07:47 -04:00
it 'shows commit`s data' , :js do
2019-01-24 08:43:02 -05:00
requests = inspect_requests do
2018-09-25 04:07:47 -04:00
visit project_job_path ( project , job )
end
wait_for_requests
expect ( requests . first . status_code ) . to eq ( 200 )
2017-05-18 07:32:22 -04:00
expect ( page ) . to have_content pipeline . sha [ 0 .. 7 ]
2018-09-25 04:07:47 -04:00
expect ( page ) . to have_content pipeline . commit . title
2017-05-18 07:32:22 -04:00
end
2018-10-03 10:13:20 -04:00
it 'shows active job' , :js do
2018-09-25 04:07:47 -04:00
visit project_job_path ( project , job )
2018-10-03 10:13:20 -04:00
wait_for_requests
2017-05-18 07:32:22 -04:00
expect ( page ) . to have_selector ( '.build-job.active' )
end
end
2019-03-20 10:02:36 -04:00
context 'pipeline info block' , :js do
it 'shows pipeline id and source branch' do
visit project_job_path ( project , job )
within '.js-pipeline-info' do
2019-06-14 09:17:18 -04:00
expect ( page ) . to have_content ( " Pipeline # #{ pipeline . id } for #{ pipeline . ref } " )
2019-03-20 10:02:36 -04:00
end
end
context 'when pipeline is detached merge request pipeline' do
let ( :merge_request ) do
create ( :merge_request ,
:with_detached_merge_request_pipeline ,
target_project : target_project ,
source_project : source_project )
end
let ( :source_project ) { project }
let ( :target_project ) { project }
let ( :pipeline ) { merge_request . all_pipelines . last }
let ( :job ) { create ( :ci_build , pipeline : pipeline ) }
it 'shows merge request iid and source branch' do
visit project_job_path ( project , job )
within '.js-pipeline-info' do
expect ( page ) . to have_content ( " for ! #{ pipeline . merge_request . iid } " \
" with #{ pipeline . merge_request . source_branch } " )
expect ( page ) . to have_link ( " ! #{ pipeline . merge_request . iid } " ,
href : project_merge_request_path ( project , merge_request ) )
expect ( page ) . to have_link ( pipeline . merge_request . source_branch ,
href : project_commits_path ( project , merge_request . source_branch ) )
end
end
context 'when source project is a forked project' do
let ( :source_project ) { fork_project ( project , user , repository : true ) }
let ( :target_project ) { project }
2019-10-23 05:06:03 -04:00
it 'shows merge request iid and source branch' , :sidekiq_might_not_need_inline do
2019-03-20 10:02:36 -04:00
visit project_job_path ( source_project , job )
within '.js-pipeline-info' do
expect ( page ) . to have_content ( " for ! #{ pipeline . merge_request . iid } " \
" with #{ pipeline . merge_request . source_branch } " )
expect ( page ) . to have_link ( " ! #{ pipeline . merge_request . iid } " ,
href : project_merge_request_path ( project , merge_request ) )
expect ( page ) . to have_link ( pipeline . merge_request . source_branch ,
href : project_commits_path ( source_project , merge_request . source_branch ) )
end
end
end
end
context 'when pipeline is merge request pipeline' do
let ( :merge_request ) do
create ( :merge_request ,
:with_merge_request_pipeline ,
target_project : target_project ,
source_project : source_project )
end
let ( :source_project ) { project }
let ( :target_project ) { project }
let ( :pipeline ) { merge_request . all_pipelines . last }
let ( :job ) { create ( :ci_build , pipeline : pipeline ) }
it 'shows merge request iid and source branch' do
visit project_job_path ( project , job )
within '.js-pipeline-info' do
expect ( page ) . to have_content ( " for ! #{ pipeline . merge_request . iid } " \
" with #{ pipeline . merge_request . source_branch } " \
" into #{ pipeline . merge_request . target_branch } " )
expect ( page ) . to have_link ( " ! #{ pipeline . merge_request . iid } " ,
href : project_merge_request_path ( project , merge_request ) )
expect ( page ) . to have_link ( pipeline . merge_request . source_branch ,
href : project_commits_path ( project , merge_request . source_branch ) )
expect ( page ) . to have_link ( pipeline . merge_request . target_branch ,
href : project_commits_path ( project , merge_request . target_branch ) )
end
end
context 'when source project is a forked project' do
let ( :source_project ) { fork_project ( project , user , repository : true ) }
let ( :target_project ) { project }
2019-10-23 05:06:03 -04:00
it 'shows merge request iid and source branch' , :sidekiq_might_not_need_inline do
2019-03-20 10:02:36 -04:00
visit project_job_path ( source_project , job )
within '.js-pipeline-info' do
expect ( page ) . to have_content ( " for ! #{ pipeline . merge_request . iid } " \
" with #{ pipeline . merge_request . source_branch } " \
" into #{ pipeline . merge_request . target_branch } " )
expect ( page ) . to have_link ( " ! #{ pipeline . merge_request . iid } " ,
href : project_merge_request_path ( project , merge_request ) )
expect ( page ) . to have_link ( pipeline . merge_request . source_branch ,
href : project_commits_path ( source_project , merge_request . source_branch ) )
expect ( page ) . to have_link ( pipeline . merge_request . target_branch ,
href : project_commits_path ( project , merge_request . target_branch ) )
end
end
end
end
end
2018-10-03 10:13:20 -04:00
context 'sidebar' , :js do
2018-06-28 10:25:49 -04:00
let ( :job ) { create ( :ci_build , :success , :trace_live , pipeline : pipeline , name : '<img src=x onerror=alert(document.domain)>' ) }
before do
visit project_job_path ( project , job )
2018-10-03 10:13:20 -04:00
wait_for_requests
2018-06-28 10:25:49 -04:00
end
it 'renders escaped tooltip name' do
2018-10-23 06:01:54 -04:00
page . find ( '.active.build-job a' ) . hover
expect ( page ) . to have_content ( '<img src=x onerror=alert(document.domain)> - passed' )
2018-06-28 10:25:49 -04:00
end
end
2017-06-12 05:20:19 -04:00
context 'when job is not running' , :js do
2018-03-26 14:23:11 -04:00
let ( :job ) { create ( :ci_build , :success , :trace_artifact , pipeline : pipeline ) }
2017-06-12 05:20:19 -04:00
before do
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job )
2017-06-12 05:20:19 -04:00
end
it 'shows retry button' do
expect ( page ) . to have_link ( 'Retry' )
end
2017-06-14 04:23:34 -04:00
context 'if job passed' do
2017-06-12 05:20:19 -04:00
it 'does not show New issue button' do
expect ( page ) . not_to have_link ( 'New issue' )
end
end
2017-06-14 04:23:34 -04:00
context 'if job failed' do
2018-03-26 14:23:11 -04:00
let ( :job ) { create ( :ci_build , :failed , :trace_artifact , pipeline : pipeline ) }
2017-06-12 05:20:19 -04:00
before do
2017-06-29 13:06:35 -04:00
visit project_job_path ( project , job )
2017-06-12 05:20:19 -04:00
end
it 'shows New issue button' do
expect ( page ) . to have_link ( 'New issue' )
end
it 'links to issues/new with the title and description filled in' do
2017-08-28 05:55:10 -04:00
button_title = " Job Failed # #{ job . id } "
2018-07-03 04:33:51 -04:00
job_url = project_job_url ( project , job , host : page . server . host , port : page . server . port )
2017-09-12 05:28:43 -04:00
options = { issue : { title : button_title , description : " Job [ # #{ job . id } ]( #{ job_url } ) failed for #{ job . sha } : \n " } }
2017-06-12 05:20:19 -04:00
2017-06-29 13:06:35 -04:00
href = new_project_issue_path ( project , options )
2017-06-12 05:20:19 -04:00
2019-01-10 10:36:27 -05:00
page . within ( '.build-sidebar' ) do
2017-06-12 05:20:19 -04:00
expect ( find ( '.js-new-issue' ) [ 'href' ] ) . to include ( href )
end
end
end
end
2018-10-31 04:44:22 -04:00
context 'when job is running' , :js do
let ( :job ) { create ( :ci_build , :running , pipeline : pipeline ) }
let ( :job_url ) { project_job_path ( project , job ) }
before do
visit job_url
wait_for_requests
end
context 'job is cancelable' do
it 'shows cancel button' do
click_link 'Cancel'
expect ( page . current_path ) . to eq ( job_url )
end
end
end
2020-01-07 10:07:34 -05:00
context 'when job is waiting for resource' , :js do
let ( :job ) { create ( :ci_build , :waiting_for_resource , pipeline : pipeline , resource_group : resource_group ) }
let ( :resource_group ) { create ( :ci_resource_group , project : project ) }
before do
visit project_job_path ( project , job )
wait_for_requests
end
it 'shows correct UI components' do
expect ( page ) . to have_content ( " This job is waiting for resource: #{ resource_group . key } " )
expect ( page ) . to have_link ( " Cancel this job " )
end
end
2017-05-18 07:32:22 -04:00
context " Job from other project " do
before do
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job2 )
2017-05-18 07:32:22 -04:00
end
it { expect ( page . status_code ) . to eq ( 404 ) }
end
2018-09-25 04:07:47 -04:00
context " Download artifacts " , :js do
2017-05-18 07:32:22 -04:00
before do
2019-03-22 08:38:45 -04:00
create ( :ci_job_artifact , :archive , file : artifacts_file , job : job )
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job )
2017-05-18 07:32:22 -04:00
end
it 'has button to download artifacts' do
expect ( page ) . to have_content 'Download'
end
2018-09-25 04:07:47 -04:00
it 'downloads the zip file when user clicks the download button' do
2019-01-24 08:43:02 -05:00
requests = inspect_requests do
2018-09-25 04:07:47 -04:00
click_link 'Download'
end
artifact_request = requests . find { | req | req . url . match ( %r{ artifacts/download } ) }
2020-01-29 13:08:47 -05:00
expect ( artifact_request . response_headers [ 'Content-Disposition' ] ) . to eq ( %Q{ attachment; filename=" #{ job . artifacts_file . filename } "; filename*=UTF-8'' #{ job . artifacts_file . filename } } )
2018-09-25 04:07:47 -04:00
expect ( artifact_request . response_headers [ 'Content-Transfer-Encoding' ] ) . to eq ( " binary " )
expect ( artifact_request . response_headers [ 'Content-Type' ] ) . to eq ( " image/gif " )
expect ( artifact_request . body ) . to eq ( job . artifacts_file . file . read . b )
end
2017-05-18 07:32:22 -04:00
end
2018-09-25 04:07:47 -04:00
context 'Artifacts expire date' , :js do
2017-05-18 07:32:22 -04:00
before do
2019-03-22 08:38:45 -04:00
create ( :ci_job_artifact , :archive , file : artifacts_file , expire_at : expire_at , job : job )
job . update! ( artifacts_expire_at : expire_at )
2017-05-18 07:32:22 -04:00
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job )
2017-05-18 07:32:22 -04:00
end
context 'no expire date defined' do
let ( :expire_at ) { nil }
it 'does not have the Keep button' do
expect ( page ) . not_to have_content 'Keep'
end
end
context 'when expire date is defined' do
let ( :expire_at ) { Time . now + 7 . days }
context 'when user has ability to update job' do
it 'keeps artifacts when keep button is clicked' do
2018-09-25 04:07:47 -04:00
expect ( page ) . to have_content 'The artifacts will be removed in'
2017-05-18 07:32:22 -04:00
click_link 'Keep'
expect ( page ) . to have_no_link 'Keep'
2018-09-25 04:07:47 -04:00
expect ( page ) . to have_no_content 'The artifacts will be removed in'
2017-05-18 07:32:22 -04:00
end
end
context 'when user does not have ability to update job' do
let ( :user_access_level ) { :guest }
it 'does not have keep button' do
expect ( page ) . to have_no_link 'Keep'
end
end
end
context 'when artifacts expired' do
let ( :expire_at ) { Time . now - 7 . days }
it 'does not have the Keep button' do
expect ( page ) . to have_content 'The artifacts were removed'
expect ( page ) . not_to have_link 'Keep'
end
end
end
context " when visiting old URL " do
let ( :job_url ) do
2017-07-06 12:20:50 -04:00
project_job_path ( project , job )
2017-05-18 07:32:22 -04:00
end
before do
2017-05-26 09:55:29 -04:00
visit job_url . sub ( '/-/jobs' , '/builds' )
2017-05-18 07:32:22 -04:00
end
it " redirects to new URL " do
expect ( page . current_path ) . to eq ( job_url )
end
end
2018-10-17 06:34:19 -04:00
describe 'Raw trace' , :js do
2017-05-18 07:32:22 -04:00
before do
2017-06-06 10:21:39 -04:00
job . run!
2017-05-18 07:32:22 -04:00
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job )
2017-05-18 07:32:22 -04:00
end
it do
2018-10-17 06:34:19 -04:00
wait_for_all_requests
expect ( page ) . to have_css ( '.js-raw-link-controller' )
2017-05-18 07:32:22 -04:00
end
end
2018-07-05 02:32:05 -04:00
describe 'HTML trace' , :js do
2018-02-02 07:57:00 -05:00
before do
job . run!
2017-05-18 07:32:22 -04:00
2018-02-02 07:57:00 -05:00
visit project_job_path ( project , job )
end
2017-05-18 07:32:22 -04:00
2018-02-02 07:57:00 -05:00
context 'when job has an initial trace' do
2017-05-18 07:32:22 -04:00
it 'loads job trace' do
expect ( page ) . to have_content 'BUILD TRACE'
2019-10-16 05:07:51 -04:00
job . trace . write ( + 'a+b' ) do | stream |
stream . append ( + ' and more trace' , 11 )
2017-05-18 07:32:22 -04:00
end
expect ( page ) . to have_content 'BUILD TRACE and more trace'
end
end
end
2018-12-07 11:30:52 -05:00
describe 'Variables' do
2018-12-06 17:45:55 -05:00
let ( :trigger_request ) { create ( :ci_trigger_request ) }
let ( :job ) { create ( :ci_build , pipeline : pipeline , trigger_request : trigger_request ) }
2018-12-05 22:33:38 -05:00
2018-12-07 11:30:52 -05:00
context 'when user is a maintainer' do
shared_examples 'no reveal button variables behavior' do
it 'renders a hidden value with no reveal values button' , :js do
2018-12-19 14:16:10 -05:00
expect ( page ) . to have_content ( 'Trigger token' )
expect ( page ) . to have_content ( 'Trigger variables' )
2018-12-05 22:33:38 -05:00
2018-12-07 11:30:52 -05:00
expect ( page ) . not_to have_css ( '.js-reveal-variables' )
2018-12-05 22:33:38 -05:00
2018-12-07 11:30:52 -05:00
expect ( page ) . to have_selector ( '.js-build-variable' , text : 'TRIGGER_KEY_1' )
expect ( page ) . to have_selector ( '.js-build-value' , text : '••••••' )
end
2018-12-06 17:45:55 -05:00
end
2018-12-07 11:30:52 -05:00
context 'when variables are stored in trigger_request' do
before do
trigger_request . update_attribute ( :variables , { 'TRIGGER_KEY_1' = > 'TRIGGER_VALUE_1' } )
2018-12-06 17:45:55 -05:00
2018-12-07 11:30:52 -05:00
visit project_job_path ( project , job )
end
2018-12-06 17:45:55 -05:00
2018-12-07 11:30:52 -05:00
it_behaves_like 'no reveal button variables behavior'
2018-12-05 22:33:38 -05:00
end
2018-12-06 17:45:55 -05:00
2018-12-07 11:30:52 -05:00
context 'when variables are stored in pipeline_variables' do
before do
create ( :ci_pipeline_variable , pipeline : pipeline , key : 'TRIGGER_KEY_1' , value : 'TRIGGER_VALUE_1' )
2018-12-06 17:45:55 -05:00
2018-12-07 11:30:52 -05:00
visit project_job_path ( project , job )
end
2018-12-06 17:45:55 -05:00
2018-12-07 11:30:52 -05:00
it_behaves_like 'no reveal button variables behavior'
2018-12-06 17:45:55 -05:00
end
2017-05-18 07:32:22 -04:00
end
2018-12-07 11:30:52 -05:00
context 'when user is a maintainer' do
2017-09-01 13:37:11 -04:00
before do
2018-12-06 17:45:55 -05:00
project . add_maintainer ( user )
2018-12-07 11:30:52 -05:00
end
2018-12-06 17:45:55 -05:00
2018-12-07 11:30:52 -05:00
shared_examples 'reveal button variables behavior' do
it 'renders a hidden value with a reveal values button' , :js do
2018-12-19 14:16:10 -05:00
expect ( page ) . to have_content ( 'Trigger token' )
expect ( page ) . to have_content ( 'Trigger variables' )
2017-05-18 07:32:22 -04:00
2018-12-07 11:30:52 -05:00
expect ( page ) . to have_css ( '.js-reveal-variables' )
2017-09-01 13:37:11 -04:00
2018-12-07 11:30:52 -05:00
expect ( page ) . to have_selector ( '.js-build-variable' , text : 'TRIGGER_KEY_1' )
expect ( page ) . to have_selector ( '.js-build-value' , text : '••••••' )
end
2017-09-01 13:37:11 -04:00
2018-12-07 11:30:52 -05:00
it 'reveals values on button click' , :js do
click_button 'Reveal values'
expect ( page ) . to have_selector ( '.js-build-variable' , text : 'TRIGGER_KEY_1' )
expect ( page ) . to have_selector ( '.js-build-value' , text : 'TRIGGER_VALUE_1' )
end
end
2018-12-06 17:45:55 -05:00
2018-12-07 11:30:52 -05:00
context 'when variables are stored in trigger_request' do
before do
trigger_request . update_attribute ( :variables , { 'TRIGGER_KEY_1' = > 'TRIGGER_VALUE_1' } )
2017-09-01 13:37:11 -04:00
2018-12-07 11:30:52 -05:00
visit project_job_path ( project , job )
end
it_behaves_like 'reveal button variables behavior'
2017-09-01 13:37:11 -04:00
end
2017-05-18 07:32:22 -04:00
2018-12-07 11:30:52 -05:00
context 'when variables are stored in pipeline_variables' do
before do
create ( :ci_pipeline_variable , pipeline : pipeline , key : 'TRIGGER_KEY_1' , value : 'TRIGGER_VALUE_1' )
visit project_job_path ( project , job )
end
it_behaves_like 'reveal button variables behavior'
end
2017-05-18 07:32:22 -04:00
end
end
2018-10-03 11:29:07 -04:00
context 'when job starts environment' , :js do
let ( :environment ) { create ( :environment , name : 'production' , project : project ) }
2017-05-18 07:32:22 -04:00
2018-10-22 02:56:32 -04:00
before do
visit project_job_path ( project , build )
wait_for_requests
end
2018-10-03 11:29:07 -04:00
context 'job is successful and has deployment' do
2018-11-04 19:37:40 -05:00
let ( :build ) { create ( :ci_build , :success , :trace_live , environment : environment . name , pipeline : pipeline , deployment : deployment ) }
let ( :deployment ) { create ( :deployment , :success , environment : environment , project : environment . project ) }
2017-05-18 07:32:22 -04:00
2018-10-03 11:29:07 -04:00
it 'shows a link for the job' do
2017-05-18 07:32:22 -04:00
expect ( page ) . to have_link environment . name
end
2018-10-03 11:29:07 -04:00
it 'shows deployment message' do
2019-10-15 17:06:25 -04:00
expect ( page ) . to have_content 'This job is deployed to production'
2018-10-03 11:29:07 -04:00
expect ( find ( '.js-environment-link' ) [ 'href' ] ) . to match ( " environments/ #{ environment . id } " )
end
2019-09-13 09:26:31 -04:00
context 'when there is a cluster used for the deployment' do
let ( :cluster ) { create ( :cluster , name : 'the-cluster' ) }
let ( :deployment ) { create ( :deployment , :success , cluster : cluster , environment : environment , project : environment . project ) }
let ( :user_access_level ) { :maintainer }
it 'shows a link to the cluster' do
expect ( page ) . to have_link 'the-cluster'
end
it 'shows the name of the cluster' do
2019-10-15 17:06:25 -04:00
expect ( page ) . to have_content 'using cluster the-cluster'
2019-09-13 09:26:31 -04:00
end
context 'when the user is not able to view the cluster' do
let ( :user_access_level ) { :developer }
it 'includes only the name of the cluster without a link' do
2019-10-15 17:06:25 -04:00
expect ( page ) . to have_content 'using cluster the-cluster'
2019-09-13 09:26:31 -04:00
expect ( page ) . not_to have_link 'the-cluster'
end
end
end
2017-05-18 07:32:22 -04:00
end
2017-05-31 10:04:38 -04:00
context 'job is complete and not successful' do
2018-10-03 11:29:07 -04:00
let ( :build ) { create ( :ci_build , :failed , :trace_artifact , environment : environment . name , pipeline : pipeline ) }
2017-05-18 07:32:22 -04:00
it 'shows a link for the job' do
expect ( page ) . to have_link environment . name
2018-10-03 11:29:07 -04:00
expect ( find ( '.js-environment-link' ) [ 'href' ] ) . to match ( " environments/ #{ environment . id } " )
2017-05-18 07:32:22 -04:00
end
end
2018-10-03 11:29:07 -04:00
context 'deployment still not finished' do
2018-11-04 19:37:40 -05:00
let ( :build ) { create ( :ci_build , :running , environment : environment . name , pipeline : pipeline ) }
2017-05-18 07:32:22 -04:00
it 'shows a link to latest deployment' do
2018-10-03 11:29:07 -04:00
expect ( page ) . to have_link environment . name
expect ( page ) . to have_content 'This job is creating a deployment'
expect ( find ( '.js-environment-link' ) [ 'href' ] ) . to match ( " environments/ #{ environment . id } " )
end
end
end
2018-10-15 02:26:01 -04:00
context 'when job stops environment' , :js do
let ( :environment ) { create ( :environment , name : 'production' , project : project ) }
let ( :build ) do
create (
:ci_build ,
:success ,
:trace_live ,
environment : environment . name ,
pipeline : pipeline ,
options : { environment : { action : 'stop' } }
)
end
before do
visit project_job_path ( project , build )
wait_for_requests
end
it 'does not show environment information banner' do
expect ( page ) . not_to have_selector ( '.js-environment-container' )
expect ( page ) . not_to have_selector ( '.environment-information' )
expect ( page ) . not_to have_text ( environment . name )
end
end
2018-10-03 11:29:07 -04:00
describe 'environment info in job view' , :js do
before do
2018-11-04 19:37:40 -05:00
allow_any_instance_of ( Ci :: Build ) . to receive ( :create_deployment )
2018-10-03 11:29:07 -04:00
visit project_job_path ( project , job )
wait_for_requests
end
context 'job with outdated deployment' do
let ( :job ) { create ( :ci_build , :success , :trace_artifact , environment : 'staging' , pipeline : pipeline ) }
let ( :second_build ) { create ( :ci_build , :success , :trace_artifact , environment : 'staging' , pipeline : pipeline ) }
let ( :environment ) { create ( :environment , name : 'staging' , project : project ) }
2018-11-04 19:37:40 -05:00
let! ( :first_deployment ) { create ( :deployment , :success , environment : environment , deployable : job ) }
let! ( :second_deployment ) { create ( :deployment , :success , environment : environment , deployable : second_build ) }
2018-10-03 11:29:07 -04:00
it 'shows deployment message' do
2019-10-15 17:06:25 -04:00
expected_text = 'This job is an out-of-date deployment to staging. View the most recent deployment.'
2018-10-03 11:29:07 -04:00
expect ( page ) . to have_css ( '.environment-information' , text : expected_text )
end
it 'renders a link to the most recent deployment' do
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 )
end
2019-08-26 23:51:28 -04:00
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
2018-10-03 11:29:07 -04:00
end
context 'job failed to deploy' do
let ( :job ) { create ( :ci_build , :failed , :trace_artifact , environment : 'staging' , pipeline : pipeline ) }
let! ( :environment ) { create ( :environment , name : 'staging' , project : project ) }
it 'shows deployment message' do
expected_text = 'The deployment of this job to staging did not succeed.'
2018-10-22 02:56:32 -04:00
expect ( page ) . to have_css ( '.environment-information' , text : expected_text )
2018-10-03 11:29:07 -04:00
end
end
context 'job will deploy' do
let ( :job ) { create ( :ci_build , :running , :trace_live , environment : 'staging' , pipeline : pipeline ) }
context 'when environment exists' do
let! ( :environment ) { create ( :environment , name : 'staging' , project : project ) }
it 'shows deployment message' do
expected_text = 'This job is creating a deployment to staging'
2018-10-22 02:56:32 -04:00
expect ( page ) . to have_css ( '.environment-information' , text : expected_text )
2018-10-03 11:29:07 -04:00
expect ( find ( '.js-environment-link' ) [ 'href' ] ) . to match ( " environments/ #{ environment . id } " )
end
context 'when it has deployment' do
2018-11-04 19:37:40 -05:00
let! ( :deployment ) { create ( :deployment , :success , environment : environment ) }
2018-10-03 11:29:07 -04:00
it 'shows that deployment will be overwritten' do
expected_text = 'This job is creating a deployment to staging'
2018-10-22 02:56:32 -04:00
expect ( page ) . to have_css ( '.environment-information' , text : expected_text )
expect ( page ) . to have_css ( '.environment-information' , text : 'latest deployment' )
2018-10-03 11:29:07 -04:00
expect ( find ( '.js-environment-link' ) [ 'href' ] ) . to match ( " environments/ #{ environment . id } " )
end
end
end
context 'when environment does not exist' do
let! ( :environment ) { create ( :environment , name : 'staging' , project : project ) }
it 'shows deployment message' do
expected_text = 'This job is creating a deployment to staging'
expect ( page ) . to have_css (
'.environment-information' , text : expected_text )
expect ( page ) . not_to have_css (
'.environment-information' , text : 'latest deployment' )
expect ( find ( '.js-environment-link' ) [ 'href' ] ) . to match ( " environments/ #{ environment . id } " )
end
end
end
context 'job that failed to deploy and environment has not been created' do
let ( :job ) { create ( :ci_build , :failed , :trace_artifact , environment : 'staging' , pipeline : pipeline ) }
let! ( :environment ) { create ( :environment , name : 'staging' , project : project ) }
it 'shows deployment message' do
expected_text = 'The deployment of this job to staging did not succeed'
expect ( page ) . to have_css (
'.environment-information' , text : expected_text )
end
end
context 'job that will deploy and environment has not been created' do
let ( :job ) { create ( :ci_build , :running , :trace_live , environment : 'staging' , pipeline : pipeline ) }
let! ( :environment ) { create ( :environment , name : 'staging' , project : project ) }
it 'shows deployment message' do
expected_text = 'This job is creating a deployment to staging'
2017-05-18 07:32:22 -04:00
2018-10-03 11:29:07 -04:00
expect ( page ) . to have_css (
'.environment-information' , text : expected_text )
expect ( page ) . not_to have_css (
'.environment-information' , text : 'latest deployment' )
2017-05-18 07:32:22 -04:00
end
end
end
2017-12-19 06:04:04 -05:00
context 'Playable manual action' do
2017-12-21 10:49:15 -05:00
let ( :job ) { create ( :ci_build , :playable , pipeline : pipeline ) }
2017-12-19 06:04:04 -05:00
before do
project . add_developer ( user )
visit project_job_path ( project , job )
end
2018-10-04 08:59:57 -04:00
it 'shows manual action empty state' , :js do
2018-03-26 14:47:06 -04:00
expect ( page ) . to have_content ( job . detailed_status ( user ) . illustration [ :title ] )
2017-12-19 06:04:04 -05:00
expect ( page ) . to have_content ( 'This job requires a manual action' )
2019-07-29 03:43:10 -04:00
expect ( page ) . to have_content ( 'This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes.' )
expect ( page ) . to have_button ( 'Trigger this manual action' )
2017-12-19 06:04:04 -05:00
end
2018-01-12 06:45:33 -05:00
2018-01-19 11:15:30 -05:00
it 'plays manual action and shows pending status' , :js do
2019-07-29 03:43:10 -04:00
click_button 'Trigger this manual action'
2018-01-12 09:31:48 -05:00
wait_for_requests
2018-01-22 05:10:57 -05:00
expect ( page ) . to have_content ( 'This job has not started yet' )
2018-01-22 11:10:34 -05:00
expect ( page ) . to have_content ( 'This job is in pending state and is waiting to be picked by a runner' )
2018-01-12 09:31:48 -05:00
expect ( page ) . to have_content ( 'pending' )
2018-01-12 06:45:33 -05:00
end
2017-12-19 06:04:04 -05:00
end
2018-10-03 03:11:08 -04:00
context 'Delayed job' do
let ( :job ) { create ( :ci_build , :scheduled , pipeline : pipeline ) }
before do
project . add_developer ( user )
visit project_job_path ( project , job )
end
2018-10-04 22:54:09 -04:00
it 'shows delayed job' , :js do
2018-10-26 04:29:45 -04:00
expect ( page ) . to have_content ( 'This is a delayed job to run in' )
2018-11-22 03:38:05 -05:00
expect ( page ) . to have_content ( " This job will automatically run after its timer finishes. " )
2018-10-03 03:11:08 -04:00
expect ( page ) . to have_link ( 'Unschedule job' )
end
2018-10-04 07:52:14 -04:00
it 'unschedules delayed job and shows manual action' , :js do
2018-10-03 03:11:08 -04:00
click_link 'Unschedule job'
wait_for_requests
expect ( page ) . to have_content ( 'This job requires a manual action' )
2019-07-29 03:43:10 -04:00
expect ( page ) . to have_content ( 'This job requires manual intervention to start. Before starting this job, you can add variables below for last-minute configuration changes.' )
expect ( page ) . to have_button ( 'Trigger this manual action' )
2018-10-03 03:11:08 -04:00
end
end
2017-12-19 06:04:04 -05:00
context 'Non triggered job' do
let ( :job ) { create ( :ci_build , :created , pipeline : pipeline ) }
before do
visit project_job_path ( project , job )
end
2018-10-04 08:59:57 -04:00
it 'shows empty state' , :js do
2018-03-26 14:47:06 -04:00
expect ( page ) . to have_content ( job . detailed_status ( user ) . illustration [ :title ] )
2017-12-19 06:04:04 -05:00
expect ( page ) . to have_content ( 'This job has not been triggered yet' )
2018-01-22 05:10:57 -05:00
expect ( page ) . to have_content ( 'This job depends on upstream jobs that need to succeed in order for this job to be triggered' )
2018-01-19 09:39:40 -05:00
end
end
2018-10-04 08:59:57 -04:00
context 'Pending job' , :js do
2018-01-19 09:39:40 -05:00
let ( :job ) { create ( :ci_build , :pending , pipeline : pipeline ) }
before do
visit project_job_path ( project , job )
end
2018-01-22 05:10:57 -05:00
it 'shows pending empty state' do
2018-03-26 14:47:06 -04:00
expect ( page ) . to have_content ( job . detailed_status ( user ) . illustration [ :title ] )
2018-01-22 11:08:39 -05:00
expect ( page ) . to have_content ( 'This job has not started yet' )
2018-01-22 11:10:34 -05:00
expect ( page ) . to have_content ( 'This job is in pending state and is waiting to be picked by a runner' )
2017-12-19 06:04:04 -05:00
end
end
2018-03-08 12:33:06 -05:00
2018-10-17 06:34:19 -04:00
context 'Canceled job' , :js do
2018-03-08 12:33:06 -05:00
context 'with log' do
let ( :job ) { create ( :ci_build , :canceled , :trace_artifact , pipeline : pipeline ) }
before do
visit project_job_path ( project , job )
end
it 'renders job log' do
2018-10-17 06:34:19 -04:00
wait_for_all_requests
2019-12-13 04:08:01 -05:00
expect ( page ) . to have_selector ( '.job-log' )
2018-03-08 12:33:06 -05:00
end
end
2018-10-04 08:59:57 -04:00
context 'without log' , :js do
2018-03-08 12:33:06 -05:00
let ( :job ) { create ( :ci_build , :canceled , pipeline : pipeline ) }
before do
visit project_job_path ( project , job )
end
it 'renders empty state' do
2018-03-26 14:47:06 -04:00
expect ( page ) . to have_content ( job . detailed_status ( user ) . illustration [ :title ] )
2018-10-17 06:34:19 -04:00
expect ( page ) . not_to have_selector ( '.js-build-trace' )
2018-03-08 12:33:06 -05:00
expect ( page ) . to have_content ( 'This job has been canceled' )
end
end
end
2018-03-26 14:47:06 -04:00
2018-10-04 08:59:57 -04:00
context 'Skipped job' , :js do
2018-03-26 14:47:06 -04:00
let ( :job ) { create ( :ci_build , :skipped , pipeline : pipeline ) }
before do
visit project_job_path ( project , job )
end
it 'renders empty state' do
expect ( page ) . to have_content ( job . detailed_status ( user ) . illustration [ :title ] )
2018-10-17 06:34:19 -04:00
expect ( page ) . not_to have_selector ( '.js-build-trace' )
2018-03-26 14:47:06 -04:00
expect ( page ) . to have_content ( 'This job has been skipped' )
end
end
2018-04-10 08:37:08 -04:00
2018-10-04 08:59:57 -04:00
context 'when job is failed but has no trace' , :js do
2018-04-11 05:37:56 -04:00
let ( :job ) { create ( :ci_build , :failed , pipeline : pipeline ) }
2018-04-10 08:37:08 -04:00
it 'renders empty state' do
visit project_job_path ( project , job )
expect ( job ) . not_to have_trace
expect ( page ) . to have_content ( 'This job does not have a trace.' )
end
end
2018-10-11 14:33:02 -04:00
context 'with erased job' , :js do
let ( :job ) { create ( :ci_build , :erased , pipeline : pipeline ) }
2018-10-12 04:36:42 -04:00
it 'renders erased job warning' do
2018-10-11 14:33:02 -04:00
visit project_job_path ( project , job )
wait_for_requests
page . within ( '.js-job-erased-block' ) do
expect ( page ) . to have_content ( 'Job has been erased' )
end
end
end
2018-10-12 04:36:42 -04:00
context 'without erased job' , :js do
let ( :job ) { create ( :ci_build , pipeline : pipeline ) }
it 'does not render erased job warning' do
visit project_job_path ( project , job )
wait_for_requests
expect ( page ) . not_to have_css ( '.js-job-erased-block' )
end
end
context 'on mobile' , :js do
let ( :job ) { create ( :ci_build , pipeline : pipeline ) }
2018-11-15 05:13:50 -05:00
it 'renders collapsed sidebar' do
2018-10-12 04:36:42 -04:00
page . current_window . resize_to ( 600 , 800 )
visit project_job_path ( project , job )
wait_for_requests
2018-10-17 06:34:19 -04:00
expect ( page ) . to have_css ( '.js-job-sidebar.right-sidebar-collapsed' , visible : false )
expect ( page ) . not_to have_css ( '.js-job-sidebar.right-sidebar-expanded' , visible : false )
2018-10-12 04:36:42 -04:00
end
end
context 'on desktop' , :js do
let ( :job ) { create ( :ci_build , pipeline : pipeline ) }
it 'renders expanded sidebar' do
visit project_job_path ( project , job )
wait_for_requests
2018-10-17 06:34:19 -04:00
expect ( page ) . to have_css ( '.js-job-sidebar.right-sidebar-expanded' )
2018-11-15 05:13:50 -05:00
expect ( page ) . not_to have_css ( '.js-job-sidebar.right-sidebar-collapsed' )
2018-10-12 04:36:42 -04:00
end
end
2018-10-25 07:53:00 -04:00
context 'stuck' , :js do
before do
visit project_job_path ( project , job )
wait_for_requests
end
context 'without active runners available' do
let ( :runner ) { create ( :ci_runner , :instance , active : false ) }
let ( :job ) { create ( :ci_build , :pending , pipeline : pipeline , runner : runner ) }
it 'renders message about job being stuck because no runners are active' do
expect ( page ) . to have_css ( '.js-stuck-no-active-runner' )
2018-11-28 05:18:54 -05:00
expect ( page ) . to have_content ( " This job is stuck because you don't have any active runners that can run this job. " )
2018-10-25 07:53:00 -04:00
end
end
context 'when available runners can not run specified tag' do
let ( :runner ) { create ( :ci_runner , :instance , active : false ) }
let ( :job ) { create ( :ci_build , :pending , pipeline : pipeline , runner : runner , tag_list : %w( docker linux ) ) }
it 'renders message about job being stuck because of no runners with the specified tags' do
expect ( page ) . to have_css ( '.js-stuck-with-tags' )
2020-06-02 11:08:24 -04:00
expect ( page ) . to have_content ( " This job is stuck because you don't have any active runners online or available with any of these tags assigned to them: " )
2018-10-25 07:53:00 -04:00
end
end
context 'when runners are offline and build has tags' do
let ( :runner ) { create ( :ci_runner , :instance , active : true ) }
let ( :job ) { create ( :ci_build , :pending , pipeline : pipeline , runner : runner , tag_list : %w( docker linux ) ) }
it 'renders message about job being stuck because of no runners with the specified tags' do
expect ( page ) . to have_css ( '.js-stuck-with-tags' )
2020-06-02 11:08:24 -04:00
expect ( page ) . to have_content ( " This job is stuck because you don't have any active runners online or available with any of these tags assigned to them: " )
2018-10-25 07:53:00 -04:00
end
end
context 'without any runners available' do
let ( :job ) { create ( :ci_build , :pending , pipeline : pipeline ) }
it 'renders message about job being stuck because not runners are available' do
expect ( page ) . to have_css ( '.js-stuck-no-active-runner' )
2018-11-28 05:18:54 -05:00
expect ( page ) . to have_content ( " This job is stuck because you don't have any active runners that can run this job. " )
2018-10-25 07:53:00 -04:00
end
end
context 'without available runners online' do
let ( :runner ) { create ( :ci_runner , :instance , active : true ) }
let ( :job ) { create ( :ci_build , :pending , pipeline : pipeline , runner : runner ) }
it 'renders message about job being stuck because runners are offline' do
expect ( page ) . to have_css ( '.js-stuck-no-runners' )
2018-11-28 05:18:54 -05:00
expect ( page ) . to have_content ( " This job is stuck because the project doesn't have any runners online assigned to it. " )
2018-10-25 07:53:00 -04:00
end
end
end
2017-05-18 07:32:22 -04:00
end
2017-06-12 05:20:19 -04:00
describe " POST /:project/jobs/:id/cancel " , :js do
2017-05-18 07:32:22 -04:00
context " Job from project " do
before do
2017-06-06 10:21:39 -04:00
job . run!
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job )
2019-01-24 08:43:02 -05:00
find ( '.js-cancel-job' ) . click
2017-05-18 07:32:22 -04:00
end
2019-06-05 07:09:51 -04:00
it 'loads the page and shows all needed controls' do
expect ( page ) . to have_content 'Retry'
2017-05-18 07:32:22 -04:00
end
end
end
2018-04-19 03:20:53 -04:00
describe " POST /:project/jobs/:id/retry " , :js do
2017-06-12 05:20:19 -04:00
context " Job from project " , :js do
2017-05-18 07:32:22 -04:00
before do
2017-06-06 10:21:39 -04:00
job . run!
2019-06-05 07:09:51 -04:00
job . cancel!
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job )
2018-04-19 03:20:53 -04:00
wait_for_requests
2017-06-17 02:08:27 -04:00
find ( '.js-retry-button' ) . click
2017-05-18 07:32:22 -04:00
end
2018-04-19 03:20:53 -04:00
it 'shows the right status and buttons' do
2017-05-18 07:32:22 -04:00
page . within ( 'aside.right-sidebar' ) do
expect ( page ) . to have_content 'Cancel'
end
end
end
2017-05-31 11:00:30 -04:00
context " Job that current user is not allowed to retry " do
2017-05-18 07:32:22 -04:00
before do
2017-06-06 10:21:39 -04:00
job . run!
job . cancel!
2017-05-18 07:32:22 -04:00
project . update ( visibility_level : Gitlab :: VisibilityLevel :: PUBLIC )
2017-06-23 14:20:07 -04:00
sign_out ( :user )
2017-06-21 19:44:10 -04:00
sign_in ( create ( :user ) )
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job )
2017-05-18 07:32:22 -04:00
end
it 'does not show the Retry button' do
page . within ( 'aside.right-sidebar' ) do
expect ( page ) . not_to have_content 'Retry'
end
end
end
end
2018-09-25 04:07:47 -04:00
describe " GET /:project/jobs/:id/download " , :js do
2017-05-18 07:32:22 -04:00
before do
2019-03-22 08:38:45 -04:00
create ( :ci_job_artifact , :archive , file : artifacts_file , job : job )
2017-07-06 12:20:50 -04:00
visit project_job_path ( project , job )
2018-09-25 04:07:47 -04:00
2017-05-18 07:32:22 -04:00
click_link 'Download'
end
context " Build from other project " do
before do
2019-03-22 08:38:45 -04:00
create ( :ci_job_artifact , :archive , file : artifacts_file , job : job2 )
2017-05-18 07:32:22 -04:00
end
2018-09-25 04:07:47 -04:00
it do
2019-01-24 08:43:02 -05:00
requests = inspect_requests do
2018-09-25 04:07:47 -04:00
visit download_project_job_artifacts_path ( project , job2 )
end
expect ( requests . first . status_code ) . to eq ( 404 )
end
2017-05-18 07:32:22 -04:00
end
end
2017-05-31 10:04:38 -04:00
describe 'GET /:project/jobs/:id/raw' , :js do
2017-05-18 07:32:22 -04:00
context 'access source' do
2017-05-31 11:00:30 -04:00
context 'job from project' do
2018-02-02 04:47:20 -05:00
context 'when job is running' do
before do
job . run!
end
2017-05-18 07:32:22 -04:00
2018-02-02 04:47:20 -05:00
it 'sends the right headers' do
requests = inspect_requests ( inject_headers : { 'X-Sendfile-Type' = > 'X-Sendfile' } ) do
visit raw_project_job_path ( project , job )
end
expect ( requests . first . status_code ) . to eq ( 200 )
expect ( requests . first . response_headers [ 'Content-Type' ] ) . to eq ( 'text/plain; charset=utf-8' )
expect ( requests . first . response_headers [ 'X-Sendfile' ] ) . to eq ( job . trace . send ( :current_path ) )
2017-10-30 16:06:08 -04:00
end
2018-02-02 04:47:20 -05:00
end
context 'when job is complete' do
let ( :job ) { create ( :ci_build , :success , :trace_artifact , pipeline : pipeline ) }
2017-10-30 16:06:08 -04:00
2018-02-02 04:47:20 -05:00
it 'sends the right headers' do
requests = inspect_requests ( inject_headers : { 'X-Sendfile-Type' = > 'X-Sendfile' } ) do
visit raw_project_job_path ( project , job )
end
expect ( requests . first . status_code ) . to eq ( 200 )
expect ( requests . first . response_headers [ 'Content-Type' ] ) . to eq ( 'text/plain; charset=utf-8' )
expect ( requests . first . response_headers [ 'X-Sendfile' ] ) . to eq ( job . job_artifacts_trace . file . path )
end
2017-05-18 07:32:22 -04:00
end
end
2017-05-31 10:04:38 -04:00
context 'job from other project' do
2017-05-18 07:32:22 -04:00
before do
2017-06-06 10:21:39 -04:00
job2 . run!
2017-05-18 07:32:22 -04:00
end
it 'sends the right headers' do
2017-10-30 16:06:08 -04:00
requests = inspect_requests ( inject_headers : { 'X-Sendfile-Type' = > 'X-Sendfile' } ) do
visit raw_project_job_path ( project , job2 )
end
expect ( requests . first . status_code ) . to eq ( 404 )
2017-05-18 07:32:22 -04:00
end
end
end
context " when visiting old URL " do
let ( :raw_job_url ) do
2017-07-06 12:20:50 -04:00
raw_project_job_path ( project , job )
2017-05-18 07:32:22 -04:00
end
before do
2017-05-26 09:55:29 -04:00
visit raw_job_url . sub ( '/-/jobs' , '/builds' )
2017-05-18 07:32:22 -04:00
end
it " redirects to new URL " do
expect ( page . current_path ) . to eq ( raw_job_url )
end
end
end
2017-05-19 02:59:05 -04:00
describe " GET /:project/jobs/:id/trace.json " do
2017-05-31 11:00:30 -04:00
context " Job from project " do
2017-05-18 07:32:22 -04:00
before do
2017-07-06 12:20:50 -04:00
visit trace_project_job_path ( project , job , format : :json )
2017-05-18 07:32:22 -04:00
end
it { expect ( page . status_code ) . to eq ( 200 ) }
end
2017-05-31 11:00:30 -04:00
context " Job from other project " do
2017-05-18 07:32:22 -04:00
before do
2017-07-06 12:20:50 -04:00
visit trace_project_job_path ( project , job2 , format : :json )
2017-05-18 07:32:22 -04:00
end
it { expect ( page . status_code ) . to eq ( 404 ) }
end
end
2017-05-19 02:59:05 -04:00
describe " GET /:project/jobs/:id/status " do
2017-05-31 11:00:30 -04:00
context " Job from project " do
2017-05-18 07:32:22 -04:00
before do
2017-07-06 12:20:50 -04:00
visit status_project_job_path ( project , job )
2017-05-18 07:32:22 -04:00
end
it { expect ( page . status_code ) . to eq ( 200 ) }
end
2017-05-31 11:00:30 -04:00
context " Job from other project " do
2017-05-18 07:32:22 -04:00
before do
2017-07-06 12:20:50 -04:00
visit status_project_job_path ( project , job2 )
2017-05-18 07:32:22 -04:00
end
it { expect ( page . status_code ) . to eq ( 404 ) }
end
end
end