summaryrefslogtreecommitdiff
path: root/spec/support/shared_examples/features
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/shared_examples/features')
-rw-r--r--spec/support/shared_examples/features/access_tokens_shared_examples.rb51
-rw-r--r--spec/support/shared_examples/features/comments_on_merge_request_files_shared_examples.rb4
-rw-r--r--spec/support/shared_examples/features/content_editor_shared_examples.rb125
-rw-r--r--spec/support/shared_examples/features/deploy_token_shared_examples.rb24
-rw-r--r--spec/support/shared_examples/features/discussion_comments_shared_example.rb4
-rw-r--r--spec/support/shared_examples/features/project_upload_files_shared_examples.rb6
-rw-r--r--spec/support/shared_examples/features/runners_shared_examples.rb12
-rw-r--r--spec/support/shared_examples/features/search/search_timeouts_shared_examples.rb1
-rw-r--r--spec/support/shared_examples/features/sidebar/sidebar_due_date_shared_examples.rb2
-rw-r--r--spec/support/shared_examples/features/wiki/user_creates_wiki_page_shared_examples.rb12
-rw-r--r--spec/support/shared_examples/features/wiki/user_updates_wiki_page_shared_examples.rb12
-rw-r--r--spec/support/shared_examples/features/wiki/user_views_wiki_pages_shared_examples.rb33
12 files changed, 221 insertions, 65 deletions
diff --git a/spec/support/shared_examples/features/access_tokens_shared_examples.rb b/spec/support/shared_examples/features/access_tokens_shared_examples.rb
index 0fc45b154d8..cd255abd7a8 100644
--- a/spec/support/shared_examples/features/access_tokens_shared_examples.rb
+++ b/spec/support/shared_examples/features/access_tokens_shared_examples.rb
@@ -10,11 +10,11 @@ end
RSpec.shared_examples 'resource access tokens creation' do |resource_type|
def active_resource_access_tokens
- find('.table.active-tokens')
+ find("[data-testid='active-tokens']")
end
def created_resource_access_token
- find('#created-personal-access-token').value
+ find_field('new-access-token').value
end
it 'allows creation of an access token', :aggregate_failures do
@@ -106,7 +106,7 @@ end
RSpec.shared_examples 'active resource access tokens' do
def active_resource_access_tokens
- find('.table.active-tokens')
+ find("[data-testid='active-tokens']")
end
it 'shows active access tokens' do
@@ -129,24 +129,22 @@ RSpec.shared_examples 'active resource access tokens' do
end
RSpec.shared_examples 'inactive resource access tokens' do |no_active_tokens_text|
- def no_resource_access_tokens_message
- find('.settings-message')
+ def active_resource_access_tokens
+ find("[data-testid='active-tokens']")
end
it 'allows revocation of an active token' do
visit resource_settings_access_tokens_path
accept_gl_confirm(button_text: 'Revoke') { click_on 'Revoke' }
- expect(page).to have_selector('.settings-message')
- expect(no_resource_access_tokens_message).to have_text(no_active_tokens_text)
+ expect(active_resource_access_tokens).to have_text(no_active_tokens_text)
end
it 'removes expired tokens from active section' do
resource_access_token.update!(expires_at: 5.days.ago)
visit resource_settings_access_tokens_path
- expect(page).to have_selector('.settings-message')
- expect(no_resource_access_tokens_message).to have_text(no_active_tokens_text)
+ expect(active_resource_access_tokens).to have_text(no_active_tokens_text)
end
context 'when resource access token creation is not allowed' do
@@ -158,8 +156,39 @@ RSpec.shared_examples 'inactive resource access tokens' do |no_active_tokens_tex
visit resource_settings_access_tokens_path
accept_gl_confirm(button_text: 'Revoke') { click_on 'Revoke' }
- expect(page).to have_selector('.settings-message')
- expect(no_resource_access_tokens_message).to have_text(no_active_tokens_text)
+ expect(active_resource_access_tokens).to have_text(no_active_tokens_text)
+ end
+ end
+end
+
+RSpec.shared_examples '#create access token' do
+ let(:url) { {} }
+ let_it_be(:admin) { create(:admin) }
+ let_it_be(:token_attributes) { attributes_for(:personal_access_token) }
+
+ before do
+ sign_in(admin)
+ end
+
+ context "when POST is successful" do
+ it "renders JSON with a new token" do
+ post url, params: { personal_access_token: token_attributes }
+
+ parsed_body = Gitlab::Json.parse(response.body)
+ expect(parsed_body['new_token']).not_to be_blank
+ expect(parsed_body['errors']).to be_blank
+ expect(response).to have_gitlab_http_status(:success)
+ end
+ end
+
+ context "when POST is unsuccessful" do
+ it "renders JSON with an error" do
+ post url, params: { personal_access_token: token_attributes.merge(scopes: []) }
+
+ parsed_body = Gitlab::Json.parse(response.body)
+ expect(parsed_body['new_token']).to be_blank
+ expect(parsed_body['errors']).not_to be_blank
+ expect(response).to have_gitlab_http_status(:unprocessable_entity)
end
end
end
diff --git a/spec/support/shared_examples/features/comments_on_merge_request_files_shared_examples.rb b/spec/support/shared_examples/features/comments_on_merge_request_files_shared_examples.rb
index f7cdc4c61ec..8a07e52019c 100644
--- a/spec/support/shared_examples/features/comments_on_merge_request_files_shared_examples.rb
+++ b/spec/support/shared_examples/features/comments_on_merge_request_files_shared_examples.rb
@@ -1,10 +1,6 @@
# frozen_string_literal: true
RSpec.shared_examples 'comment on merge request file' do
- before do
- stub_feature_flags(remove_user_attributes_projects: false)
- end
-
it 'adds a comment' do
click_diff_line(find_by_scrolling("[id='#{sample_commit.line_code}']"))
diff --git a/spec/support/shared_examples/features/content_editor_shared_examples.rb b/spec/support/shared_examples/features/content_editor_shared_examples.rb
index 21f264a8b6a..7863548e7f3 100644
--- a/spec/support/shared_examples/features/content_editor_shared_examples.rb
+++ b/spec/support/shared_examples/features/content_editor_shared_examples.rb
@@ -35,6 +35,34 @@ RSpec.shared_examples 'edits content using the content editor' do
attach_file('content_editor_image', Rails.root.join('spec', 'fixtures', fixture_name), make_visible: true)
end
+ def wait_until_hidden_field_is_updated(value)
+ expect(page).to have_field('wiki[content]', with: value, type: 'hidden')
+ end
+
+ it 'saves page content in local storage if the user navigates away' do
+ switch_to_content_editor
+
+ expect(page).to have_css(content_editor_testid)
+
+ type_in_content_editor ' Typing text in the content editor'
+
+ wait_until_hidden_field_is_updated /Typing text in the content editor/
+
+ refresh
+
+ expect(page).to have_text('Typing text in the content editor')
+
+ refresh # also retained after second refresh
+
+ expect(page).to have_text('Typing text in the content editor')
+
+ click_link 'Cancel' # draft is deleted on cancel
+
+ page.go_back
+
+ expect(page).not_to have_text('Typing text in the content editor')
+ end
+
describe 'formatting bubble menu' do
it 'shows a formatting bubble menu for a regular paragraph and headings' do
switch_to_content_editor
@@ -189,4 +217,101 @@ RSpec.shared_examples 'edits content using the content editor' do
end
end
end
+
+ describe 'autocomplete suggestions' do
+ let(:suggestions_dropdown) { '[data-testid="content-editor-suggestions-dropdown"]' }
+
+ before do
+ if defined?(project)
+ create(:issue, project: project, title: 'My Cool Linked Issue')
+ create(:merge_request, source_project: project, title: 'My Cool Merge Request')
+ create(:label, project: project, title: 'My Cool Label')
+ create(:milestone, project: project, title: 'My Cool Milestone')
+
+ project.add_maintainer(create(:user, name: 'abc123', username: 'abc123'))
+ else # group wikis
+ project = create(:project, group: group)
+
+ create(:issue, project: project, title: 'My Cool Linked Issue')
+ create(:merge_request, source_project: project, title: 'My Cool Merge Request')
+ create(:group_label, group: group, title: 'My Cool Label')
+ create(:milestone, group: group, title: 'My Cool Milestone')
+
+ project.add_maintainer(create(:user, name: 'abc123', username: 'abc123'))
+ end
+
+ switch_to_content_editor
+
+ type_in_content_editor :enter
+ end
+
+ it 'shows suggestions for members with descriptions' do
+ type_in_content_editor '@a'
+
+ expect(find(suggestions_dropdown)).to have_text('abc123')
+ expect(find(suggestions_dropdown)).to have_text('all')
+ expect(find(suggestions_dropdown)).to have_text('Group Members (2)')
+
+ send_keys [:arrow_down, :enter]
+
+ expect(page).not_to have_css(suggestions_dropdown)
+ expect(page).to have_text('@abc123')
+ end
+
+ it 'shows suggestions for merge requests' do
+ type_in_content_editor '!'
+
+ expect(find(suggestions_dropdown)).to have_text('My Cool Merge Request')
+
+ send_keys :enter
+
+ expect(page).not_to have_css(suggestions_dropdown)
+ expect(page).to have_text('!1')
+ end
+
+ it 'shows suggestions for issues' do
+ type_in_content_editor '#'
+
+ expect(find(suggestions_dropdown)).to have_text('My Cool Linked Issue')
+
+ send_keys :enter
+
+ expect(page).not_to have_css(suggestions_dropdown)
+ expect(page).to have_text('#1')
+ end
+
+ it 'shows suggestions for milestones' do
+ type_in_content_editor '%'
+
+ expect(find(suggestions_dropdown)).to have_text('My Cool Milestone')
+
+ send_keys :enter
+
+ expect(page).not_to have_css(suggestions_dropdown)
+ expect(page).to have_text('%My Cool Milestone')
+ end
+
+ it 'shows suggestions for emojis' do
+ type_in_content_editor ':smile'
+
+ expect(find(suggestions_dropdown)).to have_text('🙂 slight_smile')
+ expect(find(suggestions_dropdown)).to have_text('😸 smile_cat')
+
+ send_keys :enter
+
+ expect(page).not_to have_css(suggestions_dropdown)
+
+ expect(page).to have_text('🙂')
+ end
+
+ it 'doesn\'t show suggestions dropdown if there are no suggestions to show' do
+ type_in_content_editor '%'
+
+ expect(find(suggestions_dropdown)).to have_text('My Cool Milestone')
+
+ type_in_content_editor 'x'
+
+ expect(page).not_to have_css(suggestions_dropdown)
+ end
+ end
end
diff --git a/spec/support/shared_examples/features/deploy_token_shared_examples.rb b/spec/support/shared_examples/features/deploy_token_shared_examples.rb
index 79ad5bd6c7f..9fe08e5c996 100644
--- a/spec/support/shared_examples/features/deploy_token_shared_examples.rb
+++ b/spec/support/shared_examples/features/deploy_token_shared_examples.rb
@@ -14,32 +14,32 @@ RSpec.shared_examples 'a deploy token in settings' do
end
end
- it 'add a new deploy token' do
+ it 'add a new deploy token', :js do
visit page_path
- fill_in 'deploy_token_name', with: 'new_deploy_key'
- fill_in 'deploy_token_expires_at', with: (Date.today + 1.month).to_s
- fill_in 'deploy_token_username', with: 'deployer'
- check 'deploy_token_read_repository'
- check 'deploy_token_read_registry'
+ fill_in _('Name'), with: 'new_deploy_key'
+ fill_in _('Expiration date (optional)'), with: (Date.today + 1.month).to_s
+ fill_in _('Username (optional)'), with: 'deployer'
+ check 'read_repository'
+ check 'read_registry'
click_button 'Create deploy token'
expect(page).to have_content("Your new #{entity_type} deploy token has been created")
within('.created-deploy-token-container') do
- expect(page).to have_selector("input[name='deploy-token-user'][value='deployer']")
- expect(page).to have_selector("input[name='deploy-token'][readonly='readonly']")
+ expect(find("input[name='deploy-token-user']").value).to eq("deployer")
+ expect(find("input[name='deploy-token'][readonly='readonly']")).to be_visible
end
- expect(find("input#deploy_token_name").value).to eq nil
+ expect(find("input#deploy_token_name").value).to be_empty
expect(find("input#deploy_token_read_repository").checked?).to eq false
end
- context "with form errors" do
+ context "with form errors", :js do
before do
visit page_path
- fill_in "deploy_token_name", with: "new_deploy_key"
- fill_in "deploy_token_username", with: "deployer"
+ fill_in _('Name'), with: "new_deploy_key"
+ fill_in _('Username (optional)'), with: "deployer"
click_button "Create deploy token"
end
diff --git a/spec/support/shared_examples/features/discussion_comments_shared_example.rb b/spec/support/shared_examples/features/discussion_comments_shared_example.rb
index f209070d82a..68c0d06e7d0 100644
--- a/spec/support/shared_examples/features/discussion_comments_shared_example.rb
+++ b/spec/support/shared_examples/features/discussion_comments_shared_example.rb
@@ -209,7 +209,7 @@ RSpec.shared_examples 'thread comments for issue, epic and merge request' do |re
wait_for_all_requests
expect(page).to have_content(comment)
- expect(page).to have_content "@#{user.username} closed"
+ expect(page).to have_content "#{user.name} closed"
new_comment = all(comments_selector).last
@@ -334,7 +334,7 @@ RSpec.shared_examples 'thread comments for issue, epic and merge request' do |re
click_button 'Start thread & close issue'
expect(page).to have_content(comment)
- expect(page).to have_content "@#{user.username} closed"
+ expect(page).to have_content "#{user.name} closed"
new_discussion = all(comments_selector)[-2]
diff --git a/spec/support/shared_examples/features/project_upload_files_shared_examples.rb b/spec/support/shared_examples/features/project_upload_files_shared_examples.rb
index 0a5ad5a59c0..7737f8a73c5 100644
--- a/spec/support/shared_examples/features/project_upload_files_shared_examples.rb
+++ b/spec/support/shared_examples/features/project_upload_files_shared_examples.rb
@@ -77,9 +77,9 @@ RSpec.shared_examples 'it uploads and commits a new pdf file' do |drop: false|
end
if drop
- find(".upload-dropzone-card").drop(File.join(Rails.root, 'spec', 'fixtures', 'git-cheat-sheet.pdf'))
+ find(".upload-dropzone-card").drop(File.join(Rails.root, 'spec', 'fixtures', 'sample.pdf'))
else
- attach_file('upload_file', File.join(Rails.root, 'spec', 'fixtures', 'git-cheat-sheet.pdf'), make_visible: true)
+ attach_file('upload_file', File.join(Rails.root, 'spec', 'fixtures', 'sample.pdf'), make_visible: true)
end
page.within('#modal-upload-blob') do
@@ -90,7 +90,7 @@ RSpec.shared_examples 'it uploads and commits a new pdf file' do |drop: false|
wait_for_all_requests
- visit(project_blob_path(project, 'upload_image/git-cheat-sheet.pdf'))
+ visit(project_blob_path(project, 'upload_image/sample.pdf'))
expect(page).to have_css('.js-pdf-viewer')
end
diff --git a/spec/support/shared_examples/features/runners_shared_examples.rb b/spec/support/shared_examples/features/runners_shared_examples.rb
index 31ee08ea9db..1d4af944187 100644
--- a/spec/support/shared_examples/features/runners_shared_examples.rb
+++ b/spec/support/shared_examples/features/runners_shared_examples.rb
@@ -146,6 +146,18 @@ RSpec.shared_examples 'pauses, resumes and deletes a runner' do
end
end
+RSpec.shared_examples 'filters by tag' do
+ it 'shows correct runner when tag matches' do
+ expect(page).to have_content found_runner
+ expect(page).to have_content missing_runner
+
+ input_filtered_search_filter_is_only('Tags', tag)
+
+ expect(page).to have_content found_runner
+ expect(page).not_to have_content missing_runner
+ end
+end
+
RSpec.shared_examples 'submits edit runner form' do
it 'breadcrumb contains runner id and token' do
page.within '[data-testid="breadcrumb-links"]' do
diff --git a/spec/support/shared_examples/features/search/search_timeouts_shared_examples.rb b/spec/support/shared_examples/features/search/search_timeouts_shared_examples.rb
index 095c48cade8..84dc2b20ddc 100644
--- a/spec/support/shared_examples/features/search/search_timeouts_shared_examples.rb
+++ b/spec/support/shared_examples/features/search/search_timeouts_shared_examples.rb
@@ -3,6 +3,7 @@
RSpec.shared_examples 'search timeouts' do |scope|
context 'when search times out' do
before do
+ stub_feature_flags(search_page_vertical_nav: false)
allow_next_instance_of(SearchService) do |service|
allow(service).to receive(:search_objects).and_raise(ActiveRecord::QueryCanceled)
end
diff --git a/spec/support/shared_examples/features/sidebar/sidebar_due_date_shared_examples.rb b/spec/support/shared_examples/features/sidebar/sidebar_due_date_shared_examples.rb
index 95c0a76d726..206116d66c8 100644
--- a/spec/support/shared_examples/features/sidebar/sidebar_due_date_shared_examples.rb
+++ b/spec/support/shared_examples/features/sidebar/sidebar_due_date_shared_examples.rb
@@ -20,6 +20,8 @@ RSpec.shared_examples 'date sidebar widget' do
scroll_to(button)
button.click
+ execute_script('document.querySelector(".issuable-sidebar")?.scrollBy(0, 50)')
+
click_button today.to_s
wait_for_requests
diff --git a/spec/support/shared_examples/features/wiki/user_creates_wiki_page_shared_examples.rb b/spec/support/shared_examples/features/wiki/user_creates_wiki_page_shared_examples.rb
index 8081c51577a..ed885d7a226 100644
--- a/spec/support/shared_examples/features/wiki/user_creates_wiki_page_shared_examples.rb
+++ b/spec/support/shared_examples/features/wiki/user_creates_wiki_page_shared_examples.rb
@@ -147,6 +147,18 @@ RSpec.shared_examples 'User creates wiki page' do
end
end
+ it 'saves page content in local storage if the user navigates away', :js do
+ fill_in(:wiki_title, with: "Test title")
+ fill_in(:wiki_content, with: "This is a test")
+ fill_in(:wiki_message, with: "Test commit message")
+
+ refresh
+
+ expect(page).to have_field(:wiki_title, with: "Test title")
+ expect(page).to have_field(:wiki_content, with: "This is a test")
+ expect(page).to have_field(:wiki_message, with: "Test commit message")
+ end
+
it 'creates a wiki page with Org markup', :aggregate_failures, :js do
org_content = <<~ORG
* Heading
diff --git a/spec/support/shared_examples/features/wiki/user_updates_wiki_page_shared_examples.rb b/spec/support/shared_examples/features/wiki/user_updates_wiki_page_shared_examples.rb
index 5c63d6a973d..0334187e4b1 100644
--- a/spec/support/shared_examples/features/wiki/user_updates_wiki_page_shared_examples.rb
+++ b/spec/support/shared_examples/features/wiki/user_updates_wiki_page_shared_examples.rb
@@ -78,6 +78,18 @@ RSpec.shared_examples 'User updates wiki page' do
expect(page).to have_content('My awesome wiki!')
end
+ it 'saves page content in local storage if the user navigates away', :js do
+ fill_in(:wiki_title, with: "Test title")
+ fill_in(:wiki_content, with: "This is a test")
+ fill_in(:wiki_message, with: "Test commit message")
+
+ refresh
+
+ expect(page).to have_field(:wiki_title, with: "Test title")
+ expect(page).to have_field(:wiki_content, with: "This is a test")
+ expect(page).to have_field(:wiki_message, with: "Test commit message")
+ end
+
it 'updates the commit message as the title is changed', :js do
fill_in(:wiki_title, with: '& < > \ \ { } &')
diff --git a/spec/support/shared_examples/features/wiki/user_views_wiki_pages_shared_examples.rb b/spec/support/shared_examples/features/wiki/user_views_wiki_pages_shared_examples.rb
index 32cb2b1d187..9b5326026b1 100644
--- a/spec/support/shared_examples/features/wiki/user_views_wiki_pages_shared_examples.rb
+++ b/spec/support/shared_examples/features/wiki/user_views_wiki_pages_shared_examples.rb
@@ -53,37 +53,4 @@ RSpec.shared_examples 'User views wiki pages' do
end
end
end
-
- context 'ordered by created_at' do
- let(:pages_ordered_by_created_at) { [wiki_page1, wiki_page2, wiki_page3] }
-
- before do
- page.within('.wiki-sort-dropdown') do
- click_button('Title')
- click_button('Created date')
- end
- end
-
- context 'asc' do
- it 'pages are displayed in direct order' do
- pages.each.with_index do |page_title, index|
- expect(page_title.text).to eq(pages_ordered_by_created_at[index].title)
- end
- end
- end
-
- context 'desc' do
- before do
- page.within('.wiki-sort-dropdown') do
- page.find('.rspec-reverse-sort').click
- end
- end
-
- it 'pages are displayed in reversed order' do
- pages.reverse_each.with_index do |page_title, index|
- expect(page_title.text).to eq(pages_ordered_by_created_at[index].title)
- end
- end
- end
- end
end