summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFatih Acet <acetfatih@gmail.com>2016-06-07 17:54:29 +0300
committerFatih Acet <acetfatih@gmail.com>2016-06-07 17:54:29 +0300
commit50b3b8ce80b3573f53c22ac5ff34391b5bc469d8 (patch)
tree7e5d1f99ccbdaddc0f0464875d301a731950f960
parent36f67b305f37cdf4eb9f75f12cfde3b0dfc01183 (diff)
downloadgitlab-ce-50b3b8ce80b3573f53c22ac5ff34391b5bc469d8.tar.gz
Added tests for categorised search autocomplete.
-rw-r--r--app/assets/javascripts/search_autocomplete.js.coffee2
-rw-r--r--spec/features/search_spec.rb79
-rw-r--r--spec/javascripts/fixtures/search_autocomplete.html.haml10
-rw-r--r--spec/javascripts/notes_spec.js.coffee2
-rw-r--r--spec/javascripts/project_title_spec.js.coffee2
-rw-r--r--spec/javascripts/search_autocomplete_spec.js.coffee129
6 files changed, 221 insertions, 3 deletions
diff --git a/app/assets/javascripts/search_autocomplete.js.coffee b/app/assets/javascripts/search_autocomplete.js.coffee
index 943dba9bcba..8493d2684d9 100644
--- a/app/assets/javascripts/search_autocomplete.js.coffee
+++ b/app/assets/javascripts/search_autocomplete.js.coffee
@@ -134,7 +134,7 @@ class @SearchAutocomplete
userId = gon.current_user_id
projectName = 'Dashboard'
projectSlug = gl.utils.getProjectSlug()
- projectOptions = gl.projectOptions[projectSlug]
+ projectOptions = gl.projectOptions?[projectSlug]
if projectSlug and projectOptions
{ issuesPath, mrPath, projectName } = projectOptions
diff --git a/spec/features/search_spec.rb b/spec/features/search_spec.rb
index 029a11ea43c..4f4d4b1e3e9 100644
--- a/spec/features/search_spec.rb
+++ b/spec/features/search_spec.rb
@@ -47,4 +47,83 @@ describe "Search", feature: true do
expect(page).to have_link(snippet.title)
end
end
+
+
+ describe 'Right header search field', feature: true do
+
+ describe 'Search in project page' do
+ before do
+ visit namespace_project_path(project.namespace, project)
+ end
+
+ it 'top right search form is present' do
+ expect(page).to have_selector('#search')
+ end
+
+ it 'top right search form contains location badge' do
+ expect(page).to have_selector('.has-location-badge')
+ end
+
+ context 'clicking the search field', js: true do
+ it 'should show category search dropdown' do
+ page.find('#search').click
+
+ expect(page).to have_selector('.dropdown-header', text: /go to in #{project.name}/i)
+ end
+ end
+
+ context 'click the links in the category search dropdown', js: true do
+
+ before do
+ page.find('#search').click
+ end
+
+ it 'should take user to her issues page when issues assigned is clicked' do
+ find('.dropdown-menu').click_link 'Issues assigned to me'
+ sleep 2
+
+ expect(page).to have_selector('.issues-holder')
+ expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
+ end
+
+ it 'should take user to her issues page when issues authored is clicked' do
+ find('.dropdown-menu').click_link "Issues I've created"
+ sleep 2
+
+ expect(page).to have_selector('.issues-holder')
+ expect(find('.js-author-search .dropdown-toggle-text')).to have_content(user.name)
+ end
+
+ it 'should take user to her MR page when MR assigned is clicked' do
+ find('.dropdown-menu').click_link 'Merge requests assigned to me'
+ sleep 2
+
+ expect(page).to have_selector('.merge-requests-holder')
+ expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
+ end
+
+ it 'should take user to her MR page when MR authored is clicked' do
+ find('.dropdown-menu').click_link "Merge requests I've created"
+ sleep 2
+
+ expect(page).to have_selector('.merge-requests-holder')
+ expect(find('.js-author-search .dropdown-toggle-text')).to have_content(user.name)
+ end
+ end
+
+ context 'entering text into the search field', js: true do
+ before do
+ page.within '.search-input-wrap' do
+ fill_in "search", with: project.name[0..3]
+ end
+ end
+
+ it 'should not display the category search dropdown' do
+ expect(page).not_to have_selector('.dropdown-header', text: /go to in #{project.name}/i)
+ end
+ end
+ end
+ end
+
+
end
diff --git a/spec/javascripts/fixtures/search_autocomplete.html.haml b/spec/javascripts/fixtures/search_autocomplete.html.haml
new file mode 100644
index 00000000000..7785120da5b
--- /dev/null
+++ b/spec/javascripts/fixtures/search_autocomplete.html.haml
@@ -0,0 +1,10 @@
+.search.search-form.has-location-badge
+ %form.navbar-form
+ .search-input-container
+ %div.location-badge
+ This project
+ .search-input-wrap
+ .dropdown
+ %input#search.search-input.dropdown-menu-toggle
+ .dropdown-menu.dropdown-select
+ .dropdown-content
diff --git a/spec/javascripts/notes_spec.js.coffee b/spec/javascripts/notes_spec.js.coffee
index dd160e821b3..3a3c8d63e82 100644
--- a/spec/javascripts/notes_spec.js.coffee
+++ b/spec/javascripts/notes_spec.js.coffee
@@ -1,7 +1,7 @@
#= require notes
#= require gl_form
-window.gon = {}
+window.gon or= {}
window.disableButtonIfEmptyField = -> null
describe 'Notes', ->
diff --git a/spec/javascripts/project_title_spec.js.coffee b/spec/javascripts/project_title_spec.js.coffee
index 1cf34d4d2d3..9be29097f4c 100644
--- a/spec/javascripts/project_title_spec.js.coffee
+++ b/spec/javascripts/project_title_spec.js.coffee
@@ -6,7 +6,7 @@
#= require project_select
#= require project
-window.gon = {}
+window.gon or= {}
window.gon.api_version = 'v3'
describe 'Project Title', ->
diff --git a/spec/javascripts/search_autocomplete_spec.js.coffee b/spec/javascripts/search_autocomplete_spec.js.coffee
new file mode 100644
index 00000000000..5212f5d223a
--- /dev/null
+++ b/spec/javascripts/search_autocomplete_spec.js.coffee
@@ -0,0 +1,129 @@
+#= require gl_dropdown
+#= require search_autocomplete
+#= require jquery
+#= require lib/common_utils
+#= require lib/type_utility
+#= require fuzzaldrin-plus
+
+
+widget = null
+userId = 1
+window.gon or= {}
+window.gon.current_user_id = userId
+
+dashboardIssuesPath = '/dashboard/issues'
+dashboardMRsPath = '/dashboard/merge_requests'
+projectIssuesPath = "/gitlab-org/gitlab-ce/issues"
+projectMRsPath = "/gitlab-org/gitlab-ce/merge_requests"
+projectName = 'GitLab Community Edition'
+
+# Add required attributes to body before starting the test.
+addBodyAttributes = (page = 'groups') ->
+
+ $('body').removeAttr 'data-page'
+ $('body').removeAttr 'data-project'
+
+ $('body').data 'page', "#{page}:show"
+ $('body').data 'project', 'gitlab-ce'
+
+
+# Mock `gl` object in window for dashboard specific page. App code will need it.
+mockDashboardOptions = ->
+
+ window.gl or= {}
+ window.gl.dashboardOptions =
+ issuesPath: dashboardIssuesPath
+ mrPath : dashboardMRsPath
+
+
+# Mock `gl` object in window for project specific page. App code will need it.
+mockProjectOptions = ->
+
+ window.gl or= {}
+ window.gl.projectOptions =
+ 'gitlab-ce' :
+ issuesPath : projectIssuesPath
+ mrPath : projectMRsPath
+ projectName : projectName
+
+
+assertLinks = (list, a1, a2, a3, a4) ->
+
+ expect(list.find(a1).length).toBe 1
+ expect(list.find(a1).text()).toBe ' Issues assigned to me '
+
+ expect(list.find(a2).length).toBe 1
+ expect(list.find(a2).text()).toBe " Issues I've created "
+
+ expect(list.find(a3).length).toBe 1
+ expect(list.find(a3).text()).toBe ' Merge requests assigned to me '
+
+ expect(list.find(a4).length).toBe 1
+ expect(list.find(a4).text()).toBe " Merge requests I've created "
+
+
+
+describe 'Search autocomplete dropdown', ->
+
+ fixture.preload 'search_autocomplete.html'
+
+ beforeEach ->
+
+ fixture.load 'search_autocomplete.html'
+ widget = new SearchAutocomplete
+
+
+ it 'should show Dashboard specific dropdown menu', ->
+
+ addBodyAttributes()
+ mockDashboardOptions()
+
+ # Focus input to show dropdown list.
+ widget.searchInput.focus()
+
+ w = widget.wrap.find '.dropdown-menu'
+ l = w.find 'ul'
+
+ # # Expect dropdown and dropdown header
+ expect(w.find('.dropdown-header').text()).toBe 'Go to in Dashboard'
+
+ # Create links then assert link urls and inner texts
+ issuesAssignedToMeLink = "#{dashboardIssuesPath}/?assignee_id=#{userId}"
+ issuesIHaveCreatedLink = "#{dashboardIssuesPath}/?author_id=#{userId}"
+ mrsAssignedToMeLink = "#{dashboardMRsPath}/?assignee_id=#{userId}"
+ mrsIHaveCreatedLink = "#{dashboardMRsPath}/?author_id=#{userId}"
+
+ a1 = "a[href='#{issuesAssignedToMeLink}']"
+ a2 = "a[href='#{issuesIHaveCreatedLink}']"
+ a3 = "a[href='#{mrsAssignedToMeLink}']"
+ a4 = "a[href='#{mrsIHaveCreatedLink}']"
+
+ assertLinks l, a1, a2, a3, a4
+
+
+ it 'should show Project specific dropdown menu', ->
+
+ addBodyAttributes 'projects'
+ mockProjectOptions()
+
+ # Focus input to show dropdown list.
+ widget.searchInput.focus()
+
+ w = widget.wrap.find '.dropdown-menu'
+ l = w.find 'ul'
+
+ # Expect dropdown and dropdown header
+ expect(w.find('.dropdown-header').text()).toBe "Go to in #{projectName}"
+
+ # Create links then verify link urls and inner texts
+ issuesAssignedToMeLink = "#{projectIssuesPath}/?assignee_id=#{userId}"
+ issuesIHaveCreatedLink = "#{projectIssuesPath}/?author_id=#{userId}"
+ mrsAssignedToMeLink = "#{projectMRsPath}/?assignee_id=#{userId}"
+ mrsIHaveCreatedLink = "#{projectMRsPath}/?author_id=#{userId}"
+
+ a1 = "a[href='#{issuesAssignedToMeLink}']"
+ a2 = "a[href='#{issuesIHaveCreatedLink}']"
+ a3 = "a[href='#{mrsAssignedToMeLink}']"
+ a4 = "a[href='#{mrsIHaveCreatedLink}']"
+
+ assertLinks l, a1, a2, a3, a4