From 9dc93a4519d9d5d7be48ff274127136236a3adb3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 20 Apr 2021 23:50:22 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-11-stable-ee --- .../features/sidebar_shared_examples.rb | 165 +++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 spec/support/shared_examples/features/sidebar_shared_examples.rb (limited to 'spec/support/shared_examples/features/sidebar_shared_examples.rb') diff --git a/spec/support/shared_examples/features/sidebar_shared_examples.rb b/spec/support/shared_examples/features/sidebar_shared_examples.rb new file mode 100644 index 00000000000..429efbe6ba0 --- /dev/null +++ b/spec/support/shared_examples/features/sidebar_shared_examples.rb @@ -0,0 +1,165 @@ +# frozen_string_literal: true + +RSpec.shared_examples 'issue boards sidebar' do + include MobileHelpers + + before do + first_card.click + end + + it 'shows sidebar when clicking issue' do + expect(page).to have_selector('[data-testid="issue-boards-sidebar"]') + end + + it 'closes sidebar when clicking issue' do + expect(page).to have_selector('[data-testid="issue-boards-sidebar"]') + + first_card.click + + expect(page).not_to have_selector('[data-testid="issue-boards-sidebar"]') + end + + it 'shows issue details when sidebar is open', :aggregate_failures do + page.within('[data-testid="issue-boards-sidebar"]') do + expect(page).to have_content(issue.title) + expect(page).to have_content(issue.to_reference) + end + end + + context 'when clicking close button' do + before do + find('[data-testid="issue-boards-sidebar"] .gl-drawer-close-button').click + end + + it 'unhighlights the active issue card' do + expect(first_card[:class]).not_to include('is-active') + expect(first_card[:class]).not_to include('multi-select') + end + + it 'closes sidebar when clicking close button' do + expect(page).not_to have_selector('[data-testid="issue-boards-sidebar"]') + end + end + + context 'in notifications subscription' do + it 'displays notifications toggle', :aggregate_failures do + page.within('[data-testid="sidebar-notifications"]') do + expect(page).to have_selector('[data-testid="notification-subscribe-toggle"]') + expect(page).to have_content('Notifications') + expect(page).not_to have_content('Notifications have been disabled by the project or group owner') + end + end + + it 'shows toggle as on then as off as user toggles to subscribe and unsubscribe', :aggregate_failures do + toggle = find('[data-testid="notification-subscribe-toggle"]') + + toggle.click + + expect(toggle).to have_css("button.is-checked") + + toggle.click + + expect(toggle).not_to have_css("button.is-checked") + end + + context 'when notifications have been disabled' do + before do + project.update_attribute(:emails_disabled, true) + + refresh_and_click_first_card + end + + it 'displays a message that notifications have been disabled' do + page.within('[data-testid="sidebar-notifications"]') do + expect(page).not_to have_selector('[data-testid="notification-subscribe-toggle"]') + expect(page).to have_content('Notifications have been disabled by the project or group owner') + end + end + end + end + + context 'in time tracking' do + it 'displays time tracking feature with default message' do + page.within('[data-testid="time-tracker"]') do + expect(page).to have_content('Time tracking') + expect(page).to have_content('No estimate or time spent') + end + end + + context 'when only spent time is recorded' do + before do + issue.timelogs.create!(time_spent: 3600, user: user) + + refresh_and_click_first_card + end + + it 'shows the total time spent only' do + page.within('[data-testid="time-tracker"]') do + expect(page).to have_content('Spent: 1h') + expect(page).not_to have_content('Estimated') + end + end + end + + context 'when only estimated time is recorded' do + before do + issue.update!(time_estimate: 3600) + + refresh_and_click_first_card + end + + it 'shows the estimated time only', :aggregate_failures do + page.within('[data-testid="time-tracker"]') do + expect(page).to have_content('Estimated: 1h') + expect(page).not_to have_content('Spent') + end + end + end + + context 'when estimated and spent times are available' do + before do + issue.timelogs.create!(time_spent: 1800, user: user) + issue.update!(time_estimate: 3600) + + refresh_and_click_first_card + end + + it 'shows time tracking progress bar' do + page.within('[data-testid="time-tracker"]') do + expect(page).to have_selector('[data-testid="timeTrackingComparisonPane"]') + end + end + + it 'shows both estimated and spent time text', :aggregate_failures do + page.within('[data-testid="time-tracker"]') do + expect(page).to have_content('Spent 30m') + expect(page).to have_content('Est 1h') + end + end + end + + context 'when limitedToHours instance option is turned on' do + before do + # 3600+3600*24 = 1d 1h or 25h + issue.timelogs.create!(time_spent: 3600 + 3600 * 24, user: user) + stub_application_setting(time_tracking_limit_to_hours: true) + + refresh_and_click_first_card + end + + it 'shows the total time spent only' do + page.within('[data-testid="time-tracker"]') do + expect(page).to have_content('Spent: 25h') + end + end + end + end + + def refresh_and_click_first_card + page.refresh + + wait_for_requests + + first_card.click + end +end -- cgit v1.2.3