Commit 6a199f5f authored by Lin Jen-Shin's avatar Lin Jen-Shin

Merge branch '36383-improve-search-result-labels-ee' into 'master'

Improve search result labels (EE port)

See merge request gitlab-org/gitlab-ee!15549
parents fa27857a a9cda0bc
...@@ -30,7 +30,46 @@ module SearchHelper ...@@ -30,7 +30,46 @@ module SearchHelper
to = collection.offset_value + collection.to_a.size to = collection.offset_value + collection.to_a.size
count = collection.total_count count = collection.total_count
s_("SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\"") % { from: from, to: to, count: count, scope: scope.humanize(capitalize: false), term: term } search_entries_info_template(collection) % {
from: from,
to: to,
count: count,
scope: search_entries_info_label(scope, count),
term: term
}
end
def search_entries_info_label(scope, count)
case scope
when 'blobs', 'snippet_blobs', 'wiki_blobs'
ns_('SearchResults|result', 'SearchResults|results', count)
when 'commits'
ns_('SearchResults|commit', 'SearchResults|commits', count)
when 'issues'
ns_('SearchResults|issue', 'SearchResults|issues', count)
when 'merge_requests'
ns_('SearchResults|merge request', 'SearchResults|merge requests', count)
when 'milestones'
ns_('SearchResults|milestone', 'SearchResults|milestones', count)
when 'notes'
ns_('SearchResults|comment', 'SearchResults|comments', count)
when 'projects'
ns_('SearchResults|project', 'SearchResults|projects', count)
when 'snippet_titles'
ns_('SearchResults|snippet', 'SearchResults|snippets', count)
when 'users'
ns_('SearchResults|user', 'SearchResults|users', count)
else
raise "Unrecognized search scope '#{scope}'"
end
end
def search_entries_info_template(collection)
if collection.total_pages > 1
s_("SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\"")
else
s_("SearchResults|Showing %{count} %{scope} for \"%{term}\"")
end
end end
def find_project_for_result_blob(projects, result) def find_project_for_result_blob(projects, result)
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
= hidden_field_tag :snippets, true = hidden_field_tag :snippets, true
= hidden_field_tag :repository_ref, @ref = hidden_field_tag :repository_ref, @ref
= hidden_field_tag :nav_source, 'navbar' = hidden_field_tag :nav_source, 'navbar'
-# workaround for non-JS feature specs, for JS you need to use find('#search').send_keys(:enter) -# workaround for non-JS feature specs, see spec/support/helpers/search_helpers.rb
= button_tag 'Go' if ENV['RAILS_ENV'] == 'test' - if ENV['RAILS_ENV'] == 'test'
%noscript= button_tag 'Search'
.search-autocomplete-opts.hide{ :'data-autocomplete-path' => search_autocomplete_path, :'data-autocomplete-project-id' => @project.try(:id), :'data-autocomplete-project-ref' => @ref } .search-autocomplete-opts.hide{ :'data-autocomplete-path' => search_autocomplete_path, :'data-autocomplete-project-id' => @project.try(:id), :'data-autocomplete-project-ref' => @ref }
---
title: Improve search result labels
merge_request: 32101
author:
type: changed
...@@ -433,26 +433,21 @@ describe 'Promotions', :js do ...@@ -433,26 +433,21 @@ describe 'Promotions', :js do
it 'appears on seearch page' do it 'appears on seearch page' do
visit search_path visit search_path
fill_in 'search', with: 'chosen' submit_search('chosen')
find('.btn-search').click
expect(find('#promote_advanced_search')).to have_content 'Improve search with Advanced Global Search and GitLab Enterprise Edition.' expect(find('#promote_advanced_search')).to have_content 'Improve search with Advanced Global Search and GitLab Enterprise Edition.'
end end
it 'does not show when cookie is set' do it 'does not show when cookie is set' do
visit search_path visit search_path
submit_search('chosen')
fill_in 'search', with: 'chosen'
find('.btn-search').click
within('#promote_advanced_search') do within('#promote_advanced_search') do
find('.close').click find('.close').click
end end
visit search_path visit search_path
submit_search('chosen')
fill_in 'search', with: 'chosen'
find('.btn-search').click
expect(page).not_to have_selector('#promote_advanced_search') expect(page).not_to have_selector('#promote_advanced_search')
end end
......
...@@ -76,10 +76,9 @@ describe 'Global elastic search', :elastic do ...@@ -76,10 +76,9 @@ describe 'Global elastic search', :elastic do
it "has a pagination" do it "has a pagination" do
visit dashboard_projects_path visit dashboard_projects_path
fill_in "search", with: "initial" submit_search('initial')
click_button "Go" select_search_scope('Issues')
select_filter("Issues")
expect(page).to have_selector('.gl-pagination .js-pagination-page', count: 2) expect(page).to have_selector('.gl-pagination .js-pagination-page', count: 2)
end end
end end
...@@ -95,10 +94,8 @@ describe 'Global elastic search', :elastic do ...@@ -95,10 +94,8 @@ describe 'Global elastic search', :elastic do
it "has a pagination" do it "has a pagination" do
visit dashboard_projects_path visit dashboard_projects_path
fill_in "search", with: "foo" submit_search('foo')
click_button "Go" select_search_scope('Comments')
select_filter("Comments")
expect(page).to have_selector('.gl-pagination .js-pagination-page', count: 2) expect(page).to have_selector('.gl-pagination .js-pagination-page', count: 2)
end end
...@@ -116,10 +113,8 @@ describe 'Global elastic search', :elastic do ...@@ -116,10 +113,8 @@ describe 'Global elastic search', :elastic do
it "finds files" do it "finds files" do
visit dashboard_projects_path visit dashboard_projects_path
fill_in "search", with: "application.js" submit_search('application.js')
click_button "Go" select_search_scope('Code')
select_filter("Code")
expect(page).to have_selector('.file-content .code') expect(page).to have_selector('.file-content .code')
...@@ -142,8 +137,7 @@ describe 'Global elastic search', :elastic do ...@@ -142,8 +137,7 @@ describe 'Global elastic search', :elastic do
visit dashboard_projects_path visit dashboard_projects_path
fill_in "search", with: "application.js" submit_search('application.js')
click_button "Go"
expect(page).not_to have_content 'supercalifragilisticexpialidocious' expect(page).not_to have_content 'supercalifragilisticexpialidocious'
end end
...@@ -160,10 +154,8 @@ describe 'Global elastic search', :elastic do ...@@ -160,10 +154,8 @@ describe 'Global elastic search', :elastic do
it "finds files" do it "finds files" do
visit dashboard_projects_path visit dashboard_projects_path
fill_in "search", with: "term" submit_search('term')
click_button "Go" select_search_scope('Wiki')
select_filter("Wiki")
expect(page).to have_selector('.file-content .code') expect(page).to have_selector('.file-content .code')
...@@ -180,10 +172,8 @@ describe 'Global elastic search', :elastic do ...@@ -180,10 +172,8 @@ describe 'Global elastic search', :elastic do
it "finds commits" do it "finds commits" do
visit dashboard_projects_path visit dashboard_projects_path
fill_in "search", with: "add" submit_search('add')
click_button "Go" select_search_scope('Commits')
select_filter("Commits")
expect(page).to have_selector('.commit-row-description') expect(page).to have_selector('.commit-row-description')
expect(page).to have_selector('.project-namespace') expect(page).to have_selector('.project-namespace')
...@@ -192,12 +182,11 @@ describe 'Global elastic search', :elastic do ...@@ -192,12 +182,11 @@ describe 'Global elastic search', :elastic do
it 'shows proper page 2 results' do it 'shows proper page 2 results' do
visit dashboard_projects_path visit dashboard_projects_path
fill_in "search", with: "add" submit_search('add')
click_button "Go" select_search_scope('Commits')
expected_message = "Add directory structure for tree_helper spec" expected_message = "Add directory structure for tree_helper spec"
select_filter("Commits")
expect(page).not_to have_content(expected_message) expect(page).not_to have_content(expected_message)
click_link 'Next' click_link 'Next'
...@@ -213,8 +202,7 @@ describe 'Global elastic search', :elastic do ...@@ -213,8 +202,7 @@ describe 'Global elastic search', :elastic do
visit dashboard_projects_path visit dashboard_projects_path
fill_in('search', with: 'project') submit_search('project')
find('#search').send_keys(:enter)
end end
it 'displays result counts for all categories' do it 'displays result counts for all categories' do
......
...@@ -21,6 +21,9 @@ describe 'Group elastic search', :js, :elastic do ...@@ -21,6 +21,9 @@ describe 'Group elastic search', :js, :elastic do
group.add_owner(user) group.add_owner(user)
sign_in(user) sign_in(user)
visit(search_path)
choose_group(group)
end end
describe 'issue search' do describe 'issue search' do
...@@ -31,13 +34,9 @@ describe 'Group elastic search', :js, :elastic do ...@@ -31,13 +34,9 @@ describe 'Group elastic search', :js, :elastic do
end end
it 'finds the issue' do it 'finds the issue' do
visit search_path submit_search('chosen')
select_search_scope('Issues')
choose_group group
fill_in 'search', with: 'chosen'
find('.btn-search').click
select_filter('Issues')
expect(page).to have_content('chosen issue title') expect(page).to have_content('chosen issue title')
end end
end end
...@@ -50,13 +49,8 @@ describe 'Group elastic search', :js, :elastic do ...@@ -50,13 +49,8 @@ describe 'Group elastic search', :js, :elastic do
end end
it 'finds files' do it 'finds files' do
visit search_path submit_search('def')
select_search_scope('Code')
choose_group group
fill_in 'search', with: 'def'
find('.btn-search').click
select_filter('Code')
expect(page).to have_selector('.file-content .code') expect(page).to have_selector('.file-content .code')
end end
...@@ -72,35 +66,25 @@ describe 'Group elastic search', :js, :elastic do ...@@ -72,35 +66,25 @@ describe 'Group elastic search', :js, :elastic do
Gitlab::Elastic::Helper.refresh_index Gitlab::Elastic::Helper.refresh_index
end end
it "finds pages" do it 'finds pages' do
visit search_path submit_search('term')
select_search_scope('Wiki')
choose_group group
fill_in "search", with: "term"
find('.btn-search').click
select_filter("Wiki")
expect(page).to have_selector('.file-content .code') expect(page).to have_selector('.file-content .code')
expect(page).to have_selector('span.line[lang="markdown"]')
expect(page).to have_selector("span.line[lang='markdown']")
end end
end end
describe 'commit search' do describe 'commit search' do
before do before do
project.repository.index_commits project.repository.index_commits
Gitlab::Elastic::Helper.refresh_index Gitlab::Elastic::Helper.refresh_index
end end
it 'finds commits' do it 'finds commits' do
visit search_path submit_search('add')
select_search_scope('Commits')
choose_group group
fill_in 'search', with: 'add'
find('.btn-search').click
select_filter('Commits')
expect(page).to have_selector('.commit-list > .commit') expect(page).to have_selector('.commit-list > .commit')
end end
......
...@@ -9,77 +9,73 @@ describe 'Project elastic search', :js, :elastic do ...@@ -9,77 +9,73 @@ describe 'Project elastic search', :js, :elastic do
project.add_maintainer(user) project.add_maintainer(user)
sign_in(user) sign_in(user)
visit project_path(project)
end end
describe 'searching' do describe 'searching' do
it 'finds issues' do it 'finds issues' do
create(:issue, project: project, title: 'Test searching for an issue') create(:issue, project: project, title: 'Test searching for an issue')
expect_search_result(scope: 'Issues', term: 'Test', result: 'Test searching for an issue') submit_search('Test')
select_search_scope('Issues')
expect(page).to have_selector('.results', text: 'Test searching for an issue')
end end
it 'finds merge requests' do it 'finds merge requests' do
create(:merge_request, source_project: project, target_project: project, title: 'Test searching for an MR') create(:merge_request, source_project: project, target_project: project, title: 'Test searching for an MR')
expect_search_result(scope: 'Merge requests', term: 'Test', result: 'Test searching for an MR') submit_search('Test')
select_search_scope('Merge requests')
expect(page).to have_selector('.results', text: 'Test searching for an MR')
end end
it 'finds milestones' do it 'finds milestones' do
create(:milestone, project: project, title: 'Test searching for a milestone') create(:milestone, project: project, title: 'Test searching for a milestone')
expect_search_result(scope: 'Milestones', term: 'Test', result: 'Test searching for a milestone') submit_search('Test')
select_search_scope('Milestones')
expect(page).to have_selector('.results', text: 'Test searching for a milestone')
end end
it 'finds wiki pages' do it 'finds wiki pages' do
project.wiki.create_page('test.md', 'Test searching for a wiki page') project.wiki.create_page('test.md', 'Test searching for a wiki page')
project.wiki.index_wiki_blobs project.wiki.index_wiki_blobs
expect_search_result(scope: 'Wiki', term: 'Test', result: 'Test searching for a wiki page') submit_search('Test')
select_search_scope('Wiki')
expect(page).to have_selector('.results', text: 'Test searching for a wiki page')
end end
it 'finds notes' do it 'finds notes' do
create(:note, project: project, note: 'Test searching for a note') create(:note, project: project, note: 'Test searching for a comment')
search(scope: 'Comments', term: 'Test') submit_search('Test')
select_search_scope('Comments')
expect(page).to have_content(/showing (\d+) - (\d+) of (\d+) notes/i) expect(page).to have_selector('.results', text: 'Test searching for a comment')
expect(page).to have_content('Test searching for a note')
end end
it 'finds commits' do it 'finds commits' do
project.repository.index_commits project.repository.index_commits
search(scope: 'Commits', term: 'initial') submit_search('initial')
select_search_scope('Commits')
expect(page).to have_content(/showing (\d+) - (\d+) of (\d+) commits/i) expect(page).to have_selector('.results', text: 'Initial commit')
expect(page).to have_content('Initial commit')
end end
it 'finds blobs' do it 'finds blobs' do
project.repository.index_blobs project.repository.index_blobs
search(scope: 'Code', term: 'def') submit_search('def')
select_search_scope('Code')
expect(page).to have_content(/showing (\d+) - (\d+) of (\d+) blobs/i) expect(page).to have_selector('.results', text: 'def username_regex')
expect(page).to have_content('def username_regex')
end end
end end
def search(scope:, term:)
visit project_path(project)
fill_in('search', with: term)
find('#search').native.send_keys(:enter)
page.within '.search-filter' do
click_link scope
end
end
def expect_search_result(scope:, term:, result:)
search(scope: scope, term: term)
expect(page).to have_content(/showing (\d+) - (\d+) of (\d+) #{Regexp.escape(scope)}/i)
expect(page).to have_content(result)
end
end end
...@@ -16,20 +16,18 @@ describe 'Snippet elastic search', :js, :elastic do ...@@ -16,20 +16,18 @@ describe 'Snippet elastic search', :js, :elastic do
create(:personal_snippet, author: user, content: 'Test searching for personal snippets') create(:personal_snippet, author: user, content: 'Test searching for personal snippets')
visit explore_snippets_path visit explore_snippets_path
fill_in 'search', with: 'Test' submit_search('Test')
find('#search').native.send_keys(:enter)
expect(page).to have_content('Test searching for personal snippets') expect(page).to have_selector('.results', text: 'Test searching for personal snippets')
end end
it 'finds a project snippet' do it 'finds a project snippet' do
create(:project_snippet, project: project, content: 'Test searching for personal snippets') create(:project_snippet, project: project, content: 'Test searching for personal snippets')
visit explore_snippets_path visit explore_snippets_path
fill_in 'search', with: 'Test' submit_search('Test')
find('#search').native.send_keys(:enter)
expect(page).to have_content('Test searching for personal snippets') expect(page).to have_selector('.results', text: 'Test searching for personal snippets')
end end
end end
end end
...@@ -13302,9 +13302,57 @@ msgstr "" ...@@ -13302,9 +13302,57 @@ msgstr ""
msgid "SearchCodeResults|of %{link_to_project}" msgid "SearchCodeResults|of %{link_to_project}"
msgstr "" msgstr ""
msgid "SearchResults|Showing %{count} %{scope} for \"%{term}\""
msgstr ""
msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\"" msgid "SearchResults|Showing %{from} - %{to} of %{count} %{scope} for \"%{term}\""
msgstr "" msgstr ""
msgid "SearchResults|comment"
msgid_plural "SearchResults|comments"
msgstr[0] ""
msgstr[1] ""
msgid "SearchResults|commit"
msgid_plural "SearchResults|commits"
msgstr[0] ""
msgstr[1] ""
msgid "SearchResults|issue"
msgid_plural "SearchResults|issues"
msgstr[0] ""
msgstr[1] ""
msgid "SearchResults|merge request"
msgid_plural "SearchResults|merge requests"
msgstr[0] ""
msgstr[1] ""
msgid "SearchResults|milestone"
msgid_plural "SearchResults|milestones"
msgstr[0] ""
msgstr[1] ""
msgid "SearchResults|project"
msgid_plural "SearchResults|projects"
msgstr[0] ""
msgstr[1] ""
msgid "SearchResults|result"
msgid_plural "SearchResults|results"
msgstr[0] ""
msgstr[1] ""
msgid "SearchResults|snippet"
msgid_plural "SearchResults|snippets"
msgstr[0] ""
msgstr[1] ""
msgid "SearchResults|user"
msgid_plural "SearchResults|users"
msgstr[0] ""
msgstr[1] ""
msgid "Seats currently in use" msgid "Seats currently in use"
msgstr "" msgstr ""
......
...@@ -16,8 +16,7 @@ describe 'Global search' do ...@@ -16,8 +16,7 @@ describe 'Global search' do
it 'increases usage ping searches counter' do it 'increases usage ping searches counter' do
expect(Gitlab::UsageDataCounters::SearchCounter).to receive(:increment_navbar_searches_count) expect(Gitlab::UsageDataCounters::SearchCounter).to receive(:increment_navbar_searches_count)
fill_in "search", with: "foobar" submit_search('foobar')
click_button "Go"
end end
describe 'I search through the issues and I see pagination' do describe 'I search through the issues and I see pagination' do
...@@ -27,10 +26,9 @@ describe 'Global search' do ...@@ -27,10 +26,9 @@ describe 'Global search' do
end end
it "has a pagination" do it "has a pagination" do
fill_in "search", with: "initial" submit_search('initial')
click_button "Go" select_search_scope('Issues')
select_filter("Issues")
expect(page).to have_selector('.gl-pagination .next') expect(page).to have_selector('.gl-pagination .next')
end end
end end
......
...@@ -18,8 +18,7 @@ describe 'Projects > Files > User searches for files' do ...@@ -18,8 +18,7 @@ describe 'Projects > Files > User searches for files' do
end end
it 'does not show any result' do it 'does not show any result' do
fill_in('search', with: 'coffee') submit_search('coffee')
click_button('Go')
expect(page).to have_content("We couldn't find any") expect(page).to have_content("We couldn't find any")
end end
...@@ -50,8 +49,7 @@ describe 'Projects > Files > User searches for files' do ...@@ -50,8 +49,7 @@ describe 'Projects > Files > User searches for files' do
it 'shows found files' do it 'shows found files' do
expect(page).to have_selector('.tree-controls .shortcuts-find-file') expect(page).to have_selector('.tree-controls .shortcuts-find-file')
fill_in('search', with: 'coffee') submit_search('coffee')
click_button('Go')
expect(page).to have_content('coffee') expect(page).to have_content('coffee')
expect(page).to have_content('CONTRIBUTING.md') expect(page).to have_content('CONTRIBUTING.md')
......
...@@ -6,21 +6,6 @@ describe 'User searches for code' do ...@@ -6,21 +6,6 @@ describe 'User searches for code' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :repository, namespace: user.namespace) } let(:project) { create(:project, :repository, namespace: user.namespace) }
def submit_search(search, with_send_keys: false)
page.within('.search') do
field = find_field('search')
field.fill_in(with: search)
if with_send_keys
field.send_keys(:enter)
else
click_button("Go")
end
end
click_link('Code')
end
context 'when signed in' do context 'when signed in' do
before do before do
project.add_maintainer(user) project.add_maintainer(user)
...@@ -31,7 +16,9 @@ describe 'User searches for code' do ...@@ -31,7 +16,9 @@ describe 'User searches for code' do
visit(project_path(project)) visit(project_path(project))
submit_search('application.js') submit_search('application.js')
select_search_scope('Code')
expect(page).to have_selector('.results', text: 'application.js')
expect(page).to have_selector('.file-content .code') expect(page).to have_selector('.file-content .code')
expect(page).to have_selector("span.line[lang='javascript']") expect(page).to have_selector("span.line[lang='javascript']")
end end
...@@ -52,9 +39,7 @@ describe 'User searches for code' do ...@@ -52,9 +39,7 @@ describe 'User searches for code' do
fill_in('dashboard_search', with: 'rspec') fill_in('dashboard_search', with: 'rspec')
find('.btn-search').click find('.btn-search').click
page.within('.results') do expect(page).to have_selector('.results', text: 'Update capybara, rspec-rails, poltergeist to recent versions')
expect(find(:css, '.search-results')).to have_content('Update capybara, rspec-rails, poltergeist to recent versions')
end
end end
it 'search mutiple words with refs switching' do it 'search mutiple words with refs switching' do
...@@ -64,16 +49,12 @@ describe 'User searches for code' do ...@@ -64,16 +49,12 @@ describe 'User searches for code' do
fill_in('dashboard_search', with: search) fill_in('dashboard_search', with: search)
find('.btn-search').click find('.btn-search').click
page.within('.results') do expect(page).to have_selector('.results', text: expected_result)
expect(find('.search-results')).to have_content(expected_result)
end
find('.js-project-refs-dropdown').click find('.js-project-refs-dropdown').click
find('.dropdown-page-one .dropdown-content').click_link('v1.0.0') find('.dropdown-page-one .dropdown-content').click_link('v1.0.0')
page.within('.results') do expect(page).to have_selector('.results', text: expected_result)
expect(find(:css, '.search-results')).to have_content(expected_result)
end
expect(find_field('dashboard_search').value).to eq(search) expect(find_field('dashboard_search').value).to eq(search)
end end
...@@ -84,7 +65,9 @@ describe 'User searches for code' do ...@@ -84,7 +65,9 @@ describe 'User searches for code' do
before do before do
visit(project_tree_path(project, ref_name)) visit(project_tree_path(project, ref_name))
submit_search('gitlab-grack', with_send_keys: true)
submit_search('gitlab-grack')
select_search_scope('Code')
end end
it 'shows ref switcher in code result summary' do it 'shows ref switcher in code result summary' do
...@@ -104,22 +87,27 @@ describe 'User searches for code' do ...@@ -104,22 +87,27 @@ describe 'User searches for code' do
end end
it 'search result changes when refs switched' do it 'search result changes when refs switched' do
expect(find('.search-results')).not_to have_content('path = gitlab-grack') expect(find('.results')).not_to have_content('path = gitlab-grack')
find('.js-project-refs-dropdown').click find('.js-project-refs-dropdown').click
find('.dropdown-page-one .dropdown-content').click_link('master') find('.dropdown-page-one .dropdown-content').click_link('master')
expect(find('.search-results')).to have_content('path = gitlab-grack')
expect(page).to have_selector('.results', text: 'path = gitlab-grack')
end end
end end
it 'no ref switcher shown in issue result summary', :js do it 'no ref switcher shown in issue result summary', :js do
issue = create(:issue, title: 'test', project: project) issue = create(:issue, title: 'test', project: project)
visit(project_tree_path(project)) visit(project_tree_path(project))
submit_search('test', with_send_keys: true)
submit_search('test')
select_search_scope('Code')
expect(page).to have_selector('.js-project-refs-dropdown') expect(page).to have_selector('.js-project-refs-dropdown')
page.within('.search-filter') do
click_link('Issues') select_search_scope('Issues')
end
expect(find(:css, '.search-results')).to have_link(issue.title) expect(find(:css, '.results')).to have_link(issue.title)
expect(page).not_to have_selector('.js-project-refs-dropdown') expect(page).not_to have_selector('.js-project-refs-dropdown')
end end
end end
...@@ -133,10 +121,9 @@ describe 'User searches for code' do ...@@ -133,10 +121,9 @@ describe 'User searches for code' do
it 'finds code' do it 'finds code' do
submit_search('rspec') submit_search('rspec')
select_search_scope('Code')
page.within('.results') do expect(page).to have_selector('.results', text: 'Update capybara, rspec-rails, poltergeist to recent versions')
expect(find(:css, '.search-results')).to have_content('Update capybara, rspec-rails, poltergeist to recent versions')
end
end end
end end
end end
...@@ -18,15 +18,13 @@ describe 'User searches for comments' do ...@@ -18,15 +18,13 @@ describe 'User searches for comments' do
let(:comment) { create(:note_on_commit, author: user, project: project, commit_id: 12345678, note: 'Bug here') } let(:comment) { create(:note_on_commit, author: user, project: project, commit_id: 12345678, note: 'Bug here') }
it 'finds a commit' do it 'finds a commit' do
page.within('.search') do submit_search(comment.note)
fill_in('search', with: comment.note) select_search_scope('Comments')
click_button('Go')
end
click_link('Comments')
expect(page).to have_text('Commit deleted') page.within('.results') do
expect(page).to have_text('12345678') expect(page).to have_content('Commit deleted')
expect(page).to have_content('12345678')
end
end end
end end
end end
...@@ -36,14 +34,10 @@ describe 'User searches for comments' do ...@@ -36,14 +34,10 @@ describe 'User searches for comments' do
let(:comment) { create(:note, noteable: snippet, author: user, note: 'Supercalifragilisticexpialidocious', project: project) } let(:comment) { create(:note, noteable: snippet, author: user, note: 'Supercalifragilisticexpialidocious', project: project) }
it 'finds a snippet' do it 'finds a snippet' do
page.within('.search') do submit_search(comment.note)
fill_in('search', with: comment.note) select_search_scope('Comments')
click_button('Go')
end
click_link('Comments')
expect(page).to have_link(snippet.title) expect(page).to have_selector('.results', text: snippet.title)
end end
end end
end end
...@@ -16,15 +16,13 @@ describe 'User searches for commits' do ...@@ -16,15 +16,13 @@ describe 'User searches for commits' do
context 'when searching by SHA' do context 'when searching by SHA' do
it 'finds a commit and redirects to its page' do it 'finds a commit and redirects to its page' do
fill_in('search', with: sha) submit_search(sha)
click_button('Search')
expect(page).to have_current_path(project_commit_path(project, sha)) expect(page).to have_current_path(project_commit_path(project, sha))
end end
it 'finds a commit in uppercase and redirects to its page' do it 'finds a commit in uppercase and redirects to its page' do
fill_in('search', with: sha.upcase) submit_search(sha.upcase)
click_button('Search')
expect(page).to have_current_path(project_commit_path(project, sha)) expect(page).to have_current_path(project_commit_path(project, sha))
end end
...@@ -34,16 +32,14 @@ describe 'User searches for commits' do ...@@ -34,16 +32,14 @@ describe 'User searches for commits' do
it 'finds a commit and holds on /search page' do it 'finds a commit and holds on /search page' do
create_commit('Message referencing another sha: "deadbeef"', project, user, 'master') create_commit('Message referencing another sha: "deadbeef"', project, user, 'master')
fill_in('search', with: 'deadbeef') submit_search('deadbeef')
click_button('Search')
expect(page).to have_current_path('/search', ignore_query: true) expect(page).to have_current_path('/search', ignore_query: true)
end end
it 'finds multiple commits' do it 'finds multiple commits' do
fill_in('search', with: 'See merge request') submit_search('See merge request')
click_button('Search') select_search_scope('Commits')
click_link('Commits')
expect(page).to have_selector('.commit-row-description', count: 9) expect(page).to have_selector('.commit-row-description', count: 9)
end end
......
...@@ -21,13 +21,11 @@ describe 'User searches for issues', :js do ...@@ -21,13 +21,11 @@ describe 'User searches for issues', :js do
it 'finds an issue' do it 'finds an issue' do
fill_in('dashboard_search', with: issue1.title) fill_in('dashboard_search', with: issue1.title)
find('.btn-search').click find('.btn-search').click
select_search_scope('Issues')
page.within('.search-filter') do
click_link('Issues')
end
page.within('.results') do page.within('.results') do
expect(find(:css, '.search-results')).to have_link(issue1.title).and have_no_link(issue2.title) expect(page).to have_link(issue1.title)
expect(page).not_to have_link(issue2.title)
end end
end end
...@@ -41,13 +39,11 @@ describe 'User searches for issues', :js do ...@@ -41,13 +39,11 @@ describe 'User searches for issues', :js do
fill_in('dashboard_search', with: issue1.title) fill_in('dashboard_search', with: issue1.title)
find('.btn-search').click find('.btn-search').click
select_search_scope('Issues')
page.within('.search-filter') do
click_link('Issues')
end
page.within('.results') do page.within('.results') do
expect(find(:css, '.search-results')).to have_link(issue1.title).and have_no_link(issue2.title) expect(page).to have_link(issue1.title)
expect(page).not_to have_link(issue2.title)
end end
end end
end end
...@@ -65,13 +61,11 @@ describe 'User searches for issues', :js do ...@@ -65,13 +61,11 @@ describe 'User searches for issues', :js do
it 'finds an issue' do it 'finds an issue' do
fill_in('dashboard_search', with: issue1.title) fill_in('dashboard_search', with: issue1.title)
find('.btn-search').click find('.btn-search').click
select_search_scope('Issues')
page.within('.search-filter') do
click_link('Issues')
end
page.within('.results') do page.within('.results') do
expect(find(:css, '.search-results')).to have_link(issue1.title).and have_no_link(issue2.title) expect(page).to have_link(issue1.title)
expect(page).not_to have_link(issue2.title)
end end
end end
end end
......
...@@ -20,13 +20,11 @@ describe 'User searches for merge requests', :js do ...@@ -20,13 +20,11 @@ describe 'User searches for merge requests', :js do
it 'finds a merge request' do it 'finds a merge request' do
fill_in('dashboard_search', with: merge_request1.title) fill_in('dashboard_search', with: merge_request1.title)
find('.btn-search').click find('.btn-search').click
select_search_scope('Merge requests')
page.within('.search-filter') do
click_link('Merge requests')
end
page.within('.results') do page.within('.results') do
expect(find(:css, '.search-results')).to have_link(merge_request1.title).and have_no_link(merge_request2.title) expect(page).to have_link(merge_request1.title)
expect(page).not_to have_link(merge_request2.title)
end end
end end
...@@ -40,13 +38,11 @@ describe 'User searches for merge requests', :js do ...@@ -40,13 +38,11 @@ describe 'User searches for merge requests', :js do
fill_in('dashboard_search', with: merge_request1.title) fill_in('dashboard_search', with: merge_request1.title)
find('.btn-search').click find('.btn-search').click
select_search_scope('Merge requests')
page.within('.search-filter') do
click_link('Merge requests')
end
page.within('.results') do page.within('.results') do
expect(find(:css, '.search-results')).to have_link(merge_request1.title).and have_no_link(merge_request2.title) expect(page).to have_link(merge_request1.title)
expect(page).not_to have_link(merge_request2.title)
end end
end end
end end
......
...@@ -20,13 +20,11 @@ describe 'User searches for milestones', :js do ...@@ -20,13 +20,11 @@ describe 'User searches for milestones', :js do
it 'finds a milestone' do it 'finds a milestone' do
fill_in('dashboard_search', with: milestone1.title) fill_in('dashboard_search', with: milestone1.title)
find('.btn-search').click find('.btn-search').click
select_search_scope('Milestones')
page.within('.search-filter') do
click_link('Milestones')
end
page.within('.results') do page.within('.results') do
expect(find(:css, '.search-results')).to have_link(milestone1.title).and have_no_link(milestone2.title) expect(page).to have_link(milestone1.title)
expect(page).not_to have_link(milestone2.title)
end end
end end
...@@ -40,13 +38,11 @@ describe 'User searches for milestones', :js do ...@@ -40,13 +38,11 @@ describe 'User searches for milestones', :js do
fill_in('dashboard_search', with: milestone1.title) fill_in('dashboard_search', with: milestone1.title)
find('.btn-search').click find('.btn-search').click
select_search_scope('Milestones')
page.within('.search-filter') do
click_link('Milestones')
end
page.within('.results') do page.within('.results') do
expect(find(:css, '.search-results')).to have_link(milestone1.title).and have_no_link(milestone2.title) expect(page).to have_link(milestone1.title)
expect(page).not_to have_link(milestone2.title)
end end
end end
end end
......
...@@ -20,8 +20,7 @@ describe 'User searches for projects' do ...@@ -20,8 +20,7 @@ describe 'User searches for projects' do
it 'preserves the group being searched in' do it 'preserves the group being searched in' do
visit(search_path(group_id: project.namespace.id)) visit(search_path(group_id: project.namespace.id))
fill_in('search', with: 'foo') submit_search('foo')
click_button('Search')
expect(find('#group_id', visible: false).value).to eq(project.namespace.id.to_s) expect(find('#group_id', visible: false).value).to eq(project.namespace.id.to_s)
end end
...@@ -29,8 +28,7 @@ describe 'User searches for projects' do ...@@ -29,8 +28,7 @@ describe 'User searches for projects' do
it 'preserves the project being searched in' do it 'preserves the project being searched in' do
visit(search_path(project_id: project.id)) visit(search_path(project_id: project.id))
fill_in('search', with: 'foo') submit_search('foo')
click_button('Search')
expect(find('#project_id', visible: false).value).to eq(project.id.to_s) expect(find('#project_id', visible: false).value).to eq(project.id.to_s)
end end
......
...@@ -3,83 +3,81 @@ ...@@ -3,83 +3,81 @@
require 'spec_helper' require 'spec_helper'
describe 'User searches for users' do describe 'User searches for users' do
context 'when on the dashboard' do let(:user1) { create(:user, username: 'gob_bluth', name: 'Gob Bluth') }
it 'finds the user', :js do let(:user2) { create(:user, username: 'michael_bluth', name: 'Michael Bluth') }
create(:user, username: 'gob_bluth', name: 'Gob Bluth') let(:user3) { create(:user, username: 'gob_2018', name: 'George Oscar Bluth') }
sign_in(create(:user)) before do
sign_in(user1)
end
context 'when on the dashboard' do
it 'finds the user', :js do
visit dashboard_projects_path visit dashboard_projects_path
fill_in 'search', with: 'gob' submit_search('gob')
find('#search').send_keys(:enter) select_search_scope('Users')
expect(page).to have_content('Users 1') page.within('.results') do
expect(page).to have_content('Gob Bluth')
click_on('Users 1') expect(page).to have_content('@gob_bluth')
end
expect(page).to have_content('Gob Bluth')
expect(page).to have_content('@gob_bluth')
end end
end end
context 'when on the project page' do context 'when on the project page' do
it 'finds the user belonging to the project' do let(:project) { create(:project) }
project = create(:project)
user1 = create(:user, username: 'gob_bluth', name: 'Gob Bluth') before do
create(:project_member, :developer, user: user1, project: project) create(:project_member, :developer, user: user1, project: project)
user2 = create(:user, username: 'michael_bluth', name: 'Michael Bluth')
create(:project_member, :developer, user: user2, project: project) create(:project_member, :developer, user: user2, project: project)
user3
end
create(:user, username: 'gob_2018', name: 'George Oscar Bluth') it 'finds the user belonging to the project' do
visit project_path(project)
sign_in(user1)
visit projects_path(project)
fill_in 'search', with: 'gob' submit_search('gob')
click_button 'Go' select_search_scope('Users')
expect(page).to have_content('Gob Bluth') page.within('.results') do
expect(page).to have_content('@gob_bluth') expect(page).to have_content('Gob Bluth')
expect(page).to have_content('@gob_bluth')
expect(page).not_to have_content('Michael Bluth') expect(page).not_to have_content('Michael Bluth')
expect(page).not_to have_content('@michael_bluth') expect(page).not_to have_content('@michael_bluth')
expect(page).not_to have_content('George Oscar Bluth') expect(page).not_to have_content('George Oscar Bluth')
expect(page).not_to have_content('@gob_2018') expect(page).not_to have_content('@gob_2018')
end
end end
end end
context 'when on the group page' do context 'when on the group page' do
it 'finds the user belonging to the group' do let(:group) { create(:group) }
group = create(:group)
user1 = create(:user, username: 'gob_bluth', name: 'Gob Bluth') before do
create(:group_member, :developer, user: user1, group: group) create(:group_member, :developer, user: user1, group: group)
user2 = create(:user, username: 'michael_bluth', name: 'Michael Bluth')
create(:group_member, :developer, user: user2, group: group) create(:group_member, :developer, user: user2, group: group)
user3
end
create(:user, username: 'gob_2018', name: 'George Oscar Bluth') it 'finds the user belonging to the group' do
sign_in(user1)
visit group_path(group) visit group_path(group)
fill_in 'search', with: 'gob' submit_search('gob')
click_button 'Go' select_search_scope('Users')
expect(page).to have_content('Gob Bluth') page.within('.results') do
expect(page).to have_content('@gob_bluth') expect(page).to have_content('Gob Bluth')
expect(page).to have_content('@gob_bluth')
expect(page).not_to have_content('Michael Bluth') expect(page).not_to have_content('Michael Bluth')
expect(page).not_to have_content('@michael_bluth') expect(page).not_to have_content('@michael_bluth')
expect(page).not_to have_content('George Oscar Bluth') expect(page).not_to have_content('George Oscar Bluth')
expect(page).not_to have_content('@gob_2018') expect(page).not_to have_content('@gob_2018')
end
end end
end end
end end
...@@ -26,13 +26,10 @@ describe 'User searches for wiki pages', :js do ...@@ -26,13 +26,10 @@ describe 'User searches for wiki pages', :js do
fill_in('dashboard_search', with: search_term) fill_in('dashboard_search', with: search_term)
find('.btn-search').click find('.btn-search').click
select_search_scope('Wiki')
page.within('.search-filter') do
click_link('Wiki')
end
page.within('.results') do page.within('.results') do
expect(find(:css, '.search-results')).to have_link(wiki_page.title, href: project_wiki_path(project, wiki_page.slug)) expect(page).to have_link(wiki_page.title, href: project_wiki_path(project, wiki_page.slug))
end end
end end
end end
......
...@@ -19,8 +19,7 @@ describe 'User uses header search field', :js do ...@@ -19,8 +19,7 @@ describe 'User uses header search field', :js do
end end
it 'starts searching by pressing the enter key' do it 'starts searching by pressing the enter key' do
fill_in('search', with: 'gitlab') submit_search('gitlab')
find('#search').native.send_keys(:enter)
page.within('.page-title') do page.within('.page-title') do
expect(page).to have_content('Search') expect(page).to have_content('Search')
...@@ -101,8 +100,7 @@ describe 'User uses header search field', :js do ...@@ -101,8 +100,7 @@ describe 'User uses header search field', :js do
before do before do
create(:issue, project: project, title: 'project issue') create(:issue, project: project, title: 'project issue')
fill_in('search', with: 'project') submit_search('project')
find('#search').send_keys(:enter)
end end
it 'displays result counts for all categories' do it 'displays result counts for all categories' do
......
...@@ -10,12 +10,8 @@ describe 'Search Snippets' do ...@@ -10,12 +10,8 @@ describe 'Search Snippets' do
sign_in private_snippet.author sign_in private_snippet.author
visit dashboard_snippets_path visit dashboard_snippets_path
page.within '.search' do submit_search('Middle')
fill_in 'search', with: 'Middle' select_search_scope('Titles and Filenames')
click_button 'Go'
end
click_link 'Titles and Filenames'
expect(page).to have_link(public_snippet.title) expect(page).to have_link(public_snippet.title)
expect(page).to have_link(private_snippet.title) expect(page).to have_link(private_snippet.title)
...@@ -45,11 +41,7 @@ describe 'Search Snippets' do ...@@ -45,11 +41,7 @@ describe 'Search Snippets' do
sign_in create(:user) sign_in create(:user)
visit dashboard_snippets_path visit dashboard_snippets_path
submit_search('line seven')
page.within '.search' do
fill_in 'search', with: 'line seven'
click_button 'Go'
end
expect(page).to have_content('line seven') expect(page).to have_content('line seven')
......
...@@ -6,7 +6,7 @@ describe SearchHelper do ...@@ -6,7 +6,7 @@ describe SearchHelper do
str str
end end
describe 'search_autocomplete_source' do describe 'search_autocomplete_opts' do
context "with no current user" do context "with no current user" do
before do before do
allow(self).to receive(:current_user).and_return(nil) allow(self).to receive(:current_user).and_return(nil)
...@@ -99,6 +99,47 @@ describe SearchHelper do ...@@ -99,6 +99,47 @@ describe SearchHelper do
end end
end end
describe 'search_entries_info' do
using RSpec::Parameterized::TableSyntax
where(:scope, :label) do
'commits' | 'commit'
'issues' | 'issue'
'merge_requests' | 'merge request'
'milestones' | 'milestone'
'projects' | 'project'
'snippet_titles' | 'snippet'
'users' | 'user'
'blobs' | 'result'
'snippet_blobs' | 'result'
'wiki_blobs' | 'result'
'notes' | 'comment'
end
with_them do
it 'uses the correct singular label' do
collection = Kaminari.paginate_array([:foo]).page(1).per(10)
expect(search_entries_info(collection, scope, 'foo')).to eq("Showing 1 #{label} for \"foo\"")
end
it 'uses the correct plural label' do
collection = Kaminari.paginate_array([:foo] * 23).page(1).per(10)
expect(search_entries_info(collection, scope, 'foo')).to eq("Showing 1 - 10 of 23 #{label.pluralize} for \"foo\"")
end
end
it 'raises an error for unrecognized scopes' do
expect do
collection = Kaminari.paginate_array([:foo]).page(1).per(10)
search_entries_info(collection, 'unknown', 'foo')
end.to raise_error(RuntimeError)
end
end
describe 'search_filter_input_options' do describe 'search_filter_input_options' do
context 'project' do context 'project' do
before do before do
......
...@@ -42,4 +42,8 @@ module CapybaraHelpers ...@@ -42,4 +42,8 @@ module CapybaraHelpers
def clear_browser_session def clear_browser_session
page.driver.browser.manage.delete_cookie('_gitlab_session') page.driver.browser.manage.delete_cookie('_gitlab_session')
end end
def javascript_test?
Capybara.current_driver == Capybara.javascript_driver
end
end end
# frozen_string_literal: true # frozen_string_literal: true
module SearchHelpers module SearchHelpers
def select_filter(name) def submit_search(query, scope: nil)
find(:xpath, "//ul[contains(@class, 'search-filter')]//a[contains(.,'#{name}')]").click page.within('.search-form, .search-page-form') do
field = find_field('search')
field.fill_in(with: query)
if javascript_test?
field.send_keys(:enter)
else
click_button('Search')
end
end
end
def select_search_scope(scope)
page.within '.search-filter' do
click_link scope
end
end end
end end
...@@ -61,8 +61,4 @@ module WaitForRequests ...@@ -61,8 +61,4 @@ module WaitForRequests
Capybara.page.evaluate_script('jQuery.active').zero? Capybara.page.evaluate_script('jQuery.active').zero?
end end
def javascript_test?
Capybara.current_driver == Capybara.javascript_driver
end
end end
# frozen_string_literal: true
require 'spec_helper'
describe 'search/_results' do
before do
controller.params[:action] = 'show'
3.times { create(:issue) }
@search_objects = Issue.page(1).per(2)
@scope = 'issues'
@search_term = 'foo'
end
it 'displays the page size' do
render
expect(rendered).to have_content('Showing 1 - 2 of 3 issues for "foo"')
end
context 'when search results do not have a count' do
before do
@search_objects = @search_objects.without_count
end
it 'does not display the page size' do
render
expect(rendered).not_to have_content(/Showing .* of .*/)
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment