Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features/issues/bulk_assignment_labels_spec.rb')
-rw-r--r--spec/features/issues/bulk_assignment_labels_spec.rb475
1 files changed, 0 insertions, 475 deletions
diff --git a/spec/features/issues/bulk_assignment_labels_spec.rb b/spec/features/issues/bulk_assignment_labels_spec.rb
deleted file mode 100644
index 80bf964e2ee..00000000000
--- a/spec/features/issues/bulk_assignment_labels_spec.rb
+++ /dev/null
@@ -1,475 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'Issues > Labels bulk assignment' do
- let(:user) { create(:user) }
- let!(:project) { create(:project) }
- let!(:bug) { create(:label, project: project, title: 'bug') }
- let!(:feature) { create(:label, project: project, title: 'feature') }
- let!(:frontend) { create(:label, project: project, title: 'frontend') }
- let!(:wontfix) { create(:label, project: project, title: 'wontfix') }
- let!(:issue1) { create(:issue, project: project, title: "Issue 1", labels: [frontend]) }
- let!(:issue2) { create(:issue, project: project, title: "Issue 2") }
-
- context 'as an allowed user', :js do
- before do
- project.add_maintainer(user)
-
- sign_in user
- end
-
- context 'sidebar' do
- before do
- enable_bulk_update
- end
-
- it 'is present when bulk edit is enabled' do
- expect(page).to have_css('.issuable-sidebar')
- end
-
- it 'is not present when bulk edit is disabled' do
- disable_bulk_update
- expect(page).not_to have_css('.issuable-sidebar')
- end
- end
-
- context 'can bulk assign' do
- before do
- enable_bulk_update
- end
-
- context 'a label' do
- context 'to all issues' do
- before do
- check 'check-all-issues'
- open_labels_dropdown ['bug']
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'frontend'
- expect(find("#issue_#{issue2.id}")).to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'frontend'
- end
- end
-
- context 'to some issues' do
- before do
- check "selected_issue_#{issue1.id}"
- check "selected_issue_#{issue2.id}"
- open_labels_dropdown ['bug']
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'frontend'
- expect(find("#issue_#{issue2.id}")).to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'frontend'
- end
- end
-
- context 'to an issue' do
- before do
- check "selected_issue_#{issue1.id}"
- open_labels_dropdown ['bug']
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'frontend'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'frontend'
- end
- end
-
- context 'to an issue by selecting the label first' do
- before do
- open_labels_dropdown ['bug']
- check "selected_issue_#{issue1.id}"
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'frontend'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'frontend'
- end
- end
- end
-
- context 'multiple labels' do
- context 'to all issues' do
- before do
- check 'check-all-issues'
- open_labels_dropdown %w(bug feature)
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).to have_content 'feature'
- end
- end
-
- context 'to a issue' do
- before do
- check "selected_issue_#{issue1.id}"
- open_labels_dropdown %w(bug feature)
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'feature'
- end
- end
- end
- end
-
- context 'can assign a label to all issues when label is present' do
- before do
- issue2.labels << bug
- issue2.labels << feature
-
- enable_bulk_update
- check 'check-all-issues'
-
- open_labels_dropdown ['bug']
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).to have_content 'bug'
- end
- end
-
- context 'can bulk un-assign' do
- context 'all labels to all issues' do
- before do
- issue1.labels << bug
- issue1.labels << feature
- issue2.labels << bug
- issue2.labels << feature
-
- enable_bulk_update
- check 'check-all-issues'
- unmark_labels_in_dropdown %w(bug feature)
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).not_to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'feature'
- end
- end
-
- context 'a label to a issue' do
- before do
- issue1.labels << bug
- issue2.labels << feature
-
- enable_bulk_update
- check_issue issue1
- unmark_labels_in_dropdown ['bug']
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).to have_content 'feature'
- end
- end
-
- context 'a label and keep the others label' do
- before do
- issue1.labels << bug
- issue1.labels << feature
- issue2.labels << bug
- issue2.labels << feature
-
- enable_bulk_update
- check_issue issue1
- check_issue issue2
- unmark_labels_in_dropdown ['bug']
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).to have_content 'feature'
- end
- end
- end
-
- context 'toggling a milestone' do
- let!(:milestone) { create(:milestone, project: project, title: 'First Release') }
-
- context 'setting a milestone' do
- before do
- issue1.labels << bug
- issue2.labels << feature
- enable_bulk_update
- end
-
- it 'keeps labels' do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).to have_content 'feature'
-
- check 'check-all-issues'
-
- open_milestone_dropdown(['First Release'])
- update_issues
-
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'First Release'
- expect(find("#issue_#{issue2.id}")).to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).to have_content 'First Release'
- end
- end
-
- context 'setting a milestone and adding another label' do
- before do
- issue1.labels << bug
- enable_bulk_update
- end
-
- it 'keeps existing label and new label is present' do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
-
- check 'check-all-issues'
- open_milestone_dropdown ['First Release']
- open_labels_dropdown ['feature']
- update_issues
-
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'feature'
- expect(find("#issue_#{issue1.id}")).to have_content 'First Release'
- expect(find("#issue_#{issue2.id}")).to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).to have_content 'First Release'
- end
- end
-
- context 'setting a milestone and removing existing label' do
- before do
- issue1.labels << bug
- issue1.labels << feature
- issue2.labels << feature
-
- enable_bulk_update
- end
-
- it 'keeps existing label and new label is present' do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).to have_content 'feature'
-
- check 'check-all-issues'
-
- open_milestone_dropdown ['First Release']
- unmark_labels_in_dropdown ['feature']
- update_issues
-
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).not_to have_content 'feature'
- expect(find("#issue_#{issue1.id}")).to have_content 'First Release'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).to have_content 'First Release'
- end
- end
-
- context 'unsetting a milestone' do
- before do
- issue1.milestone = milestone
- issue2.milestone = milestone
- issue1.save!
- issue2.save!
- issue1.labels << bug
- issue2.labels << feature
-
- enable_bulk_update
- end
-
- it 'keeps labels' do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'First Release'
- expect(find("#issue_#{issue2.id}")).to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).to have_content 'First Release'
-
- check 'check-all-issues'
- open_milestone_dropdown(['No milestone'])
- update_issues
-
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).not_to have_content 'First Release'
- expect(find("#issue_#{issue2.id}")).to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'First Release'
- end
- end
- end
-
- context 'toggling checked issues' do
- before do
- issue1.labels << bug
- enable_bulk_update
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
-
- check_issue issue1
- open_labels_dropdown ['feature']
- uncheck_issue issue1
- check_issue issue1
- update_issues
- sleep 1 # needed
-
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'feature'
- end
- end
-
- context 'mark previously toggled label' do
- before do
- enable_bulk_update
- end
-
- it do
- open_labels_dropdown ['feature']
-
- check_issue issue1
-
- update_issues
-
- expect(find("#issue_#{issue1.id}")).to have_content 'feature'
- end
- end
-
- # Special case https://gitlab.com/gitlab-org/gitlab-foss/issues/24877
- context 'unmarking common label' do
- before do
- issue1.labels << bug
- issue1.labels << feature
- issue2.labels << bug
-
- enable_bulk_update
- end
-
- it 'applies label from filtered results' do
- check 'check-all-issues'
-
- page.within('.issues-bulk-update') do
- click_button 'Select labels'
- wait_for_requests
-
- expect(find('.dropdown-menu-labels li', text: 'bug')).to have_css('.is-active')
- expect(find('.dropdown-menu-labels li', text: 'feature')).to have_css('.is-indeterminate')
-
- click_link 'bug'
- find('.dropdown-input-field', visible: true).set('wontfix')
- click_link 'wontfix'
- end
-
- update_issues
-
- page.within '.issues-holder' do
- expect(find("#issue_#{issue1.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue1.id}")).to have_content 'feature'
- expect(find("#issue_#{issue1.id}")).to have_content 'wontfix'
-
- expect(find("#issue_#{issue2.id}")).not_to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).not_to have_content 'feature'
- expect(find("#issue_#{issue2.id}")).to have_content 'wontfix'
- end
- end
- end
- end
-
- context 'as a guest' do
- before do
- sign_in user
-
- visit project_issues_path(project)
- end
-
- context 'cannot bulk assign labels' do
- it do
- expect(page).not_to have_button 'Edit issues'
- expect(page).not_to have_css '.check-all-issues'
- expect(page).not_to have_css '.issue-check'
- end
- end
- end
-
- def open_milestone_dropdown(items = [])
- page.within('.issues-bulk-update') do
- click_button 'Select milestone'
- wait_for_requests
- items.map do |item|
- click_link item
- end
- end
- end
-
- def open_labels_dropdown(items = [], unmark = false)
- page.within('.issues-bulk-update') do
- click_button 'Select labels'
- wait_for_requests
- items.map do |item|
- click_link item
- end
-
- if unmark
- items.map do |item|
- # Make sure we are unmarking the item no matter the state it has currently
- click_link item until find('a', text: item)[:class].include? 'label-item'
- end
- end
- end
- end
-
- def unmark_labels_in_dropdown(items = [])
- open_labels_dropdown(items, true)
- end
-
- def check_issue(issue, uncheck = false)
- page.within('.issues-list') do
- if uncheck
- uncheck "selected_issue_#{issue.id}"
- else
- check "selected_issue_#{issue.id}"
- end
- end
- end
-
- def uncheck_issue(issue)
- check_issue(issue, true)
- end
-
- def update_issues
- find('.update-selected-issues').click
- wait_for_requests
- end
-
- def enable_bulk_update
- visit project_issues_path(project)
- click_button 'Edit issues'
- end
-
- def disable_bulk_update
- click_button 'Cancel'
- end
-end