diff --git a/spec/features/issues/bulk_assigment_labels_spec.rb b/spec/features/issues/bulk_assigment_labels_spec.rb index b99729ffd09e3167ff6c8c4d871ac37fdb6c4b6e..df080a4c661a051e836c7e69d5745881784dcf2c 100644 --- a/spec/features/issues/bulk_assigment_labels_spec.rb +++ b/spec/features/issues/bulk_assigment_labels_spec.rb @@ -3,80 +3,147 @@ require 'rails_helper' feature 'Issues > Labels bulk assignment', feature: true do include WaitForAjax - let(:user) { create(:user) } - let!(:project) { create(:project) } - let!(:issue1) { create(:issue, project: project, title: "Issue 1") } - let!(:issue2) { create(:issue, project: project, title: "Issue 2") } - - before do - create(:label, project: project, title: 'bug') - create(:label, project: project, title: 'feature') - end + let(:user) { create(:user) } + let!(:project) { create(:project) } + let!(:issue1) { create(:issue, project: project, title: "Issue 1") } + let!(:issue2) { create(:issue, project: project, title: "Issue 2") } + let!(:bug) { create(:label, project: project, title: 'bug') } + let!(:feature) { create(:label, project: project, title: 'feature') } context 'as a allowed user', js: true do before do project.team << [user, :master] - login_as user - visit namespace_project_issues_path(project.namespace, project) + login_as user end - context 'can bulk assign a label' do - context 'to all issues' do - before do - check 'check_all_issues' - open_labels_dropdown ['bug'] - click_button 'Update issues' + context 'can bulk assign' do + before do + visit namespace_project_issues_path(project.namespace, project) + end + + context 'a label' do + context 'to all issues' do + before do + check 'check_all_issues' + open_labels_dropdown ['bug'] + click_button '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 - it do - expect(find("#issue_#{issue1.id}")).to have_content 'bug' - expect(find("#issue_#{issue2.id}")).to have_content 'bug' + context 'to a issue' do + before do + check "selected_issue_#{issue1.id}" + open_labels_dropdown ['bug'] + click_button 'Update issues' + end + + it do + expect(find("#issue_#{issue1.id}")).to have_content 'bug' + expect(find("#issue_#{issue2.id}")).not_to have_content 'bug' + end end end - context 'to a issue' do + context 'multiple labels' do + context 'to all issues' do + before do + check 'check_all_issues' + open_labels_dropdown ['bug', 'feature'] + click_button '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 ['bug', 'feature'] + click_button '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 bulk un-assign' do + context 'all labels to all issues' do before do - check "selected_issue_#{issue1.id}" - open_labels_dropdown ['bug'] + issue1.labels << bug + issue1.labels << feature + issue2.labels << bug + issue2.labels << feature + + visit namespace_project_issues_path(project.namespace, project) + + check 'check_all_issues' + unmark_labels_in_dropdown ['bug', 'feature'] click_button 'Update issues' end it do - expect(find("#issue_#{issue1.id}")).to have_content 'bug' + 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 - end - context 'can bulk assign multiple labels' do - context 'to all issues' do + context 'a label to a issue' do before do - check 'check_all_issues' - open_labels_dropdown ['bug', 'feature'] + issue1.labels << bug + issue2.labels << feature + + visit namespace_project_issues_path(project.namespace, project) + + check_issue issue1 + unmark_labels_in_dropdown ['bug'] click_button '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_#{issue1.id}")).not_to have_content 'bug' expect(find("#issue_#{issue2.id}")).to have_content 'feature' end end - context 'to a issue' do + context 'a label and keep the others label' do before do - check "selected_issue_#{issue1.id}" - open_labels_dropdown ['bug', 'feature'] + issue1.labels << bug + issue1.labels << feature + issue2.labels << bug + issue2.labels << feature + + visit namespace_project_issues_path(project.namespace, project) + + check_issue issue1 + check_issue issue2 + unmark_labels_in_dropdown ['bug'] click_button 'Update issues' end it do - expect(find("#issue_#{issue1.id}")).to have_content 'bug' + 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}")).not_to have_content 'feature' + expect(find("#issue_#{issue2.id}")).to have_content 'feature' end end end @@ -97,13 +164,28 @@ feature 'Issues > Labels bulk assignment', feature: true do end end - def open_labels_dropdown(items = []) + def open_labels_dropdown(items = [], unmark = false) page.within('.issues_bulk_update') do click_button 'Label' wait_for_ajax items.map do |item| click_link item end + if unmark + items.map do |item| + click_link item + end + end + end + end + + def unmark_labels_in_dropdown(items = []) + open_labels_dropdown(items, true) + end + + def check_issue(issue) + page.within('.issues-list') do + check "selected_issue_#{issue.id}" end end end