1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
require 'spec_helper'
feature 'Pipeline Schedules', :feature do
include PipelineSchedulesHelper
include WaitForAjax
let!(:project) { create(:project) }
let!(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project) }
let!(:pipeline) { create(:ci_pipeline, pipeline_schedule: pipeline_schedule) }
let(:scope) { nil }
let!(:user) { create(:user) }
before do
project.add_master(user)
login_as(user)
visit_page
end
describe 'GET /projects/pipeline_schedules' do
let(:visit_page) { visit_pipelines_schedules }
it 'avoids N + 1 queries' do
control_count = ActiveRecord::QueryRecorder.new { visit_pipelines_schedules }.count
create_list(:ci_pipeline_schedule, 2, project: project)
expect { visit_pipelines_schedules }.not_to exceed_query_limit(control_count)
end
describe 'The view' do
it 'displays the required information description' do
page.within('.pipeline-schedule-table-row') do
expect(page).to have_content('pipeline schedule')
expect(page).to have_link('master')
expect(page).to have_link("##{pipeline.id}")
end
end
it 'creates a new scheduled pipeline' do
click_link 'New schedule'
expect(page).to have_content('Schedule a new pipeline')
end
it 'changes ownership of the pipeline' do
click_link 'Take ownership'
page.within('.pipeline-schedule-table-row') do
expect(page).not_to have_content('No owner')
expect(page).to have_link('John Doe')
end
end
it 'edits the pipeline' do
page.within('.pipeline-schedule-table-row') do
click_link 'Edit'
end
expect(page).to have_content('Edit Pipeline Schedule')
end
it 'deletes the pipeline' do
click_link 'Delete'
expect(page).not_to have_content('pipeline schedule')
end
end
end
describe 'POST /projects/pipeline_schedules/new', js: true do
let(:visit_page) { visit_new_pipeline_schedule }
it 'sets defaults for timezone and target branch' do
expect(page).to have_button('master')
expect(page).to have_button('UTC')
end
it 'it creates a new scheduled pipeline' do
fill_in_schedule_form
save_pipeline_schedule
expect(page).to have_content('my fancy description')
end
it 'it prevents an invalid form from being submitted' do
save_pipeline_schedule
expect(page).to have_content('This field is required')
end
end
describe 'PATCH /projects/pipelines_schedules/:id/edit', js: true do
let(:visit_page) do
edit_pipeline_schedule
end
it 'it displays existing properties' do
description = find_field('schedule_description').value
expect(description).to eq('pipeline schedule')
expect(page).to have_button('master')
expect(page).to have_button('UTC')
end
it 'edits the scheduled pipeline' do
fill_in 'schedule_description', with: 'my brand new description'
save_pipeline_schedule
expect(page).to have_content('my brand new description')
end
end
def visit_new_pipeline_schedule
visit new_namespace_project_pipeline_schedule_path(project.namespace, project, pipeline_schedule)
end
def edit_pipeline_schedule
visit edit_namespace_project_pipeline_schedule_path(project.namespace, project, pipeline_schedule)
end
def visit_pipelines_schedules
visit namespace_project_pipeline_schedules_path(project.namespace, project, scope: scope)
end
def select_timezone
find('.js-timezone-dropdown').click
click_link 'American Samoa'
end
def select_target_branch
find('.js-target-branch-dropdown').click
click_link 'master'
end
def save_pipeline_schedule
click_button 'Save pipeline schedule'
end
def fill_in_schedule_form
fill_in 'schedule_description', with: 'my fancy description'
fill_in 'schedule_cron', with: '* 1 2 3 4'
select_timezone
select_target_branch
end
end
|