gitlab-org--gitlab-foss/spec/javascripts/search_autocomplete_spec.js...

130 lines
3.7 KiB
CoffeeScript
Raw Normal View History

#= 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