Commit 755cd6b9 authored by Jacob Schatz's avatar Jacob Schatz

Merge branch 'fix-bulk-assign-labels-init' into 'master'

Fixes bulk-assign labels not working when navigating through pages

## What does this MR do?
This MR fixes an issue on bulk-assign labels not working when navigating though pages. The functionality was not working because events on checkboxes weren't working. This re-runs `Issuable.initChecks()` and makes sure we are not leaving zombie event handlers by turning them off first.

Also fixes tests to use `wait_for_ajax` since label filtering is now using `Turbolinks` for redirection.

## Does this MR meet the acceptance criteria?

- [ ] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added
- [ ] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md)
- [ ] API support added
- [ ] Tests
  - [ ] Added for this feature/bug
  - [x] All builds are passing
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [x] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)

See merge request !4632
parents 400b4159 363fa597
...@@ -56,13 +56,6 @@ issuable_created = false ...@@ -56,13 +56,6 @@ issuable_created = false
Issuable.filterResults $('.filter-form') Issuable.filterResults $('.filter-form')
$('.js-label-select').trigger('update.label') $('.js-label-select').trigger('update.label')
toggleLabelFilters: ->
$filteredLabels = $('.filtered-labels')
if $filteredLabels.find('.label-row').length > 0
$filteredLabels.removeClass('hidden')
else
$filteredLabels.addClass('hidden')
filterResults: (form) => filterResults: (form) =>
formData = form.serialize() formData = form.serialize()
...@@ -71,58 +64,16 @@ issuable_created = false ...@@ -71,58 +64,16 @@ issuable_created = false
issuesUrl = formAction issuesUrl = formAction
issuesUrl += ("#{if formAction.indexOf('?') < 0 then '?' else '&'}") issuesUrl += ("#{if formAction.indexOf('?') < 0 then '?' else '&'}")
issuesUrl += formData issuesUrl += formData
$.ajax
type: 'GET'
url: formAction
data: formData
complete: ->
$('.issues-holder, .merge-requests-holder').css('opacity', '1.0')
success: (data) ->
$('.issues-holder, .merge-requests-holder').html(data.html)
# Change url so if user reload a page - search results are saved
history.replaceState {page: issuesUrl}, document.title, issuesUrl
Issuable.reload()
Issuable.updateStateFilters()
$filteredLabels = $('.filtered-labels')
if typeof Issuable.labelRow is 'function'
$filteredLabels.html(Issuable.labelRow(data))
Issuable.toggleLabelFilters()
dataType: "json"
reload: ->
if Issuable.created
Issuable.initChecks()
$('#filter_issue_search').val($('#issue_search').val()) Turbolinks.visit(issuesUrl);
initChecks: -> initChecks: ->
$('.check_all_issues').on 'click', -> $('.check_all_issues').off('click').on('click', ->
$('.selected_issue').prop('checked', @checked) $('.selected_issue').prop('checked', @checked)
Issuable.checkChanged() Issuable.checkChanged()
)
$('.selected_issue').on 'change', Issuable.checkChanged $('.selected_issue').off('change').on('change', Issuable.checkChanged)
updateStateFilters: ->
stateFilters = $('.issues-state-filters, .dropdown-menu-sort')
newParams = {}
paramKeys = ['author_id', 'milestone_title', 'assignee_id', 'issue_search', 'issue_search']
for paramKey in paramKeys
newParams[paramKey] = gl.utils.getParameterValues(paramKey)[0] or ''
if stateFilters.length
stateFilters.find('a').each ->
initialUrl = gl.utils.removeParamQueryString($(this).attr('href'), 'label_name[]')
labelNameValues = gl.utils.getParameterValues('label_name[]')
if labelNameValues
labelNameQueryString = ("label_name[]=#{value}" for value in labelNameValues).join('&')
newUrl = "#{gl.utils.mergeUrlParams(newParams, initialUrl)}&#{labelNameQueryString}"
else
newUrl = gl.utils.mergeUrlParams(newParams, initialUrl)
$(this).attr 'href', newUrl
checkChanged: -> checkChanged: ->
checked_issues = $('.selected_issue:checked') checked_issues = $('.selected_issue:checked')
......
...@@ -9,6 +9,9 @@ class @IssuableBulkActions ...@@ -9,6 +9,9 @@ class @IssuableBulkActions
@bindEvents() @bindEvents()
# Fixes bulk-assign not working when navigating through pages
Issuable.initChecks();
getElement: (selector) -> getElement: (selector) ->
@container.find selector @container.find selector
......
...@@ -56,8 +56,9 @@ feature 'Issue filtering by Labels', feature: true do ...@@ -56,8 +56,9 @@ feature 'Issue filtering by Labels', feature: true do
end end
it 'should remove label "bug"' do it 'should remove label "bug"' do
first('.js-label-filter-remove').click find('.js-label-filter-remove').click
expect(find('.filtered-labels')).to have_no_content "bug" wait_for_ajax
expect(find('.filtered-labels', visible: false)).to have_no_content "bug"
end end
end end
...@@ -142,7 +143,8 @@ feature 'Issue filtering by Labels', feature: true do ...@@ -142,7 +143,8 @@ feature 'Issue filtering by Labels', feature: true do
end end
it 'should remove label "enhancement"' do it 'should remove label "enhancement"' do
first('.js-label-filter-remove').click find('.js-label-filter-remove', match: :first).click
wait_for_ajax
expect(find('.filtered-labels')).to have_no_content "enhancement" expect(find('.filtered-labels')).to have_no_content "enhancement"
end end
end end
...@@ -179,6 +181,7 @@ feature 'Issue filtering by Labels', feature: true do ...@@ -179,6 +181,7 @@ feature 'Issue filtering by Labels', feature: true do
before do before do
page.within '.labels-filter' do page.within '.labels-filter' do
click_button 'Label' click_button 'Label'
wait_for_ajax
click_link 'bug' click_link 'bug'
find('.dropdown-menu-close').click find('.dropdown-menu-close').click
end end
...@@ -189,14 +192,11 @@ feature 'Issue filtering by Labels', feature: true do ...@@ -189,14 +192,11 @@ feature 'Issue filtering by Labels', feature: true do
end end
it 'should allow user to remove filtered labels' do it 'should allow user to remove filtered labels' do
page.within '.filtered-labels' do
first('.js-label-filter-remove').click first('.js-label-filter-remove').click
expect(page).not_to have_content 'bug' wait_for_ajax
end
page.within '.labels-filter' do expect(find('.filtered-labels', visible: false)).not_to have_content 'bug'
expect(page).not_to have_content 'bug' expect(find('.labels-filter')).not_to have_content 'bug'
end
end end
end end
......
require 'rails_helper' require 'rails_helper'
describe 'Filter issues', feature: true do describe 'Filter issues', feature: true do
include WaitForAjax
let!(:project) { create(:project) } let!(:project) { create(:project) }
let!(:user) { create(:user)} let!(:user) { create(:user)}
...@@ -21,7 +22,7 @@ describe 'Filter issues', feature: true do ...@@ -21,7 +22,7 @@ describe 'Filter issues', feature: true do
find('.dropdown-menu-user-link', text: user.username).click find('.dropdown-menu-user-link', text: user.username).click
sleep 2 wait_for_ajax
end end
context 'assignee', js: true do context 'assignee', js: true do
...@@ -53,7 +54,7 @@ describe 'Filter issues', feature: true do ...@@ -53,7 +54,7 @@ describe 'Filter issues', feature: true do
find('.milestone-filter .dropdown-content a', text: milestone.title).click find('.milestone-filter .dropdown-content a', text: milestone.title).click
sleep 2 wait_for_ajax
end end
context 'milestone', js: true do context 'milestone', js: true do
...@@ -80,23 +81,21 @@ describe 'Filter issues', feature: true do ...@@ -80,23 +81,21 @@ describe 'Filter issues', feature: true do
before do before do
visit namespace_project_issues_path(project.namespace, project) visit namespace_project_issues_path(project.namespace, project)
find('.js-label-select').click find('.js-label-select').click
wait_for_ajax
end end
it 'should filter by any label' do it 'should filter by any label' do
find('.dropdown-menu-labels a', text: 'Any Label').click find('.dropdown-menu-labels a', text: 'Any Label').click
page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
sleep 2 wait_for_ajax
page.within '.labels-filter' do expect(find('.labels-filter')).to have_content 'Label'
expect(page).to have_content 'Any Label'
end
expect(find('.js-label-select .dropdown-toggle-text')).to have_content('Any Label')
end end
it 'should filter by no label' do it 'should filter by no label' do
find('.dropdown-menu-labels a', text: 'No Label').click find('.dropdown-menu-labels a', text: 'No Label').click
page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
sleep 2 wait_for_ajax
page.within '.labels-filter' do page.within '.labels-filter' do
expect(page).to have_content 'No Label' expect(page).to have_content 'No Label'
...@@ -122,14 +121,14 @@ describe 'Filter issues', feature: true do ...@@ -122,14 +121,14 @@ describe 'Filter issues', feature: true do
find('.dropdown-menu-user-link', text: user.username).click find('.dropdown-menu-user-link', text: user.username).click
sleep 2 wait_for_ajax
find('.js-label-select').click find('.js-label-select').click
find('.dropdown-menu-labels .dropdown-content a', text: label.title).click find('.dropdown-menu-labels .dropdown-content a', text: label.title).click
page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
sleep 2 wait_for_ajax
end end
context 'assignee and label', js: true do context 'assignee and label', js: true do
...@@ -276,9 +275,12 @@ describe 'Filter issues', feature: true do ...@@ -276,9 +275,12 @@ describe 'Filter issues', feature: true do
it 'should be able to filter and sort issues' do it 'should be able to filter and sort issues' do
click_button 'Label' click_button 'Label'
wait_for_ajax
page.within '.labels-filter' do page.within '.labels-filter' do
click_link 'bug' click_link 'bug'
end end
find('.dropdown-menu-close-icon').click
wait_for_ajax
page.within '.issues-list' do page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 2) expect(page).to have_selector('.issue', count: 2)
...@@ -288,6 +290,7 @@ describe 'Filter issues', feature: true do ...@@ -288,6 +290,7 @@ describe 'Filter issues', feature: true do
page.within '.dropdown-menu-sort' do page.within '.dropdown-menu-sort' do
click_link 'Oldest created' click_link 'Oldest created'
end end
wait_for_ajax
page.within '.issues-list' do page.within '.issues-list' do
expect(first('.issue')).to have_content('Frontend') expect(first('.issue')).to have_content('Frontend')
......
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