Added tests for categorised search autocomplete.
This commit is contained in:
parent
36f67b305f
commit
50b3b8ce80
|
@ -134,7 +134,7 @@ class @SearchAutocomplete
|
||||||
userId = gon.current_user_id
|
userId = gon.current_user_id
|
||||||
projectName = 'Dashboard'
|
projectName = 'Dashboard'
|
||||||
projectSlug = gl.utils.getProjectSlug()
|
projectSlug = gl.utils.getProjectSlug()
|
||||||
projectOptions = gl.projectOptions[projectSlug]
|
projectOptions = gl.projectOptions?[projectSlug]
|
||||||
|
|
||||||
if projectSlug and projectOptions
|
if projectSlug and projectOptions
|
||||||
{ issuesPath, mrPath, projectName } = projectOptions
|
{ issuesPath, mrPath, projectName } = projectOptions
|
||||||
|
|
|
@ -47,4 +47,83 @@ describe "Search", feature: true do
|
||||||
expect(page).to have_link(snippet.title)
|
expect(page).to have_link(snippet.title)
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
@ -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
|
|
@ -1,7 +1,7 @@
|
||||||
#= require notes
|
#= require notes
|
||||||
#= require gl_form
|
#= require gl_form
|
||||||
|
|
||||||
window.gon = {}
|
window.gon or= {}
|
||||||
window.disableButtonIfEmptyField = -> null
|
window.disableButtonIfEmptyField = -> null
|
||||||
|
|
||||||
describe 'Notes', ->
|
describe 'Notes', ->
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#= require project_select
|
#= require project_select
|
||||||
#= require project
|
#= require project
|
||||||
|
|
||||||
window.gon = {}
|
window.gon or= {}
|
||||||
window.gon.api_version = 'v3'
|
window.gon.api_version = 'v3'
|
||||||
|
|
||||||
describe 'Project Title', ->
|
describe 'Project Title', ->
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue