debian-mirror-gitlab/spec/features/issues/issue_sidebar_spec.rb

364 lines
11 KiB
Ruby
Raw Normal View History

2019-10-12 21:52:04 +05:30
# frozen_string_literal: true
2019-12-04 20:38:33 +05:30
require 'spec_helper'
2016-06-02 11:05:42 +05:30
2020-06-23 00:09:42 +05:30
RSpec.describe 'Issue Sidebar' do
2017-08-17 22:00:37 +05:30
include MobileHelpers
2021-06-08 01:23:25 +05:30
let_it_be(:group) { create(:group, :nested) }
let_it_be(:project) { create(:project, :public, namespace: group) }
let_it_be(:user) { create(:user) }
2022-03-02 08:16:31 +05:30
let_it_be(:issue) { create(:issue, project: project) }
let_it_be(:label) { create(:label, project: project, name: 'Label') }
2021-06-08 01:23:25 +05:30
let_it_be(:mock_date) { Date.today.at_beginning_of_month + 2.days }
2016-06-02 11:05:42 +05:30
before do
2021-03-08 18:12:59 +05:30
stub_incoming_email_setting(enabled: true, address: "p+%{key}@gl.ab")
2016-06-02 11:05:42 +05:30
end
2021-03-08 18:12:59 +05:30
context 'when signed in' do
before do
sign_in(user)
2021-01-03 14:25:43 +05:30
end
2017-08-17 22:00:37 +05:30
2021-03-08 18:12:59 +05:30
context 'when concerning the assignee', :js do
let(:user2) { create(:user) }
let(:issue2) { create(:issue, project: project, author: user2) }
2020-06-23 00:09:42 +05:30
2021-04-29 21:17:54 +05:30
context 'when GraphQL assignees widget feature flag is disabled' do
2021-03-08 18:12:59 +05:30
before do
2021-04-29 21:17:54 +05:30
stub_feature_flags(issue_assignees_widget: false)
end
2017-08-17 22:00:37 +05:30
2021-09-04 01:27:46 +05:30
include_examples 'issuable invite members' do
2021-04-29 21:17:54 +05:30
let(:issuable_path) { project_issue_path(project, issue2) }
2021-03-08 18:12:59 +05:30
end
2020-06-23 00:09:42 +05:30
2021-04-29 21:17:54 +05:30
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
2021-03-08 18:12:59 +05:30
end
2017-08-17 22:00:37 +05:30
2021-04-29 21:17:54 +05:30
it 'keeps your filtered term after filtering and dismissing the dropdown' do
2021-03-08 18:12:59 +05:30
find('.dropdown-input-field').set(user2.name)
2017-08-17 22:00:37 +05:30
2021-03-08 18:12:59 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
2021-04-29 21:17:54 +05:30
page.within '.dropdown-menu-user' do
expect(page).not_to have_content 'Unassigned'
click_link user2.name
end
2022-08-27 11:52:29 +05:30
within '.js-right-sidebar' do
find('.block.assignee').click(x: 0, y: 0)
find('.block.assignee .edit-link').click
end
2021-04-29 21:17:54 +05:30
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')
2021-03-08 18:12:59 +05:30
end
end
2021-04-29 21:17:54 +05:30
end
2020-06-23 00:09:42 +05:30
2021-04-29 21:17:54 +05:30
context 'when GraphQL assignees widget feature flag is enabled' do
2022-05-07 20:08:51 +05:30
# TODO: Move to shared examples when feature flag is removed: https://gitlab.com/gitlab-org/gitlab/-/issues/328185
2021-04-29 21:17:54 +05:30
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)
2020-06-23 00:09:42 +05:30
2021-04-29 21:17:54 +05:30
open_assignees_dropdown
2017-08-17 22:00:37 +05:30
2021-04-29 21:17:54 +05:30
page.within '.dropdown-menu-user' do
expect(page).to have_link('Invite members')
2021-11-11 11:23:49 +05:30
expect(page).to have_selector('[data-track-action="click_invite_members"]')
2021-04-29 21:17:54 +05:30
expect(page).to have_selector('[data-track-label="edit_assignee"]')
end
2020-06-23 00:09:42 +05:30
2021-04-29 21:17:54 +05:30
click_link 'Invite members'
2020-06-23 00:09:42 +05:30
2021-04-29 21:17:54 +05:30
expect(page).to have_content("You're inviting members to the")
2021-03-08 18:12:59 +05:30
end
2020-06-23 00:09:42 +05:30
end
2021-06-08 01:23:25 +05:30
context 'when user cannot invite members in assignee dropdown' do
2021-04-29 21:17:54 +05:30
it 'shows author in assignee dropdown and no invite link' do
project.add_developer(user)
visit_issue(project, issue2)
2017-08-17 22:00:37 +05:30
2021-04-29 21:17:54 +05:30
open_assignees_dropdown
2020-06-23 00:09:42 +05:30
2021-04-29 21:17:54 +05:30
page.within '.dropdown-menu-user' do
expect(page).not_to have_link('Invite members')
end
end
2021-03-08 18:12:59 +05:30
end
2017-08-17 22:00:37 +05:30
2021-04-29 21:17:54 +05:30
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
2016-06-02 11:05:42 +05:30
2021-04-29 21:17:54 +05:30
it 'keeps your filtered term after filtering and dismissing the dropdown' do
open_assignees_dropdown
2018-03-17 18:26:18 +05:30
2021-04-29 21:17:54 +05:30
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'
2022-08-27 11:52:29 +05:30
click_button user2.name
2021-04-29 21:17:54 +05:30
end
2018-03-17 18:26:18 +05:30
2021-06-08 01:23:25 +05:30
find('.participants').click
wait_for_requests
2021-04-29 21:17:54 +05:30
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
2018-03-17 18:26:18 +05:30
end
2016-06-02 11:05:42 +05:30
end
2021-06-08 01:23:25 +05:30
context 'as an allowed user' do
2017-08-17 22:00:37 +05:30
before do
2021-03-08 18:12:59 +05:30
project.add_developer(user)
visit_issue(project, issue)
2017-08-17 22:00:37 +05:30
end
2016-06-02 11:05:42 +05:30
2021-03-08 18:12:59 +05:30
context 'sidebar', :js do
it 'changes size when the screen size is smaller' do
sidebar_selector = 'aside.right-sidebar.right-sidebar-collapsed'
# Resize the window
resize_screen_sm
# Make sure the sidebar is collapsed
find(sidebar_selector)
expect(page).to have_css(sidebar_selector)
# Once is collapsed let's open the sidebard and reload
open_issue_sidebar
refresh
find(sidebar_selector)
expect(page).to have_css(sidebar_selector)
# Restore the window size as it was including the sidebar
restore_window_size
open_issue_sidebar
2018-10-15 14:42:47 +05:30
end
2016-06-02 11:05:42 +05:30
end
2021-03-11 19:13:27 +05:30
context 'editing issue milestone', :js do
2022-01-26 12:08:38 +05:30
it_behaves_like 'milestone sidebar widget'
end
2021-03-11 19:13:27 +05:30
2022-01-26 12:08:38 +05:30
context 'editing issue due date', :js do
it_behaves_like 'date sidebar widget'
2021-03-11 19:13:27 +05:30
end
2021-03-08 18:12:59 +05:30
context 'editing issue labels', :js do
2022-03-02 08:16:31 +05:30
it_behaves_like 'labels sidebar widget'
2016-06-02 11:05:42 +05:30
end
2018-05-09 12:01:36 +05:30
2022-05-07 20:08:51 +05:30
context 'escalation status', :js do
it 'is not available for default issue type' do
expect(page).not_to have_selector('.block.escalation-status')
end
end
2021-03-08 18:12:59 +05:30
context 'interacting with collapsed sidebar', :js do
collapsed_sidebar_selector = 'aside.right-sidebar.right-sidebar-collapsed'
expanded_sidebar_selector = 'aside.right-sidebar.right-sidebar-expanded'
confidentiality_sidebar_block = '.block.confidentiality'
lock_sidebar_block = '.block.lock'
collapsed_sidebar_block_icon = '.sidebar-collapsed-icon'
2018-05-09 12:01:36 +05:30
2021-03-08 18:12:59 +05:30
before do
resize_screen_sm
end
2018-05-09 12:01:36 +05:30
2021-03-08 18:12:59 +05:30
it 'confidentiality block expands then collapses sidebar' do
expect(page).to have_css(collapsed_sidebar_selector)
2018-05-09 12:01:36 +05:30
2021-03-08 18:12:59 +05:30
page.within(confidentiality_sidebar_block) do
find(collapsed_sidebar_block_icon).click
end
expect(page).to have_css(expanded_sidebar_selector)
page.within(confidentiality_sidebar_block) do
page.find('button', text: 'Cancel').click
end
expect(page).to have_css(collapsed_sidebar_selector)
2018-05-09 12:01:36 +05:30
end
2021-03-08 18:12:59 +05:30
it 'lock block expands then collapses sidebar' do
expect(page).to have_css(collapsed_sidebar_selector)
page.within(lock_sidebar_block) do
find(collapsed_sidebar_block_icon).click
end
expect(page).to have_css(expanded_sidebar_selector)
page.within(lock_sidebar_block) do
page.find('button', text: 'Cancel').click
end
2018-05-09 12:01:36 +05:30
2021-03-08 18:12:59 +05:30
expect(page).to have_css(collapsed_sidebar_selector)
2018-05-09 12:01:36 +05:30
end
2021-03-08 18:12:59 +05:30
end
end
2018-05-09 12:01:36 +05:30
2021-03-08 18:12:59 +05:30
context 'as a guest' do
before do
project.add_guest(user)
visit_issue(project, issue)
2018-05-09 12:01:36 +05:30
end
2021-03-08 18:12:59 +05:30
it 'does not have a option to edit labels' do
expect(page).not_to have_selector('.block.labels .js-sidebar-dropdown-toggle')
end
2018-05-09 12:01:36 +05:30
2021-03-08 18:12:59 +05:30
context 'sidebar', :js do
it 'finds issue copy forwarding email' do
2021-10-27 15:23:28 +05:30
expect(find('[data-qa-selector="copy-forward-email"]').text).to eq "Issue email: #{issue.creatable_note_email_address(user)}" # rubocop:disable QA/SelectorUsage
2018-05-09 12:01:36 +05:30
end
2021-03-08 18:12:59 +05:30
end
2018-05-09 12:01:36 +05:30
2021-03-08 18:12:59 +05:30
context 'interacting with collapsed sidebar', :js do
collapsed_sidebar_selector = 'aside.right-sidebar.right-sidebar-collapsed'
expanded_sidebar_selector = 'aside.right-sidebar.right-sidebar-expanded'
lock_sidebar_block = '.block.lock'
lock_button = '.block.lock .btn-close'
collapsed_sidebar_block_icon = '.sidebar-collapsed-icon'
2018-05-09 12:01:36 +05:30
2021-03-08 18:12:59 +05:30
before do
resize_screen_sm
2018-05-09 12:01:36 +05:30
end
2021-03-08 18:12:59 +05:30
it 'expands then does not show the lock dialog form' do
expect(page).to have_css(collapsed_sidebar_selector)
2016-06-02 11:05:42 +05:30
2021-03-08 18:12:59 +05:30
page.within(lock_sidebar_block) do
find(collapsed_sidebar_block_icon).click
end
2016-06-02 11:05:42 +05:30
2021-03-08 18:12:59 +05:30
expect(page).to have_css(expanded_sidebar_selector)
expect(page).not_to have_selector(lock_button)
end
end
2016-06-02 11:05:42 +05:30
end
2021-03-08 18:12:59 +05:30
end
2020-04-08 14:13:33 +05:30
2021-03-08 18:12:59 +05:30
context 'when not signed in' do
context 'sidebar', :js do
2020-04-08 14:13:33 +05:30
before do
2021-03-08 18:12:59 +05:30
visit_issue(project, issue)
2020-04-08 14:13:33 +05:30
end
2021-03-08 18:12:59 +05:30
it 'does not find issue email' do
2021-10-27 15:23:28 +05:30
expect(page).not_to have_selector('[data-qa-selector="copy-forward-email"]') # rubocop:disable QA/SelectorUsage
2020-04-08 14:13:33 +05:30
end
end
2016-06-02 11:05:42 +05:30
end
def visit_issue(project, issue)
2017-09-10 17:25:29 +05:30
visit project_issue_path(project, issue)
2021-06-08 01:23:25 +05:30
wait_for_requests
2016-06-02 11:05:42 +05:30
end
2017-08-17 22:00:37 +05:30
def open_issue_sidebar
2018-03-17 18:26:18 +05:30
find('aside.right-sidebar.right-sidebar-collapsed .js-sidebar-toggle').click
2017-08-17 22:00:37 +05:30
find('aside.right-sidebar.right-sidebar-expanded')
end
2021-04-29 21:17:54 +05:30
def open_assignees_dropdown
page.within('.assignee') do
click_button('Edit')
wait_for_requests
end
end
2016-06-02 11:05:42 +05:30
end