2016-04-14 12:23:46 +00:00
|
|
|
require 'rails_helper'
|
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
feature 'Issue filtering by Labels', feature: true, js: true do
|
2016-04-21 08:30:48 +00:00
|
|
|
include WaitForAjax
|
|
|
|
|
2016-04-14 12:23:46 +00:00
|
|
|
let(:project) { create(:project, :public) }
|
2016-09-23 13:16:11 +00:00
|
|
|
let!(:user) { create(:user) }
|
2016-04-14 12:23:46 +00:00
|
|
|
let!(:label) { create(:label, project: project) }
|
|
|
|
|
2016-11-11 20:51:32 +00:00
|
|
|
let!(:bug) { create(:label, project: project, title: 'bug') }
|
|
|
|
let!(:feature) { create(:label, project: project, title: 'feature') }
|
|
|
|
let!(:enhancement) { create(:label, project: project, title: 'enhancement') }
|
|
|
|
|
|
|
|
let!(:mr1) { create(:merge_request, title: "Bugfix1", source_project: project, target_project: project, source_branch: "bugfix1") }
|
2016-11-14 16:25:32 +00:00
|
|
|
let!(:mr2) { create(:merge_request, title: "Bugfix2", source_project: project, target_project: project, source_branch: "bugfix2") }
|
2016-11-11 20:51:32 +00:00
|
|
|
let!(:mr3) { create(:merge_request, title: "Feature1", source_project: project, target_project: project, source_branch: "feature1") }
|
2016-09-22 12:39:13 +00:00
|
|
|
|
2016-11-11 20:51:32 +00:00
|
|
|
before do
|
|
|
|
mr1.labels << bug
|
2016-04-14 12:23:46 +00:00
|
|
|
|
2016-11-11 20:51:32 +00:00
|
|
|
mr2.labels << bug
|
|
|
|
mr2.labels << enhancement
|
2016-04-14 12:23:46 +00:00
|
|
|
|
2016-11-11 20:51:32 +00:00
|
|
|
mr3.title = "Feature1"
|
|
|
|
mr3.labels << feature
|
2016-04-14 12:23:46 +00:00
|
|
|
|
|
|
|
project.team << [user, :master]
|
|
|
|
login_as(user)
|
|
|
|
|
2016-11-11 20:51:32 +00:00
|
|
|
visit namespace_project_merge_requests_path(project.namespace, project)
|
2016-04-14 12:23:46 +00:00
|
|
|
end
|
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
context 'filter by label bug' do
|
2016-04-14 12:23:46 +00:00
|
|
|
before do
|
2016-09-23 13:16:11 +00:00
|
|
|
select_labels('bug')
|
2016-04-14 12:23:46 +00:00
|
|
|
end
|
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
it 'apply the filter' do
|
2016-04-14 12:23:46 +00:00
|
|
|
expect(page).to have_content "Bugfix1"
|
|
|
|
expect(page).to have_content "Bugfix2"
|
|
|
|
expect(page).not_to have_content "Feature1"
|
|
|
|
expect(find('.filtered-labels')).to have_content "bug"
|
|
|
|
expect(find('.filtered-labels')).not_to have_content "feature"
|
|
|
|
expect(find('.filtered-labels')).not_to have_content "enhancement"
|
2016-05-17 11:07:11 +00:00
|
|
|
|
2016-06-14 11:21:24 +00:00
|
|
|
find('.js-label-filter-remove').click
|
|
|
|
wait_for_ajax
|
|
|
|
expect(find('.filtered-labels', visible: false)).to have_no_content "bug"
|
2016-05-17 11:07:11 +00:00
|
|
|
end
|
2016-04-14 12:23:46 +00:00
|
|
|
end
|
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
context 'filter by label feature' do
|
2016-04-14 12:23:46 +00:00
|
|
|
before do
|
2016-09-23 13:16:11 +00:00
|
|
|
select_labels('feature')
|
2016-04-14 12:23:46 +00:00
|
|
|
end
|
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
it 'applies the filter' do
|
2016-04-14 12:23:46 +00:00
|
|
|
expect(page).to have_content "Feature1"
|
|
|
|
expect(page).not_to have_content "Bugfix2"
|
|
|
|
expect(page).not_to have_content "Bugfix1"
|
|
|
|
expect(find('.filtered-labels')).to have_content "feature"
|
|
|
|
expect(find('.filtered-labels')).not_to have_content "bug"
|
|
|
|
expect(find('.filtered-labels')).not_to have_content "enhancement"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
context 'filter by label enhancement' do
|
2016-04-14 12:23:46 +00:00
|
|
|
before do
|
2016-09-23 13:16:11 +00:00
|
|
|
select_labels('enhancement')
|
2016-04-14 12:23:46 +00:00
|
|
|
end
|
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
it 'applies the filter' do
|
2016-04-14 12:23:46 +00:00
|
|
|
expect(page).to have_content "Bugfix2"
|
|
|
|
expect(page).not_to have_content "Feature1"
|
|
|
|
expect(page).not_to have_content "Bugfix1"
|
|
|
|
expect(find('.filtered-labels')).to have_content "enhancement"
|
|
|
|
expect(find('.filtered-labels')).not_to have_content "bug"
|
|
|
|
expect(find('.filtered-labels')).not_to have_content "feature"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
context 'filter by label enhancement and bug in issues list' do
|
2016-04-14 12:23:46 +00:00
|
|
|
before do
|
2016-09-23 13:16:11 +00:00
|
|
|
select_labels('bug', 'enhancement')
|
2016-04-14 12:23:46 +00:00
|
|
|
end
|
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
it 'applies the filters' do
|
2016-09-29 14:55:55 +00:00
|
|
|
expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
|
2016-09-23 13:16:11 +00:00
|
|
|
expect(page).to have_content "Bugfix2"
|
2016-04-21 07:12:03 +00:00
|
|
|
expect(page).not_to have_content "Feature1"
|
2016-09-23 13:16:11 +00:00
|
|
|
expect(find('.filtered-labels')).to have_content "bug"
|
2016-04-14 12:23:46 +00:00
|
|
|
expect(find('.filtered-labels')).to have_content "enhancement"
|
2016-09-23 13:16:11 +00:00
|
|
|
expect(find('.filtered-labels')).not_to have_content "feature"
|
2016-05-17 11:07:11 +00:00
|
|
|
|
2016-06-14 11:21:24 +00:00
|
|
|
find('.js-label-filter-remove', match: :first).click
|
|
|
|
wait_for_ajax
|
2016-04-14 12:23:46 +00:00
|
|
|
|
|
|
|
expect(page).to have_content "Bugfix2"
|
|
|
|
expect(page).not_to have_content "Feature1"
|
2016-09-23 13:16:11 +00:00
|
|
|
expect(page).not_to have_content "Bugfix1"
|
|
|
|
expect(find('.filtered-labels')).not_to have_content "bug"
|
2016-04-14 12:23:46 +00:00
|
|
|
expect(find('.filtered-labels')).to have_content "enhancement"
|
|
|
|
expect(find('.filtered-labels')).not_to have_content "feature"
|
|
|
|
end
|
|
|
|
end
|
2016-06-02 09:40:42 +00:00
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
context 'remove filtered labels' do
|
2016-06-02 09:40:42 +00:00
|
|
|
before do
|
|
|
|
page.within '.labels-filter' do
|
|
|
|
click_button 'Label'
|
2016-06-14 11:21:24 +00:00
|
|
|
wait_for_ajax
|
2016-06-02 09:40:42 +00:00
|
|
|
click_link 'bug'
|
|
|
|
find('.dropdown-menu-close').click
|
|
|
|
end
|
|
|
|
|
|
|
|
page.within '.filtered-labels' do
|
|
|
|
expect(page).to have_content 'bug'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-07-25 18:16:19 +00:00
|
|
|
it 'allows user to remove filtered labels' do
|
2016-06-14 11:21:24 +00:00
|
|
|
first('.js-label-filter-remove').click
|
|
|
|
wait_for_ajax
|
2016-06-02 09:40:42 +00:00
|
|
|
|
2016-06-14 11:21:24 +00:00
|
|
|
expect(find('.filtered-labels', visible: false)).not_to have_content 'bug'
|
|
|
|
expect(find('.labels-filter')).not_to have_content 'bug'
|
2016-06-02 09:40:42 +00:00
|
|
|
end
|
|
|
|
end
|
2016-06-09 09:44:17 +00:00
|
|
|
|
2016-09-23 13:16:11 +00:00
|
|
|
context 'dropdown filtering' do
|
2016-07-25 18:16:19 +00:00
|
|
|
it 'filters by label name' do
|
2016-06-09 09:44:17 +00:00
|
|
|
page.within '.labels-filter' do
|
|
|
|
click_button 'Label'
|
|
|
|
wait_for_ajax
|
2016-07-21 04:08:50 +00:00
|
|
|
find('.dropdown-input input').set 'bug'
|
2016-06-09 09:44:17 +00:00
|
|
|
|
|
|
|
page.within '.dropdown-content' do
|
|
|
|
expect(page).not_to have_content 'enhancement'
|
|
|
|
expect(page).to have_content 'bug'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2016-09-23 13:16:11 +00:00
|
|
|
|
|
|
|
def select_labels(*labels)
|
|
|
|
page.find('.js-label-select').click
|
|
|
|
wait_for_ajax
|
|
|
|
labels.each do |label|
|
|
|
|
execute_script("$('.dropdown-menu-labels li:contains(\"#{label}\") a').click()")
|
|
|
|
end
|
|
|
|
page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
|
|
|
|
wait_for_ajax
|
|
|
|
end
|
2016-04-14 12:23:46 +00:00
|
|
|
end
|