diff options
Diffstat (limited to 'spec/features/issues/issue_sidebar_spec.rb')
-rw-r--r-- | spec/features/issues/issue_sidebar_spec.rb | 215 |
1 files changed, 171 insertions, 44 deletions
diff --git a/spec/features/issues/issue_sidebar_spec.rb b/spec/features/issues/issue_sidebar_spec.rb index ca44978d223..04b4caa52fe 100644 --- a/spec/features/issues/issue_sidebar_spec.rb +++ b/spec/features/issues/issue_sidebar_spec.rb @@ -30,79 +30,199 @@ RSpec.describe 'Issue Sidebar' do let(:user2) { create(:user) } let(:issue2) { create(:issue, project: project, author: user2) } - include_examples 'issuable invite members experiments' do - let(:issuable_path) { project_issue_path(project, issue2) } - end - - context 'when user is a developer' do + context 'when GraphQL assignees widget feature flag is disabled' do before do - project.add_developer(user) - visit_issue(project, issue2) - - find('.block.assignee .edit-link').click + stub_feature_flags(issue_assignees_widget: false) + end - wait_for_requests + include_examples 'issuable invite members experiments' do + let(:issuable_path) { project_issue_path(project, issue2) } end - it 'shows author in assignee dropdown' do - page.within '.dropdown-menu-user' do - expect(page).to have_content(user2.name) + context 'when user is a developer' do + before do + project.add_developer(user) + visit_issue(project, issue2) + + find('.block.assignee .edit-link').click + wait_for_requests + end + + it 'shows author in assignee dropdown' do + page.within '.dropdown-menu-user' do + expect(page).to have_content(user2.name) + end + end + + it 'shows author when filtering assignee dropdown' do + page.within '.dropdown-menu-user' do + find('.dropdown-input-field').set(user2.name) + + wait_for_requests + + expect(page).to have_content(user2.name) + end + end + + it 'assigns yourself' do + find('.block.assignee .dropdown-menu-toggle').click + + click_button 'assign yourself' + + wait_for_requests + + find('.block.assignee .edit-link').click + + page.within '.dropdown-menu-user' do + expect(page.find('.dropdown-header')).to be_visible + expect(page.find('.dropdown-menu-user-link.is-active')).to have_content(user.name) + end end - end - it 'shows author when filtering assignee dropdown' do - page.within '.dropdown-menu-user' do + it 'keeps your filtered term after filtering and dismissing the dropdown' do find('.dropdown-input-field').set(user2.name) wait_for_requests - expect(page).to have_content(user2.name) + page.within '.dropdown-menu-user' do + expect(page).not_to have_content 'Unassigned' + click_link user2.name + end + + find('.js-right-sidebar').click + find('.block.assignee .edit-link').click + + expect(page.all('.dropdown-menu-user li').length).to eq(1) + expect(find('.dropdown-input-field').value).to eq(user2.name) + end + + it 'shows label text as "Apply" when assignees are changed' do + project.add_developer(user) + visit_issue(project, issue2) + + find('.block.assignee .edit-link').click + wait_for_requests + + click_on 'Unassigned' + + expect(page).to have_link('Apply') end end + end - it 'assigns yourself' do - find('.block.assignee .dropdown-menu-toggle').click + context 'when GraphQL assignees widget feature flag is enabled' do + context 'when a privileged user can invite' do + it 'shows a link for inviting members and launches invite modal' do + project.add_maintainer(user) + visit_issue(project, issue2) - click_button 'assign yourself' + open_assignees_dropdown - wait_for_requests + page.within '.dropdown-menu-user' do + expect(page).to have_link('Invite members') + expect(page).to have_selector('[data-track-event="click_invite_members"]') + expect(page).to have_selector('[data-track-label="edit_assignee"]') + end - find('.block.assignee .edit-link').click + click_link 'Invite members' - page.within '.dropdown-menu-user' do - expect(page.find('.dropdown-header')).to be_visible - expect(page.find('.dropdown-menu-user-link.is-active')).to have_content(user.name) + expect(page).to have_content("You're inviting members to the") end end - it 'keeps your filtered term after filtering and dismissing the dropdown' do - find('.dropdown-input-field').set(user2.name) + context 'when invite_members_version_b experiment is enabled' do + before do + stub_experiment_for_subject(invite_members_version_b: true) + end + + it 'shows a link for inviting members and follows through to modal' do + project.add_developer(user) + visit_issue(project, issue2) - wait_for_requests + open_assignees_dropdown - page.within '.dropdown-menu-user' do - expect(page).not_to have_content 'Unassigned' - click_link user2.name + page.within '.dropdown-menu-user' do + expect(page).to have_link('Invite members', href: '#') + expect(page).to have_selector('[data-track-event="click_invite_members_version_b"]') + expect(page).to have_selector('[data-track-label="edit_assignee"]') + end + + click_link 'Invite members' + + expect(page).to have_content("Oops, this feature isn't ready yet") end + end + + context 'when invite_members_version_b experiment is disabled' do + it 'shows author in assignee dropdown and no invite link' do + project.add_developer(user) + visit_issue(project, issue2) - find('.js-right-sidebar').click - find('.block.assignee .edit-link').click + open_assignees_dropdown - expect(page.all('.dropdown-menu-user li').length).to eq(1) - expect(find('.dropdown-input-field').value).to eq(user2.name) + page.within '.dropdown-menu-user' do + expect(page).not_to have_link('Invite members') + end + end end - end - it 'shows label text as "Apply" when assignees are changed' do - project.add_developer(user) - visit_issue(project, issue2) + context 'when user is a developer' do + before do + project.add_developer(user) + visit_issue(project, issue2) + end + + it 'shows author in assignee dropdown' do + open_assignees_dropdown + + page.within '.dropdown-menu-user' do + expect(page).to have_content(user2.name) + end + end + + it 'shows author when filtering assignee dropdown' do + open_assignees_dropdown + + page.within '.dropdown-menu-user' do + find('.js-dropdown-input-field').find('input').set(user2.name) + + wait_for_requests + + expect(page).to have_content(user2.name) + end + end + + it 'assigns yourself' do + click_button 'assign yourself' + wait_for_requests + + page.within '.assignee' do + expect(page).to have_content(user.name) + end + end - find('.block.assignee .edit-link').click - wait_for_requests + it 'keeps your filtered term after filtering and dismissing the dropdown' do + open_assignees_dropdown - click_on 'Unassigned' + find('.js-dropdown-input-field').find('input').set(user2.name) + wait_for_requests + + page.within '.dropdown-menu-user' do + expect(page).not_to have_content 'Unassigned' + click_link user2.name + end - expect(page).to have_link('Apply') + find('.js-right-sidebar').click + + open_assignees_dropdown + + page.within('.assignee') do + expect(page.all('[data-testid="selected-participant"]').length).to eq(1) + end + + expect(find('.js-dropdown-input-field').find('input').value).to eq(user2.name) + end + end end end @@ -171,7 +291,7 @@ RSpec.describe 'Issue Sidebar' do context 'editing issue labels', :js do before do - issue.update(labels: [label]) + issue.update!(labels: [label]) page.within('.block.labels') do click_on 'Edit' end @@ -334,4 +454,11 @@ RSpec.describe 'Issue Sidebar' do find('aside.right-sidebar.right-sidebar-collapsed .js-sidebar-toggle').click find('aside.right-sidebar.right-sidebar-expanded') end + + def open_assignees_dropdown + page.within('.assignee') do + click_button('Edit') + wait_for_requests + end + end end |