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
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Projects > Files > Template type dropdown selector', :js do
let(:project) { create(:project, :repository) }
let(:user) { project.first_owner }
before do
sign_in user
end
context 'editing a non-matching file' do
before do
create_and_edit_file('.random-file.js')
end
it 'not displayed' do
check_type_selector_display(false)
end
it 'selects every template type correctly' do
fill_in 'file_path', with: '.gitignore'
try_selecting_all_types
end
it 'updates template type toggle value when template is chosen' do
fill_in 'file_path', with: '.gitignore'
select_template('gitignore', 'Actionscript')
check_type_selector_toggle_text('.gitignore')
end
end
context 'editing a matching file' do
before do
visit project_edit_blob_path(project, File.join(project.default_branch, 'LICENSE'))
end
it 'displayed' do
check_type_selector_display(true)
end
it 'selects every template type correctly' do
try_selecting_all_types
end
context 'user previews changes' do
before do
click_link 'Preview changes'
end
it 'type selector is hidden and shown correctly' do
check_type_selector_display(false)
click_link 'Write'
check_type_selector_display(true)
end
end
end
context 'creating a matching file' do
before do
visit project_new_blob_path(project, 'master', file_name: '.gitignore')
end
it 'is displayed' do
check_type_selector_display(true)
end
it 'toggle is set to the correct value' do
select_template('gitignore', 'Actionscript')
check_type_selector_toggle_text('.gitignore')
end
it 'sets the toggle text when selecting the template type' do
select_template_type('.gitignore')
check_type_selector_toggle_text('.gitignore')
end
it 'selects every template type correctly' do
try_selecting_all_types
end
end
context 'creating a file' do
before do
visit project_new_blob_path(project, project.default_branch)
end
it 'type selector is shown' do
check_type_selector_display(true)
end
it 'toggle is set to the proper value' do
check_type_selector_toggle_text('Select a template type')
end
it 'selects every template type correctly' do
try_selecting_all_types
end
end
end
def check_type_selector_display(is_visible)
count = is_visible ? 1 : 0
expect(page).to have_css('.js-template-type-selector', count: count)
end
def try_selecting_all_types
try_selecting_template_type('LICENSE', 'Apply a template')
try_selecting_template_type('Dockerfile', 'Apply a template')
try_selecting_template_type('.gitlab-ci.yml', 'Apply a template')
try_selecting_template_type('.gitignore', 'Apply a template')
end
def try_selecting_template_type(template_type, selector_label)
select_template_type(template_type)
check_template_selector_display(selector_label)
end
def select_template_type(template_type)
find('.js-template-type-selector').click
find('.dropdown-content li', text: template_type).click
end
def select_template(type, template)
find(".js-#{type}-selector-wrap").click
find('.dropdown-content li', text: template).click
end
def check_template_selector_display(content)
expect(page).to have_content(content)
end
def check_type_selector_toggle_text(template_type)
dropdown_toggle_button = find('.template-type-selector .dropdown-toggle-text')
expect(dropdown_toggle_button).to have_content(template_type)
end
def create_and_edit_file(file_name)
visit project_new_blob_path(project, 'master', file_name: file_name)
click_button "Commit changes"
visit project_edit_blob_path(project, File.join(project.default_branch, file_name))
end
|