Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features/projects')
-rw-r--r--spec/features/projects/blobs/blob_show_spec.rb2
-rw-r--r--spec/features/projects/blobs/edit_spec.rb5
-rw-r--r--spec/features/projects/ci/lint_spec.rb5
-rw-r--r--spec/features/projects/ci/secure_files_spec.rb61
-rw-r--r--spec/features/projects/cluster_agents_spec.rb2
-rw-r--r--spec/features/projects/commits/user_browses_commits_spec.rb2
-rw-r--r--spec/features/projects/compare_spec.rb2
-rw-r--r--spec/features/projects/environments/environment_spec.rb8
-rw-r--r--spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb2
-rw-r--r--spec/features/projects/files/user_browses_files_spec.rb4
-rw-r--r--spec/features/projects/files/user_creates_files_spec.rb19
-rw-r--r--spec/features/projects/files/user_edits_files_spec.rb26
-rw-r--r--spec/features/projects/issuable_templates_spec.rb28
-rw-r--r--spec/features/projects/jobs/user_browses_jobs_spec.rb1
-rw-r--r--spec/features/projects/members/manage_groups_spec.rb2
-rw-r--r--spec/features/projects/members/manage_members_spec.rb200
-rw-r--r--spec/features/projects/merge_request_button_spec.rb20
-rw-r--r--spec/features/projects/new_project_spec.rb32
-rw-r--r--spec/features/projects/pages/user_adds_domain_spec.rb6
-rw-r--r--spec/features/projects/pages/user_configures_pages_pipeline_spec.rb59
-rw-r--r--spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb3
-rw-r--r--spec/features/projects/pages/user_edits_settings_spec.rb13
-rw-r--r--spec/features/projects/pipeline_schedules_spec.rb7
-rw-r--r--spec/features/projects/pipelines/legacy_pipeline_spec.rb31
-rw-r--r--spec/features/projects/pipelines/legacy_pipelines_spec.rb3
-rw-r--r--spec/features/projects/pipelines/pipeline_spec.rb9
-rw-r--r--spec/features/projects/pipelines/pipelines_spec.rb3
-rw-r--r--spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb49
-rw-r--r--spec/features/projects/settings/registry_settings_spec.rb4
-rw-r--r--spec/features/projects/settings/service_desk_setting_spec.rb2
-rw-r--r--spec/features/projects/tags/user_edits_tags_spec.rb74
-rw-r--r--spec/features/projects/tags/user_views_tag_spec.rb8
-rw-r--r--spec/features/projects/tags/user_views_tags_spec.rb30
-rw-r--r--spec/features/projects/tree/create_directory_spec.rb4
-rw-r--r--spec/features/projects/tree/create_file_spec.rb4
-rw-r--r--spec/features/projects/tree/tree_show_spec.rb2
36 files changed, 423 insertions, 309 deletions
diff --git a/spec/features/projects/blobs/blob_show_spec.rb b/spec/features/projects/blobs/blob_show_spec.rb
index f5cafa2b2ec..13a4c1b5912 100644
--- a/spec/features/projects/blobs/blob_show_spec.rb
+++ b/spec/features/projects/blobs/blob_show_spec.rb
@@ -137,7 +137,7 @@ RSpec.describe 'File blob', :js do
context 'when ref switch' do
def switch_ref_to(ref_name)
- first('.qa-branches-select').click # rubocop:disable QA/SelectorUsage
+ first('[data-testid="branches-select"]').click
page.within '.project-refs-form' do
click_link ref_name
diff --git a/spec/features/projects/blobs/edit_spec.rb b/spec/features/projects/blobs/edit_spec.rb
index 54176378de8..f198a1f42e2 100644
--- a/spec/features/projects/blobs/edit_spec.rb
+++ b/spec/features/projects/blobs/edit_spec.rb
@@ -3,6 +3,7 @@
require 'spec_helper'
RSpec.describe 'Editing file blob', :js do
+ include Spec::Support::Helpers::Features::SourceEditorSpecHelpers
include TreeHelper
include BlobSpecHelpers
@@ -42,7 +43,7 @@ RSpec.describe 'Editing file blob', :js do
def fill_editor(content: 'class NextFeature\\nend\\n')
wait_for_requests
- execute_script("monaco.editor.getModels()[0].setValue('#{content}')")
+ editor_set_value(content)
end
context 'from MR diff' do
@@ -98,10 +99,8 @@ RSpec.describe 'Editing file blob', :js do
click_link 'Preview changes'
wait_for_requests
- old_line_count = page.all('.line_holder.old').size
new_line_count = page.all('.line_holder.new').size
- expect(old_line_count).to be > 0
expect(new_line_count).to be > 0
end
end
diff --git a/spec/features/projects/ci/lint_spec.rb b/spec/features/projects/ci/lint_spec.rb
index 7f10c6afcd5..608511ae5a5 100644
--- a/spec/features/projects/ci/lint_spec.rb
+++ b/spec/features/projects/ci/lint_spec.rb
@@ -16,16 +16,13 @@ RSpec.describe 'CI Lint', :js do
visit project_ci_lint_path(project)
editor_set_value(yaml_content)
-
- wait_for('YAML content') do
- find(content_selector).text.present?
- end
end
describe 'YAML parsing' do
shared_examples 'validates the YAML' do
before do
click_on 'Validate'
+ scroll_to(page.find('[data-testid="ci-lint-status"]'))
end
context 'YAML is correct' do
diff --git a/spec/features/projects/ci/secure_files_spec.rb b/spec/features/projects/ci/secure_files_spec.rb
deleted file mode 100644
index 412330eb5d6..00000000000
--- a/spec/features/projects/ci/secure_files_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'Secure Files', :js do
- let(:project) { create(:project) }
- let(:user) { create(:user) }
-
- before do
- stub_feature_flags(ci_secure_files_read_only: false)
- project.add_maintainer(user)
- sign_in(user)
- end
-
- it 'user sees the Secure Files list component' do
- visit project_ci_secure_files_path(project)
- expect(page).to have_content('There are no secure files yet.')
- end
-
- it 'prompts the user to confirm before deleting a file' do
- file = create(:ci_secure_file, project: project)
-
- visit project_ci_secure_files_path(project)
-
- expect(page).to have_content(file.name)
-
- find('button.btn-danger').click
-
- expect(page).to have_content("Delete #{file.name}?")
-
- click_on('Delete secure file')
-
- visit project_ci_secure_files_path(project)
-
- expect(page).not_to have_content(file.name)
- end
-
- it 'displays an uploaded file in the file list' do
- visit project_ci_secure_files_path(project)
- expect(page).to have_content('There are no secure files yet.')
-
- page.attach_file('spec/fixtures/ci_secure_files/upload-keystore.jks') do
- click_button 'Upload File'
- end
-
- expect(page).to have_content('upload-keystore.jks')
- end
-
- it 'displays an error when a duplicate file upload is attempted' do
- create(:ci_secure_file, project: project, name: 'upload-keystore.jks')
- visit project_ci_secure_files_path(project)
-
- expect(page).to have_content('upload-keystore.jks')
-
- page.attach_file('spec/fixtures/ci_secure_files/upload-keystore.jks') do
- click_button 'Upload File'
- end
-
- expect(page).to have_content('A file with this name already exists.')
- end
-end
diff --git a/spec/features/projects/cluster_agents_spec.rb b/spec/features/projects/cluster_agents_spec.rb
index 5d931afe4a7..8c557a9c37a 100644
--- a/spec/features/projects/cluster_agents_spec.rb
+++ b/spec/features/projects/cluster_agents_spec.rb
@@ -3,7 +3,7 @@
require 'spec_helper'
RSpec.describe 'ClusterAgents', :js do
- let_it_be(:token) { create(:cluster_agent_token, description: 'feature test token')}
+ let_it_be(:token) { create(:cluster_agent_token, description: 'feature test token') }
let(:agent) { token.agent }
let(:project) { agent.project }
diff --git a/spec/features/projects/commits/user_browses_commits_spec.rb b/spec/features/projects/commits/user_browses_commits_spec.rb
index 863fdbdadaa..2719316c5dc 100644
--- a/spec/features/projects/commits/user_browses_commits_spec.rb
+++ b/spec/features/projects/commits/user_browses_commits_spec.rb
@@ -150,7 +150,7 @@ RSpec.describe 'User browses commits' do
let(:ref) { project.repository.root_ref }
let(:newrev) { project.repository.commit('master').sha }
let(:short_newrev) { project.repository.commit('master').short_id }
- let(:message) { 'Glob characters'}
+ let(:message) { 'Glob characters' }
before do
create_file_in_repo(project, ref, ref, filename, 'Test file', commit_message: message)
diff --git a/spec/features/projects/compare_spec.rb b/spec/features/projects/compare_spec.rb
index bc3ef2af9b0..22b0f344606 100644
--- a/spec/features/projects/compare_spec.rb
+++ b/spec/features/projects/compare_spec.rb
@@ -113,7 +113,7 @@ RSpec.describe "Compare", :js do
click_button('Compare')
- page.within('.gl-alert') do
+ page.within('[data-testid="too-many-changes-alert"]') do
expect(page).to have_text("Too many changes to show. To preserve performance only 3 of 3+ files are displayed.")
end
end
diff --git a/spec/features/projects/environments/environment_spec.rb b/spec/features/projects/environments/environment_spec.rb
index 951b24eafac..a53e8beb555 100644
--- a/spec/features/projects/environments/environment_spec.rb
+++ b/spec/features/projects/environments/environment_spec.rb
@@ -18,10 +18,10 @@ RSpec.describe 'Environment' do
describe 'environment details page' do
let!(:environment) { create(:environment, project: project) }
- let!(:permissions) { }
- let!(:deployment) { }
- let!(:action) { }
- let!(:cluster) { }
+ let!(:permissions) {}
+ let!(:deployment) {}
+ let!(:action) {}
+ let!(:cluster) {}
context 'with auto-stop' do
let!(:environment) { create(:environment, :will_auto_stop, name: 'staging', project: project) }
diff --git a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb
index 6b1e60db5b1..0ad44f31a52 100644
--- a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb
+++ b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb
@@ -18,7 +18,7 @@ RSpec.describe 'Projects > Files > Project owner sees a link to create a license
expect(page).to have_current_path("/-/ide/project/#{project.full_path}/edit/master/-/LICENSE", ignore_query: true)
- expect(page).to have_selector('.qa-file-templates-bar') # rubocop:disable QA/SelectorUsage
+ expect(page).to have_selector('[data-testid="file-templates-bar"]')
select_template('MIT License')
diff --git a/spec/features/projects/files/user_browses_files_spec.rb b/spec/features/projects/files/user_browses_files_spec.rb
index 53fdd5a15dd..0f3ce5a2bad 100644
--- a/spec/features/projects/files/user_browses_files_spec.rb
+++ b/spec/features/projects/files/user_browses_files_spec.rb
@@ -348,7 +348,7 @@ RSpec.describe "User browses files", :js do
end
it "shows raw file content in a new tab" do
- new_tab = window_opened_by {click_link 'Open raw'}
+ new_tab = window_opened_by { click_link 'Open raw' }
within_window new_tab do
expect(page).to have_content("Test file")
@@ -366,7 +366,7 @@ RSpec.describe "User browses files", :js do
end
it "shows raw file content in a new tab" do
- new_tab = window_opened_by {click_link 'Open raw'}
+ new_tab = window_opened_by { click_link 'Open raw' }
within_window new_tab do
expect(page).to have_content("*.rbc")
diff --git a/spec/features/projects/files/user_creates_files_spec.rb b/spec/features/projects/files/user_creates_files_spec.rb
index 7344c91b6dc..a81f31d663e 100644
--- a/spec/features/projects/files/user_creates_files_spec.rb
+++ b/spec/features/projects/files/user_creates_files_spec.rb
@@ -3,6 +3,7 @@
require 'spec_helper'
RSpec.describe 'Projects > Files > User creates files', :js do
+ include Spec::Support::Helpers::Features::SourceEditorSpecHelpers
include BlobSpecHelpers
let(:fork_message) do
@@ -89,8 +90,7 @@ RSpec.describe 'Projects > Files > User creates files', :js do
end
it 'creates and commit a new file' do
- find('#editor')
- execute_script("monaco.editor.getModels()[0].setValue('*.rbca')")
+ editor_set_value('*.rbca')
fill_in(:file_name, with: 'not_a_file.md')
fill_in(:commit_message, with: 'New commit message', visible: true)
click_button('Commit changes')
@@ -107,8 +107,7 @@ RSpec.describe 'Projects > Files > User creates files', :js do
it 'creates and commit a new file with new lines at the end of file' do
set_default_button('edit')
- find('#editor')
- execute_script('monaco.editor.getModels()[0].setValue("Sample\n\n\n")')
+ editor_set_value('Sample\n\n\n')
fill_in(:file_name, with: 'not_a_file.md')
fill_in(:commit_message, with: 'New commit message', visible: true)
click_button('Commit changes')
@@ -119,8 +118,7 @@ RSpec.describe 'Projects > Files > User creates files', :js do
click_link('Edit')
- find('#editor')
- expect(evaluate_script('monaco.editor.getModels()[0].getValue()')).to eq("Sample\n\n\n")
+ expect(find('.monaco-editor')).to have_content('Sample\n\n\n')
end
it 'creates and commit a new file with a directory name' do
@@ -128,8 +126,7 @@ RSpec.describe 'Projects > Files > User creates files', :js do
expect(page).to have_selector('.file-editor')
- find('#editor')
- execute_script("monaco.editor.getModels()[0].setValue('*.rbca')")
+ editor_set_value('*.rbca')
fill_in(:commit_message, with: 'New commit message', visible: true)
click_button('Commit changes')
@@ -143,8 +140,7 @@ RSpec.describe 'Projects > Files > User creates files', :js do
it 'creates and commit a new file specifying a new branch' do
expect(page).to have_selector('.file-editor')
- find('#editor')
- execute_script("monaco.editor.getModels()[0].setValue('*.rbca')")
+ editor_set_value('*.rbca')
fill_in(:file_name, with: 'not_a_file.md')
fill_in(:commit_message, with: 'New commit message', visible: true)
fill_in(:branch_name, with: 'new_branch_name', visible: true)
@@ -178,8 +174,7 @@ RSpec.describe 'Projects > Files > User creates files', :js do
it 'creates and commit new file in forked project' do
expect(page).to have_selector('.file-editor')
- find('#editor')
- execute_script("monaco.editor.getModels()[0].setValue('*.rbca')")
+ editor_set_value('*.rbca')
fill_in(:file_name, with: 'not_a_file.md')
fill_in(:commit_message, with: 'New commit message', visible: true)
diff --git a/spec/features/projects/files/user_edits_files_spec.rb b/spec/features/projects/files/user_edits_files_spec.rb
index 1ac45970828..d7460538be9 100644
--- a/spec/features/projects/files/user_edits_files_spec.rb
+++ b/spec/features/projects/files/user_edits_files_spec.rb
@@ -3,6 +3,7 @@
require 'spec_helper'
RSpec.describe 'Projects > Files > User edits files', :js do
+ include Spec::Support::Helpers::Features::SourceEditorSpecHelpers
include ProjectForksHelper
include BlobSpecHelpers
@@ -50,10 +51,9 @@ RSpec.describe 'Projects > Files > User edits files', :js do
click_link_or_button('Edit')
find('.file-editor', match: :first)
- find('#editor')
- set_editor_value('*.rbca')
+ editor_set_value('*.rbca')
- expect(editor_value).to eq('*.rbca')
+ expect(find('.monaco-editor')).to have_content('*.rbca')
end
it 'does not show the edit link if a file is binary' do
@@ -72,8 +72,7 @@ RSpec.describe 'Projects > Files > User edits files', :js do
click_link_or_button('Edit')
find('.file-editor', match: :first)
- find('#editor')
- set_editor_value('*.rbca')
+ editor_set_value('*.rbca')
fill_in(:commit_message, with: 'New commit message', visible: true)
click_button('Commit changes')
@@ -91,8 +90,7 @@ RSpec.describe 'Projects > Files > User edits files', :js do
find('.file-editor', match: :first)
- find('#editor')
- set_editor_value('*.rbca')
+ editor_set_value('*.rbca')
fill_in(:commit_message, with: 'New commit message', visible: true)
fill_in(:branch_name, with: 'new_branch_name', visible: true)
click_button('Commit changes')
@@ -110,8 +108,7 @@ RSpec.describe 'Projects > Files > User edits files', :js do
click_link_or_button('Edit')
find('.file-editor', match: :first)
- find('#editor')
- set_editor_value('*.rbca')
+ editor_set_value('*.rbca')
click_link('Preview changes')
expect(page).to have_css('.line_holder.new')
@@ -156,10 +153,9 @@ RSpec.describe 'Projects > Files > User edits files', :js do
find('.file-editor', match: :first)
- find('#editor')
- set_editor_value('*.rbca')
+ editor_set_value('*.rbca')
- expect(editor_value).to eq('*.rbca')
+ expect(find('.monaco-editor')).to have_content('*.rbca')
end
it 'opens the Web IDE in a forked project', :sidekiq_might_not_need_inline do
@@ -187,8 +183,7 @@ RSpec.describe 'Projects > Files > User edits files', :js do
find('.file-editor', match: :first)
- find('#editor')
- set_editor_value('*.rbca')
+ editor_set_value('*.rbca')
fill_in(:commit_message, with: 'New commit message', visible: true)
click_button('Commit changes')
@@ -216,8 +211,7 @@ RSpec.describe 'Projects > Files > User edits files', :js do
expect(page).not_to have_link('Fork')
- find('#editor')
- set_editor_value('*.rbca')
+ editor_set_value('*.rbca')
fill_in(:commit_message, with: 'Another commit', visible: true)
click_button('Commit changes')
diff --git a/spec/features/projects/issuable_templates_spec.rb b/spec/features/projects/issuable_templates_spec.rb
index 12c5820a69d..ac83de3e765 100644
--- a/spec/features/projects/issuable_templates_spec.rb
+++ b/spec/features/projects/issuable_templates_spec.rb
@@ -90,6 +90,34 @@ RSpec.describe 'issuable templates', :js do
end
end
+ context 'user creates an issue with a default template from the repo' do
+ let(:template_content) { 'this is the default template' }
+
+ before do
+ project.repository.create_file(
+ user,
+ '.gitlab/issue_templates/default.md',
+ template_content,
+ message: 'added default issue template',
+ branch_name: 'master'
+ )
+ end
+
+ it 'does not overwrite autosaved description' do
+ visit new_project_issue_path project
+ wait_for_requests
+
+ assert_template # default template is loaded the first time
+
+ fill_in 'issue_description', with: 'my own description', fill_options: { clear: :backspace }
+
+ visit new_project_issue_path project
+ wait_for_requests
+
+ assert_template(expected_content: 'my own description')
+ end
+ end
+
context 'user creates a merge request using templates' do
let(:template_content) { 'this is a test "feature-proposal" template' }
let(:bug_template_content) { 'this is merge request bug template' }
diff --git a/spec/features/projects/jobs/user_browses_jobs_spec.rb b/spec/features/projects/jobs/user_browses_jobs_spec.rb
index bb44b70bb3a..289ab8cffa5 100644
--- a/spec/features/projects/jobs/user_browses_jobs_spec.rb
+++ b/spec/features/projects/jobs/user_browses_jobs_spec.rb
@@ -74,6 +74,7 @@ RSpec.describe 'User browses jobs' do
wait_for_requests
expect(page).to have_selector('.ci-canceled')
+ expect(page).not_to have_selector('[data-testid="jobs-table-error-alert"]')
end
end
diff --git a/spec/features/projects/members/manage_groups_spec.rb b/spec/features/projects/members/manage_groups_spec.rb
index 006fa3b6eff..e86affbbca1 100644
--- a/spec/features/projects/members/manage_groups_spec.rb
+++ b/spec/features/projects/members/manage_groups_spec.rb
@@ -162,7 +162,7 @@ RSpec.describe 'Project > Members > Manage groups', :js do
let_it_be(:user) { maintainer }
let_it_be(:group) { parent_group }
let_it_be(:group_within_hierarchy) { create(:group, parent: group) }
- let_it_be(:project_within_hierarchy) { create(:project, group: group_within_hierarchy)}
+ let_it_be(:project_within_hierarchy) { create(:project, group: group_within_hierarchy) }
let_it_be(:members_page_path) { project_project_members_path(project) }
let_it_be(:members_page_path_within_hierarchy) { project_project_members_path(project_within_hierarchy) }
end
diff --git a/spec/features/projects/members/manage_members_spec.rb b/spec/features/projects/members/manage_members_spec.rb
index 8d229530ef5..56eb02607a5 100644
--- a/spec/features/projects/members/manage_members_spec.rb
+++ b/spec/features/projects/members/manage_members_spec.rb
@@ -12,106 +12,188 @@ RSpec.describe 'Projects > Members > Manage members', :js do
let_it_be(:group) { create(:group) }
let_it_be(:project) { create(:project, :internal, namespace: group) }
+ let(:project_owner) { create(:user, name: "ProjectOwner", username: "project_owner") }
+ let(:project_maintainer) { create(:user, name: "ProjectMaintainer", username: "project_maintainer") }
+ let(:group_owner) { user1 }
+ let(:project_developer) { user2 }
+
before do
- sign_in(user1)
- group.add_owner(user1)
+ project.add_maintainer(project_maintainer)
+ project.add_owner(project_owner)
+ group.add_owner(group_owner)
+
+ sign_in(group_owner)
end
it 'show members from project and group', :aggregate_failures do
- project.add_developer(user2)
+ project.add_developer(project_developer)
visit_members_page
- expect(first_row).to have_content(user1.name)
- expect(second_row).to have_content(user2.name)
+ expect(first_row).to have_content(group_owner.name)
+ expect(second_row).to have_content(project_developer.name)
end
it 'show user once if member of both group and project', :aggregate_failures do
- project.add_developer(user1)
+ group.add_reporter(project_maintainer)
visit_members_page
- expect(first_row).to have_content(user1.name)
- expect(second_row).to be_blank
+ expect(first_row).to have_content(group_owner.name)
+ expect(second_row).to have_content(project_maintainer.name)
+ expect(third_row).to have_content(project_owner.name)
+ expect(all_rows[3]).to be_blank
end
- it 'update user access level' do
- project.add_developer(user2)
+ context 'update user access level' do
+ before do
+ sign_in(current_user)
+ end
+
+ context 'as maintainer' do
+ let(:current_user) { project_maintainer }
- visit_members_page
+ it 'can update a non-Owner member' do
+ project.add_developer(project_developer)
- page.within find_member_row(user2) do
- click_button('Developer')
- click_button('Reporter')
+ visit_members_page
+
+ page.within find_member_row(project_developer) do
+ click_button('Developer')
+
+ page.within '.dropdown-menu' do
+ expect(page).not_to have_button('Owner')
+ end
+
+ click_button('Reporter')
+
+ expect(page).to have_button('Reporter')
+ end
+ end
- expect(page).to have_button('Reporter')
+ it 'cannot update an Owner member' do
+ visit_members_page
+
+ page.within find_member_row(project_owner) do
+ expect(page).not_to have_button('Owner')
+ end
+ end
end
- end
- context 'when owner' do
- it 'uses ProjectMember access_level_roles for the invite members modal access option', :aggregate_failures do
- visit_members_page
+ context 'as owner' do
+ let(:current_user) { group_owner }
- click_on 'Invite members'
+ it 'can update a project Owner member' do
+ visit_members_page
- click_on 'Guest'
- wait_for_requests
+ page.within find_member_row(project_owner) do
+ click_button('Owner')
+ click_button('Reporter')
- page.within '.dropdown-menu' do
- expect(page).to have_button('Guest')
- expect(page).to have_button('Reporter')
- expect(page).to have_button('Developer')
- expect(page).to have_button('Maintainer')
- expect(page).to have_button('Owner')
+ expect(page).to have_button('Reporter')
+ end
end
end
end
- context 'when maintainer' do
- let(:maintainer) { create(:user) }
-
+ context 'uses ProjectMember valid_access_level_roles for the invite members modal options', :aggregate_failures do
before do
- project.add_maintainer(maintainer)
- sign_in(maintainer)
- end
+ sign_in(current_user)
- it 'uses ProjectMember access_level_roles for the invite members modal access option', :aggregate_failures do
visit_members_page
click_on 'Invite members'
click_on 'Guest'
wait_for_requests
+ end
- page.within '.dropdown-menu' do
- expect(page).to have_button('Guest')
- expect(page).to have_button('Reporter')
- expect(page).to have_button('Developer')
- expect(page).to have_button('Maintainer')
- expect(page).not_to have_button('Owner')
+ context 'when owner' do
+ let(:current_user) { project_owner }
+
+ it 'shows Owner in the dropdown' do
+ page.within '.dropdown-menu' do
+ expect(page).to have_button('Guest')
+ expect(page).to have_button('Reporter')
+ expect(page).to have_button('Developer')
+ expect(page).to have_button('Maintainer')
+ expect(page).to have_button('Owner')
+ end
+ end
+ end
+
+ context 'when maintainer' do
+ let(:current_user) { project_maintainer }
+
+ it 'does not show the Owner option' do
+ page.within '.dropdown-menu' do
+ expect(page).to have_button('Guest')
+ expect(page).to have_button('Reporter')
+ expect(page).to have_button('Developer')
+ expect(page).to have_button('Maintainer')
+ expect(page).not_to have_button('Owner')
+ end
end
end
end
- it 'remove user from project' do
- other_user = create(:user)
- project.add_developer(other_user)
+ describe 'remove user from project' do
+ before do
+ project.add_developer(project_developer)
- visit_members_page
+ sign_in(current_user)
- # Open modal
- page.within find_member_row(other_user) do
- click_button 'Remove member'
+ visit_members_page
end
- within_modal do
- expect(page).to have_unchecked_field 'Also unassign this user from related issues and merge requests'
- click_button('Remove member')
+ context 'when maintainer' do
+ let(:current_user) { project_maintainer }
+
+ it 'can only remove non-Owner members' do
+ page.within find_member_row(project_owner) do
+ expect(page).not_to have_button('Remove member')
+ end
+
+ # Open modal
+ page.within find_member_row(project_developer) do
+ click_button 'Remove member'
+ end
+
+ within_modal do
+ expect(page).to have_unchecked_field 'Also unassign this user from related issues and merge requests'
+ click_button('Remove member')
+ end
+
+ wait_for_requests
+
+ expect(members_table).not_to have_content(project_developer.name)
+ expect(members_table).to have_content(project_owner.name)
+ end
end
- wait_for_requests
+ context 'when owner' do
+ let(:current_user) { group_owner }
+
+ it 'can remove any direct member' do
+ page.within find_member_row(project_owner) do
+ expect(page).to have_button('Remove member')
+ end
+
+ # Open modal
+ page.within find_member_row(project_owner) do
+ click_button 'Remove member'
+ end
- expect(members_table).not_to have_content(other_user.name)
+ within_modal do
+ expect(page).to have_unchecked_field 'Also unassign this user from related issues and merge requests'
+ click_button('Remove member')
+ end
+
+ wait_for_requests
+
+ expect(members_table).not_to have_content(project_owner.name)
+ end
+ end
end
it_behaves_like 'inviting members', 'project-members-page' do
@@ -130,7 +212,7 @@ RSpec.describe 'Projects > Members > Manage members', :js do
external_project_bot = create(:user, :project_bot, name: '_external_project_bot_')
external_project = create(:project, group: external_group)
external_project.add_maintainer(external_project_bot)
- external_project.add_maintainer(user1)
+ external_project.add_maintainer(group_owner)
visit_members_page
@@ -143,8 +225,8 @@ RSpec.describe 'Projects > Members > Manage members', :js do
wait_for_requests
- expect(page).to have_content(user1.name)
- expect(page).to have_content(user2.name)
+ expect(page).to have_content(group_owner.name)
+ expect(page).to have_content(project_developer.name)
expect(page).not_to have_content(internal_project_bot.name)
expect(page).not_to have_content(external_project_bot.name)
end
@@ -155,7 +237,7 @@ RSpec.describe 'Projects > Members > Manage members', :js do
let_it_be(:project) { create(:project, :public) }
before do
- sign_out(user1)
+ sign_out(group_owner)
end
it 'does not show the Invite members button when not signed in' do
@@ -192,7 +274,7 @@ RSpec.describe 'Projects > Members > Manage members', :js do
end
it 'shows 2FA badge to user with "Maintainer" access level' do
- project.add_maintainer(user1)
+ sign_in(project_maintainer)
visit_members_page
@@ -209,7 +291,7 @@ RSpec.describe 'Projects > Members > Manage members', :js do
end
it 'does not show 2FA badge to users with access level below "Maintainer"' do
- group.add_developer(user1)
+ group.add_developer(group_owner)
visit_members_page
diff --git a/spec/features/projects/merge_request_button_spec.rb b/spec/features/projects/merge_request_button_spec.rb
index 335ae6794b7..eb52a7821f9 100644
--- a/spec/features/projects/merge_request_button_spec.rb
+++ b/spec/features/projects/merge_request_button_spec.rb
@@ -11,6 +11,8 @@ RSpec.describe 'Merge Request button' do
let(:forked_project) { fork_project(project, user, repository: true) }
shared_examples 'Merge request button only shown when allowed' do
+ let(:extra_mr_params) { {} }
+
context 'not logged in' do
it 'does not show Create merge request button' do
visit url
@@ -31,11 +33,8 @@ RSpec.describe 'Merge Request button' do
href = project_new_merge_request_path(
project,
merge_request: {
- source_project_id: project.id,
- source_branch: 'feature',
- target_project_id: project.id,
- target_branch: 'master'
- }
+ source_branch: 'feature'
+ }.merge(extra_mr_params)
)
visit url
@@ -90,11 +89,8 @@ RSpec.describe 'Merge Request button' do
href = project_new_merge_request_path(
forked_project,
merge_request: {
- source_project_id: forked_project.id,
- source_branch: 'feature',
- target_project_id: forked_project.id,
- target_branch: 'master'
- }
+ source_branch: 'feature'
+ }.merge(extra_mr_params)
)
visit fork_url
@@ -121,6 +117,7 @@ RSpec.describe 'Merge Request button' do
it_behaves_like 'Merge request button only shown when allowed' do
let(:url) { project_compare_path(project, from: 'master', to: 'feature') }
let(:fork_url) { project_compare_path(forked_project, from: 'master', to: 'feature') }
+ let(:extra_mr_params) { { target_project_id: project.id, target_branch: 'master' } }
end
it 'shows the correct merge request button when viewing across forks', :js do
@@ -128,9 +125,8 @@ RSpec.describe 'Merge Request button' do
project.add_developer(user)
href = project_new_merge_request_path(
- project,
+ forked_project,
merge_request: {
- source_project_id: forked_project.id,
source_branch: 'feature',
target_project_id: project.id,
target_branch: 'master'
diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb
index 9d2d1454d77..f45025d079a 100644
--- a/spec/features/projects/new_project_spec.rb
+++ b/spec/features/projects/new_project_spec.rb
@@ -3,16 +3,44 @@
require 'spec_helper'
RSpec.describe 'New project', :js do
- include Select2Helper
include Spec::Support::Helpers::Features::TopNavSpecHelpers
context 'as a user' do
- let(:user) { create(:user) }
+ let_it_be(:user) { create(:user) }
before do
sign_in(user)
end
+ it 'shows the project description field when it should' do
+ description_label = 'Project description (optional)'
+
+ visit new_project_path
+ click_link 'Create blank project'
+
+ page.within('#blank-project-pane') do
+ expect(page).not_to have_content(description_label)
+ end
+
+ visit new_project_path
+ click_link 'Import project'
+
+ page.within('#import-project-pane') do
+ click_button 'Repository by URL'
+
+ expect(page).to have_content(description_label)
+ end
+
+ visit new_project_path
+ click_link 'Create from template'
+
+ page.within('#create-from-template-pane') do
+ find("[data-testid='use_template_#{Gitlab::ProjectTemplate.localized_templates_table.first.name}']").click
+
+ expect(page).to have_content(description_label)
+ end
+ end
+
it 'shows a message if multiple levels are restricted' do
Gitlab::CurrentSettings.update!(
restricted_visibility_levels: [Gitlab::VisibilityLevel::PRIVATE, Gitlab::VisibilityLevel::INTERNAL]
diff --git a/spec/features/projects/pages/user_adds_domain_spec.rb b/spec/features/projects/pages/user_adds_domain_spec.rb
index afa3f29ce0d..5cb4fa163c8 100644
--- a/spec/features/projects/pages/user_adds_domain_spec.rb
+++ b/spec/features/projects/pages/user_adds_domain_spec.rb
@@ -5,7 +5,7 @@ RSpec.describe 'User adds pages domain', :js do
include LetsEncryptHelpers
include Spec::Support::Helpers::ModalHelpers
- let_it_be(:project) { create(:project, pages_https_only: false) }
+ let_it_be(:project) { create(:project, :pages_published, pages_https_only: false) }
let(:user) { create(:user) }
@@ -18,8 +18,6 @@ RSpec.describe 'User adds pages domain', :js do
end
context 'when pages are exposed on external HTTP address', :http_pages_enabled do
- let(:project) { create(:project, pages_https_only: false) }
-
shared_examples 'adds new domain' do
it 'adds new domain' do
visit new_project_pages_domain_path(project)
@@ -42,7 +40,7 @@ RSpec.describe 'User adds pages domain', :js do
context 'when project in group namespace' do
it_behaves_like 'adds new domain' do
let(:group) { create :group }
- let(:project) { create(:project, namespace: group, pages_https_only: false) }
+ let(:project) { create(:project, :pages_published, namespace: group, pages_https_only: false) }
end
end
diff --git a/spec/features/projects/pages/user_configures_pages_pipeline_spec.rb b/spec/features/projects/pages/user_configures_pages_pipeline_spec.rb
new file mode 100644
index 00000000000..029479d6b95
--- /dev/null
+++ b/spec/features/projects/pages/user_configures_pages_pipeline_spec.rb
@@ -0,0 +1,59 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+RSpec.describe 'Pages edits pages settings', :js do
+ include Spec::Support::Helpers::ModalHelpers
+
+ let_it_be(:project) { create(:project, pages_https_only: false) }
+ let_it_be(:user) { create(:user) }
+
+ before do
+ allow(Gitlab.config.pages).to receive(:enabled).and_return(true)
+
+ project.add_maintainer(user)
+
+ sign_in(user)
+ end
+
+ context 'when pipeline wizard feature is enabled' do
+ before do
+ Feature.enable(:use_pipeline_wizard_for_pages)
+ end
+
+ context 'when onboarding is not complete' do
+ it 'renders onboarding instructions' do
+ visit project_pages_path(project)
+
+ expect(page).to have_content('Get started with Pages')
+ end
+ end
+
+ context 'when onboarding is complete' do
+ before do
+ project.mark_pages_onboarding_complete
+ end
+
+ it 'shows waiting screen' do
+ visit project_pages_path(project)
+
+ expect(page).to have_content('Waiting for the Pages Pipeline to complete...')
+ end
+ end
+ end
+
+ context 'when pipeline wizard feature is disabled' do
+ before do
+ Feature.disable(:use_pipeline_wizard_for_pages)
+ end
+
+ it 'shows configure pages instructions' do
+ visit project_pages_path(project)
+
+ expect(page).to have_content('Configure pages')
+ end
+
+ after do
+ Feature.enable(:use_pipeline_wizard_for_pages)
+ end
+ end
+end
diff --git a/spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb b/spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb
index 4c633bea64e..2e28fa20b90 100644
--- a/spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb
+++ b/spec/features/projects/pages/user_edits_lets_encrypt_settings_spec.rb
@@ -5,7 +5,8 @@ RSpec.describe "Pages with Let's Encrypt", :https_pages_enabled do
include LetsEncryptHelpers
include Spec::Support::Helpers::ModalHelpers
- let(:project) { create(:project, pages_https_only: false) }
+ let_it_be_with_reload(:project) { create(:project, :pages_published, pages_https_only: false) }
+
let(:user) { create(:user) }
let(:role) { :maintainer }
let(:certificate_pem) { attributes_for(:pages_domain)[:certificate] }
diff --git a/spec/features/projects/pages/user_edits_settings_spec.rb b/spec/features/projects/pages/user_edits_settings_spec.rb
index bd163f4a109..88c27a6adf2 100644
--- a/spec/features/projects/pages/user_edits_settings_spec.rb
+++ b/spec/features/projects/pages/user_edits_settings_spec.rb
@@ -4,8 +4,8 @@ require 'spec_helper'
RSpec.describe 'Pages edits pages settings', :js do
include Spec::Support::Helpers::ModalHelpers
- let(:project) { create(:project, pages_https_only: false) }
- let(:user) { create(:user) }
+ let_it_be_with_reload(:project) { create(:project, :pages_published, pages_https_only: false) }
+ let_it_be(:user) { create(:user) }
before do
allow(Gitlab.config.pages).to receive(:enabled).and_return(true)
@@ -80,13 +80,6 @@ RSpec.describe 'Pages edits pages settings', :js do
end
end
- it 'does not see anything to destroy' do
- visit project_pages_path(project)
-
- expect(page).to have_content('Configure pages')
- expect(page).not_to have_link('Remove pages')
- end
-
describe 'project settings page' do
it 'renders "Pages" tab' do
visit edit_project_path(project)
@@ -151,7 +144,7 @@ RSpec.describe 'Pages edits pages settings', :js do
end
context 'non-HTTPS domain exists' do
- let(:project) { create(:project, pages_https_only: false) }
+ let(:project) { create(:project, :pages_published, pages_https_only: false) }
before do
create(:pages_domain, :without_key, :without_certificate, project: project)
diff --git a/spec/features/projects/pipeline_schedules_spec.rb b/spec/features/projects/pipeline_schedules_spec.rb
index 8cf6d5bd29b..0711a30e974 100644
--- a/spec/features/projects/pipeline_schedules_spec.rb
+++ b/spec/features/projects/pipeline_schedules_spec.rb
@@ -109,7 +109,12 @@ RSpec.describe 'Pipeline Schedules', :js do
end
it 'changes ownership of the pipeline' do
- click_link 'Take ownership'
+ click_button 'Take ownership'
+
+ page.within('#pipeline-take-ownership-modal') do
+ click_link 'Take ownership'
+ end
+
page.within('.pipeline-schedule-table-row') do
expect(page).not_to have_content('No owner')
expect(page).to have_link('Sidney Jones')
diff --git a/spec/features/projects/pipelines/legacy_pipeline_spec.rb b/spec/features/projects/pipelines/legacy_pipeline_spec.rb
index db6feecba03..14f60dfe061 100644
--- a/spec/features/projects/pipelines/legacy_pipeline_spec.rb
+++ b/spec/features/projects/pipelines/legacy_pipeline_spec.rb
@@ -385,6 +385,37 @@ RSpec.describe 'Pipeline', :js do
end
end
+ describe 'test tabs' do
+ let(:pipeline) { create(:ci_pipeline, :with_test_reports, :with_report_results, project: project) }
+
+ before do
+ stub_feature_flags(pipeline_tabs_vue: false)
+ visit_pipeline
+ wait_for_requests
+ end
+
+ context 'with test reports' do
+ it 'shows badge counter in Tests tab' do
+ expect(page.find('.js-test-report-badge-counter').text).to eq(pipeline.test_report_summary.total[:count].to_s)
+ end
+
+ it 'calls summary.json endpoint', :js do
+ find('.js-tests-tab-link').click
+
+ expect(page).to have_content('Jobs')
+ expect(page).to have_selector('[data-testid="tests-detail"]', visible: :all)
+ end
+ end
+
+ context 'without test reports' do
+ let(:pipeline) { create(:ci_pipeline, project: project) }
+
+ it 'shows zero' do
+ expect(page.find('.js-test-report-badge-counter', visible: :all).text).to eq("0")
+ end
+ end
+ end
+
context 'retrying jobs' do
before do
visit_pipeline
diff --git a/spec/features/projects/pipelines/legacy_pipelines_spec.rb b/spec/features/projects/pipelines/legacy_pipelines_spec.rb
index 15d889933bf..eb8f2de3aba 100644
--- a/spec/features/projects/pipelines/legacy_pipelines_spec.rb
+++ b/spec/features/projects/pipelines/legacy_pipelines_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe 'Pipelines', :js do
include Spec::Support::Helpers::ModalHelpers
let(:project) { create(:project) }
- let(:expected_detached_mr_tag) {'merge request'}
+ let(:expected_detached_mr_tag) { 'merge request' }
context 'when user is logged in' do
let(:user) { create(:user) }
@@ -727,6 +727,7 @@ RSpec.describe 'Pipelines', :js do
end
it { expect(page).to have_content('Missing CI config file') }
+
it 'creates a pipeline after first request failed and a valid gitlab-ci.yml file' \
'is available when trying again' do
stub_ci_pipeline_to_return_yaml_file
diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb
index a83d4191f38..cfdd851cb80 100644
--- a/spec/features/projects/pipelines/pipeline_spec.rb
+++ b/spec/features/projects/pipelines/pipeline_spec.rb
@@ -394,7 +394,7 @@ RSpec.describe 'Pipeline', :js do
expect(page).to have_selector('button[aria-label="Cancel downstream pipeline"]')
end
- context 'when canceling' do
+ context 'when canceling', :sidekiq_inline do
before do
find('button[aria-label="Cancel downstream pipeline"]').click
wait_for_requests
@@ -515,18 +515,17 @@ RSpec.describe 'Pipeline', :js do
let(:pipeline) { create(:ci_pipeline, :with_test_reports, :with_report_results, project: project) }
before do
- stub_feature_flags(pipeline_tabs_vue: false)
visit_pipeline
wait_for_requests
end
context 'with test reports' do
it 'shows badge counter in Tests tab' do
- expect(page.find('.js-test-report-badge-counter').text).to eq(pipeline.test_report_summary.total[:count].to_s)
+ expect(page.find('[data-testid="tests-counter"]').text).to eq(pipeline.test_report_summary.total[:count].to_s)
end
it 'calls summary.json endpoint', :js do
- find('.js-tests-tab-link').click
+ find('.gl-tab-nav-item', text: 'Tests').click
expect(page).to have_content('Jobs')
expect(page).to have_selector('[data-testid="tests-detail"]', visible: :all)
@@ -537,7 +536,7 @@ RSpec.describe 'Pipeline', :js do
let(:pipeline) { create(:ci_pipeline, project: project) }
it 'shows zero' do
- expect(page.find('.js-test-report-badge-counter', visible: :all).text).to eq("0")
+ expect(page.find('[data-testid="tests-counter"]', visible: :all).text).to eq("0")
end
end
end
diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb
index 785edc69623..bf521971ae0 100644
--- a/spec/features/projects/pipelines/pipelines_spec.rb
+++ b/spec/features/projects/pipelines/pipelines_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe 'Pipelines', :js do
include Spec::Support::Helpers::ModalHelpers
let(:project) { create(:project) }
- let(:expected_detached_mr_tag) {'merge request'}
+ let(:expected_detached_mr_tag) { 'merge request' }
context 'when user is logged in' do
let(:user) { create(:user) }
@@ -710,6 +710,7 @@ RSpec.describe 'Pipelines', :js do
end
it { expect(page).to have_content('Missing CI config file') }
+
it 'creates a pipeline after first request failed and a valid gitlab-ci.yml file is available when trying again' do
stub_ci_pipeline_to_return_yaml_file
diff --git a/spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb b/spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb
new file mode 100644
index 00000000000..5a50b3de772
--- /dev/null
+++ b/spec/features/projects/settings/registry_settings_cleanup_tags_spec.rb
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Project > Settings > Packages & Registries > Container registry tag expiration policy' do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project, reload: true) { create(:project, namespace: user.namespace) }
+
+ let(:container_registry_enabled) { true }
+ let(:container_registry_enabled_on_project) { ProjectFeature::ENABLED }
+
+ subject { visit cleanup_image_tags_project_settings_packages_and_registries_path(project) }
+
+ before do
+ project.project_feature.update!(container_registry_access_level: container_registry_enabled_on_project)
+ project.container_expiration_policy.update!(enabled: true)
+
+ sign_in(user)
+ stub_container_registry_config(enabled: container_registry_enabled)
+ end
+
+ context 'as owner', :js do
+ it 'shows available section' do
+ subject
+
+ expect(find('.breadcrumbs')).to have_content('Clean up image tags')
+ end
+ end
+
+ context 'when registry is disabled' do
+ let(:container_registry_enabled) { false }
+
+ it 'does not exists' do
+ subject
+
+ expect(page).to have_gitlab_http_status(:not_found)
+ end
+ end
+
+ context 'when container registry is disabled on project' do
+ let(:container_registry_enabled_on_project) { ProjectFeature::DISABLED }
+
+ it 'does not exists' do
+ subject
+
+ expect(page).to have_gitlab_http_status(:not_found)
+ end
+ end
+end
diff --git a/spec/features/projects/settings/registry_settings_spec.rb b/spec/features/projects/settings/registry_settings_spec.rb
index 9468540736f..1fb46c669e7 100644
--- a/spec/features/projects/settings/registry_settings_spec.rb
+++ b/spec/features/projects/settings/registry_settings_spec.rb
@@ -31,7 +31,6 @@ RSpec.describe 'Project > Settings > Packages & Registries > Container registry
subject
within '[data-testid="container-expiration-policy-project-settings"]' do
- click_button('Expand')
select('Every day', from: 'Run cleanup')
select('50 tags per image name', from: 'Keep the most recent:')
fill_in('Keep tags matching:', with: 'stable')
@@ -50,7 +49,6 @@ RSpec.describe 'Project > Settings > Packages & Registries > Container registry
subject
within '[data-testid="container-expiration-policy-project-settings"]' do
- click_button('Expand')
fill_in('Remove tags matching:', with: '*-production')
submit_button = find('[data-testid="save-button"')
@@ -76,7 +74,6 @@ RSpec.describe 'Project > Settings > Packages & Registries > Container registry
subject
within '[data-testid="container-expiration-policy-project-settings"]' do
- click_button('Expand')
expect(find('[data-testid="enable-toggle"]')).to have_content('Disabled - Tags will not be automatically deleted.')
end
end
@@ -91,7 +88,6 @@ RSpec.describe 'Project > Settings > Packages & Registries > Container registry
subject
within '[data-testid="container-expiration-policy-project-settings"]' do
- click_button('Expand')
expect(find('.gl-alert-title')).to have_content('Cleanup policy for tags is disabled')
end
end
diff --git a/spec/features/projects/settings/service_desk_setting_spec.rb b/spec/features/projects/settings/service_desk_setting_spec.rb
index 0df4bd3f0d9..86c5c3d2d8c 100644
--- a/spec/features/projects/settings/service_desk_setting_spec.rb
+++ b/spec/features/projects/settings/service_desk_setting_spec.rb
@@ -81,7 +81,7 @@ RSpec.describe 'Service Desk Setting', :js, :clean_gitlab_redis_cache do
}
end
- let_it_be_with_reload(:group) { create(:group)}
+ let_it_be_with_reload(:group) { create(:group) }
let_it_be_with_reload(:project) { create(:project, :custom_repo, group: group, files: issuable_project_template_files) }
let_it_be(:group_template_repo) { create(:project, :custom_repo, group: group, files: issuable_group_template_files) }
diff --git a/spec/features/projects/tags/user_edits_tags_spec.rb b/spec/features/projects/tags/user_edits_tags_spec.rb
index c8438b73dc3..857d0696659 100644
--- a/spec/features/projects/tags/user_edits_tags_spec.rb
+++ b/spec/features/projects/tags/user_edits_tags_spec.rb
@@ -15,6 +15,13 @@ RSpec.describe 'Project > Tags', :js do
end
shared_examples "can create and update release" do
+ it 'shows tag information' do
+ visit page_url
+
+ expect(page).to have_content 'v1.1.0'
+ expect(page).to have_content 'Version 1.1.0'
+ end
+
it 'can create new release' do
visit page_url
page.find("a[href=\"#{new_project_release_path(project, tag_name: 'v1.1.0')}\"]").click
@@ -52,71 +59,4 @@ RSpec.describe 'Project > Tags', :js do
include_examples "can create and update release"
end
-
- # TODO: remove most of these together with FF https://gitlab.com/gitlab-org/gitlab/-/issues/366244
- describe 'when opening project tags' do
- before do
- stub_feature_flags(edit_tag_release_notes_via_release_page: false)
- visit project_tags_path(project)
- end
-
- context 'page with tags list' do
- it 'shows tag name' do
- expect(page).to have_content 'v1.1.0'
- expect(page).to have_content 'Version 1.1.0'
- end
-
- it 'shows tag edit button' do
- page.within '.tags > .content-list' do
- edit_btn = page.find("li > .row-fixed-content.controls a.btn-edit[href='/#{project.full_path}/-/tags/v1.1.0/release/edit']")
-
- expect(edit_btn['href']).to end_with("/#{project.full_path}/-/tags/v1.1.0/release/edit")
- end
- end
- end
-
- context 'edit tag release notes' do
- before do
- page.find("li > .row-fixed-content.controls a.btn-edit[href='/#{project.full_path}/-/tags/v1.1.0/release/edit']").click
- end
-
- it 'shows tag name header' do
- page.within('.content') do
- expect(page.find('.sub-header-block')).to have_content 'Release notes for tag v1.1.0'
- end
- end
-
- it 'shows release notes form' do
- page.within('.content') do
- expect(page).to have_selector('form.release-form')
- end
- end
-
- it 'toolbar buttons on release notes form are functional' do
- page.within('.content form.release-form') do
- note_textarea = page.find('.js-gfm-input')
-
- # Click on Bold button
- page.find('.md-header-toolbar button:first-child').click
-
- expect(note_textarea.value).to eq('****')
- end
- end
-
- it 'release notes form shows "Attach a file" button', :js do
- page.within('.content form.release-form') do
- expect(page).to have_button('Attach a file')
- expect(page).not_to have_selector('.uploading-progress-container', visible: true)
- end
- end
-
- it 'shows "Attaching a file" message on uploading 1 file', :js, :capybara_ignore_server_errors do
- slow_requests do
- dropzone_file([Rails.root.join('spec', 'fixtures', 'dk.png')], 0, false)
-
- expect(page).to have_selector('.attaching-file-message', visible: true, text: 'Attaching a file -')
- end
- end
- end
- end
end
diff --git a/spec/features/projects/tags/user_views_tag_spec.rb b/spec/features/projects/tags/user_views_tag_spec.rb
new file mode 100644
index 00000000000..3978c5b7b78
--- /dev/null
+++ b/spec/features/projects/tags/user_views_tag_spec.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+RSpec.describe 'User views tag', :feature do
+ include_examples 'user views tag' do
+ let(:tag_page) { project_tag_path(project, id: tag_name) }
+ end
+end
diff --git a/spec/features/projects/tags/user_views_tags_spec.rb b/spec/features/projects/tags/user_views_tags_spec.rb
index dfb5d5d9221..d3849df023e 100644
--- a/spec/features/projects/tags/user_views_tags_spec.rb
+++ b/spec/features/projects/tags/user_views_tags_spec.rb
@@ -2,34 +2,8 @@
require 'spec_helper'
RSpec.describe 'User views tags', :feature do
- context 'with html' do
- let(:project) { create(:project, :repository, visibility_level: Gitlab::VisibilityLevel::PUBLIC) }
- let(:user) { create(:user) }
- let(:tag_name) { "stable" }
- let!(:release) { create(:release, project: project, tag: tag_name) }
-
- before do
- project.add_developer(user)
- project.repository.add_tag(user, tag_name, project.default_branch_or_main)
-
- sign_in(user)
- end
-
- shared_examples 'renders the tag index page' do
- it do
- visit project_tags_path(project)
-
- expect(page).to have_content tag_name
- end
- end
-
- it_behaves_like 'renders the tag index page'
-
- context 'when tag name contains a slash' do
- let(:tag_name) { "stable/v0.1" }
-
- it_behaves_like 'renders the tag index page'
- end
+ include_examples 'user views tag' do
+ let(:tag_page) { project_tags_path(project) }
end
context 'rss' do
diff --git a/spec/features/projects/tree/create_directory_spec.rb b/spec/features/projects/tree/create_directory_spec.rb
index f6127b38bd6..074469a9b55 100644
--- a/spec/features/projects/tree/create_directory_spec.rb
+++ b/spec/features/projects/tree/create_directory_spec.rb
@@ -49,8 +49,8 @@ RSpec.describe 'Multi-file editor new directory', :js do
# Compact mode depends on the size of window. If it is shorter than MAX_WINDOW_HEIGHT_COMPACT,
# (as it is with WEBDRIVER_HEADLESS=0), this initial commit button will exist. Otherwise, if it is
# taller (as it is by default with chrome headless) then the button will not exist.
- if page.has_css?('.qa-begin-commit-button') # rubocop:disable QA/SelectorUsage
- find('.qa-begin-commit-button').click # rubocop:disable QA/SelectorUsage
+ if page.has_css?('[data-testid="begin-commit-button"]')
+ find('[data-testid="begin-commit-button"]').click
end
fill_in('commit-message', with: 'commit message ide')
diff --git a/spec/features/projects/tree/create_file_spec.rb b/spec/features/projects/tree/create_file_spec.rb
index 33be02a9121..85c644fa528 100644
--- a/spec/features/projects/tree/create_file_spec.rb
+++ b/spec/features/projects/tree/create_file_spec.rb
@@ -39,8 +39,8 @@ RSpec.describe 'Multi-file editor new file', :js do
# Compact mode depends on the size of window. If it is shorter than MAX_WINDOW_HEIGHT_COMPACT,
# (as it is with WEBDRIVER_HEADLESS=0), this initial commit button will exist. Otherwise, if it is
# taller (as it is by default with chrome headless) then the button will not exist.
- if page.has_css?('.qa-begin-commit-button') # rubocop:disable QA/SelectorUsage
- find('.qa-begin-commit-button').click # rubocop:disable QA/SelectorUsage
+ if page.has_css?('[data-testid="begin-commit-button"]')
+ find('[data-testid="begin-commit-button"]').click
end
fill_in('commit-message', with: 'commit message ide')
diff --git a/spec/features/projects/tree/tree_show_spec.rb b/spec/features/projects/tree/tree_show_spec.rb
index 53e89cd2959..163e347d03d 100644
--- a/spec/features/projects/tree/tree_show_spec.rb
+++ b/spec/features/projects/tree/tree_show_spec.rb
@@ -54,7 +54,7 @@ RSpec.describe 'Projects tree', :js do
let(:filename) { File.join(path, 'test.txt') }
let(:newrev) { project.repository.commit('master').sha }
let(:short_newrev) { project.repository.commit('master').short_id }
- let(:message) { 'Glob characters'}
+ let(:message) { 'Glob characters' }
before do
create_file_in_repo(project, 'master', 'master', filename, 'Test file', commit_message: message)