2021-04-29 21:17:54 +05:30
|
|
|
# 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
|
2021-06-08 01:23:25 +05:30
|
|
|
expect(page).to have_selector('[data-testid="subscription-toggle"]')
|
2021-04-29 21:17:54 +05:30
|
|
|
expect(page).to have_content('Notifications')
|
2021-06-08 01:23:25 +05:30
|
|
|
expect(page).not_to have_content('Disabled by project owner')
|
2021-04-29 21:17:54 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows toggle as on then as off as user toggles to subscribe and unsubscribe', :aggregate_failures do
|
2021-06-08 01:23:25 +05:30
|
|
|
wait_for_requests
|
2021-04-29 21:17:54 +05:30
|
|
|
|
2021-06-08 01:23:25 +05:30
|
|
|
click_button 'Notifications'
|
2021-04-29 21:17:54 +05:30
|
|
|
|
2021-06-08 01:23:25 +05:30
|
|
|
expect(page).to have_button('Notifications', class: 'is-checked')
|
2021-04-29 21:17:54 +05:30
|
|
|
|
2021-06-08 01:23:25 +05:30
|
|
|
click_button 'Notifications'
|
2021-04-29 21:17:54 +05:30
|
|
|
|
2021-06-08 01:23:25 +05:30
|
|
|
wait_for_requests
|
|
|
|
|
|
|
|
expect(page).not_to have_button('Notifications', class: 'is-checked')
|
2021-04-29 21:17:54 +05:30
|
|
|
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
|
2021-06-08 01:23:25 +05:30
|
|
|
expect(page).to have_button('Notifications', class: 'is-disabled')
|
|
|
|
expect(page).to have_content('Disabled by project owner')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'confidentiality' do
|
|
|
|
it 'make issue confidential' do
|
|
|
|
page.within('.confidentiality') do
|
|
|
|
expect(page).to have_content('Not confidential')
|
|
|
|
|
|
|
|
click_button 'Edit'
|
|
|
|
expect(page).to have_css('.sidebar-item-warning-message')
|
|
|
|
|
|
|
|
within('.sidebar-item-warning-message') do
|
|
|
|
click_button 'Turn on'
|
2021-04-29 21:17:54 +05:30
|
|
|
end
|
2021-06-08 01:23:25 +05:30
|
|
|
|
|
|
|
wait_for_requests
|
|
|
|
|
|
|
|
expect(page).to have_content('This issue is confidential')
|
2021-04-29 21:17:54 +05:30
|
|
|
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
|