diff options
Diffstat (limited to 'spec/features/boards/sidebar_spec.rb')
-rw-r--r-- | spec/features/boards/sidebar_spec.rb | 403 |
1 files changed, 12 insertions, 391 deletions
diff --git a/spec/features/boards/sidebar_spec.rb b/spec/features/boards/sidebar_spec.rb index c79bf2abff1..977147c3c6b 100644 --- a/spec/features/boards/sidebar_spec.rb +++ b/spec/features/boards/sidebar_spec.rb @@ -2,412 +2,33 @@ require 'spec_helper' -RSpec.describe 'Issue Boards', :js do +RSpec.describe 'Project issue boards sidebar', :js do include BoardHelpers - include FilteredSearchHelpers - let(:user) { create(:user) } - let(:user2) { create(:user) } - let(:project) { create(:project, :public) } - let!(:milestone) { create(:milestone, project: project) } - let!(:development) { create(:label, project: project, name: 'Development') } - let!(:bug) { create(:label, project: project, name: 'Bug') } - let!(:regression) { create(:label, project: project, name: 'Regression') } - let!(:stretch) { create(:label, project: project, name: 'Stretch') } - let!(:issue1) { create(:labeled_issue, project: project, assignees: [user], milestone: milestone, labels: [development], relative_position: 2) } - let!(:issue2) { create(:labeled_issue, project: project, labels: [development, stretch], relative_position: 1) } - let(:board) { create(:board, project: project) } - let!(:list) { create(:list, board: board, label: development, position: 0) } - let(:card) { find('.board:nth-child(2)').first('.board-card') } + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project, :public) } + let_it_be(:board) { create(:board, project: project) } + let_it_be(:list) { create(:list, board: board, position: 0) } - let(:application_settings) { {} } - - around do |example| - freeze_time { example.run } - end + let_it_be(:issue, reload: true) { create(:issue, project: project, relative_position: 1) } before do project.add_maintainer(user) sign_in(user) - stub_application_setting(application_settings) - visit project_board_path(project, board) - wait_for_requests - end - - it 'shows sidebar when clicking issue' do - click_card(card) - - expect(page).to have_selector('.issue-boards-sidebar') - end - - it 'closes sidebar when clicking issue' do - click_card(card) - - expect(page).to have_selector('.issue-boards-sidebar') - - click_card(card) - - expect(page).not_to have_selector('.issue-boards-sidebar') - end - - it 'closes sidebar when clicking close button' do - click_card(card) - - expect(page).to have_selector('.issue-boards-sidebar') - - find('.gutter-toggle').click - - expect(page).not_to have_selector('.issue-boards-sidebar') - end - - it 'shows issue details when sidebar is open' do - click_card(card) - - page.within('.issue-boards-sidebar') do - expect(page).to have_content(issue2.title) - expect(page).to have_content(issue2.to_reference) - end - end - - context 'assignee' do - it 'updates the issues assignee' do - click_card(card) - - page.within('.assignee') do - click_button('Edit') - - wait_for_requests - - assignee = first('.gl-avatar-labeled').find('.gl-avatar-labeled-label').text - - page.within('.dropdown-menu-user') do - first('.gl-avatar-labeled').click - end - - click_button('Edit') - wait_for_requests - - expect(page).to have_content(assignee) - end - - expect(card).to have_selector('.avatar') - end - - it 'removes the assignee' do - card_two = find('.board:nth-child(2)').find('.board-card:nth-child(2)') - click_card(card_two) - - page.within('.assignee') do - click_button('Edit') - - wait_for_requests - - page.within('.dropdown-menu-user') do - find('[data-testid="unassign"]').click - end - - click_button('Edit') - wait_for_requests - - expect(page).to have_content('None') - end - - expect(card_two).not_to have_selector('.avatar') - end - - it 'assignees to current user' do - click_card(card) - - page.within(find('.assignee')) do - expect(page).to have_content('None') - - click_button 'assign yourself' - - wait_for_requests - - expect(page).to have_content(user.name) - end - - expect(card).to have_selector('.avatar') - end - - it 'updates assignee dropdown' do - click_card(card) - - page.within('.assignee') do - click_button('Edit') - - wait_for_requests - - assignee = first('.gl-avatar-labeled').find('.gl-avatar-labeled-label').text - - page.within('.dropdown-menu-user') do - first('.gl-avatar-labeled').click - end - - click_button('Edit') - wait_for_requests - - expect(page).to have_content(assignee) - end - - page.within(find('.board:nth-child(2)')) do - find('.board-card:nth-child(2)').click - end - - page.within('.assignee') do - click_button('Edit') - - expect(find('.dropdown-menu')).to have_selector('.gl-new-dropdown-item-check-icon') - end - end - end - - context 'milestone' do - it 'adds a milestone' do - click_card(card) - - page.within('.milestone') do - click_link 'Edit' - - wait_for_requests - - click_link milestone.title - - wait_for_requests - - page.within('.value') do - expect(page).to have_content(milestone.title) - end - end - end - - it 'removes a milestone' do - click_card(card) - page.within('.milestone') do - click_link 'Edit' - - wait_for_requests - - click_link "No milestone" - - wait_for_requests - - page.within('.value') do - expect(page).not_to have_content(milestone.title) - end - end - end - end - - context 'time tracking' do - let(:compare_meter_tooltip) { find('.time-tracking .time-tracking-content .compare-meter')['title'] } - - before do - issue2.timelogs.create(time_spent: 14400, user: user) - issue2.update!(time_estimate: 128800) - - click_card(card) - end - - it 'shows time tracking progress bar' do - expect(compare_meter_tooltip).to eq('Time remaining: 3d 7h 46m') - end - - context 'when time_tracking_limit_to_hours is true' do - let(:application_settings) { { time_tracking_limit_to_hours: true } } - - it 'shows time tracking progress bar' do - expect(compare_meter_tooltip).to eq('Time remaining: 31h 46m') - end - end - end - - context 'due date' do - it 'updates due date' do - click_card(card) - - page.within('.due_date') do - click_link 'Edit' - - click_button Date.today.day - - wait_for_requests - - expect(page).to have_content(Date.today.to_s(:medium)) - end - end + wait_for_requests end - context 'labels' do - it 'shows current labels when editing' do - click_card(card) - - page.within('.labels') do - click_link 'Edit' - - wait_for_requests - - page.within('.value') do - expect(page).to have_selector('.gl-label-text', count: 2) - expect(page).to have_content(development.title) - expect(page).to have_content(stretch.title) - end - end - end - - it 'adds a single label' do - click_card(card) - - page.within('.labels') do - click_link 'Edit' - - wait_for_requests - - click_link bug.title - - wait_for_requests - - find('.dropdown-menu-close-icon').click - - page.within('.value') do - expect(page).to have_selector('.gl-label-text', count: 3) - expect(page).to have_content(bug.title) - end - end - - # 'Development' label does not show since the card is in a 'Development' list label - expect(card).to have_selector('.gl-label', count: 2) - expect(card).to have_content(bug.title) - end - - it 'adds a multiple labels' do - click_card(card) + it_behaves_like 'issue boards sidebar' - page.within('.labels') do - click_link 'Edit' - - wait_for_requests - - click_link bug.title - - wait_for_requests - - click_link regression.title - - wait_for_requests - - find('.dropdown-menu-close-icon').click - - page.within('.value') do - expect(page).to have_selector('.gl-label-text', count: 4) - expect(page).to have_content(bug.title) - expect(page).to have_content(regression.title) - end - end - - # 'Development' label does not show since the card is in a 'Development' list label - expect(card).to have_selector('.gl-label', count: 3) - expect(card).to have_content(bug.title) - expect(card).to have_content(regression.title) - end - - it 'removes a label' do - click_card(card) - - page.within('.labels') do - click_link 'Edit' - - wait_for_requests - - within('.dropdown-menu-labels') do - click_link stretch.title - end - - wait_for_requests - - find('.dropdown-menu-close-icon').click - - page.within('.value') do - expect(page).to have_selector('.gl-label-text', count: 1) - expect(page).not_to have_content(stretch.title) - end - end - - # 'Development' label does not show since the card is in a 'Development' list label - expect(card).to have_selector('.gl-label-text', count: 0) - expect(card).not_to have_content(stretch.title) - end - - it 'creates project label' do - click_card(card) - - page.within('.labels') do - click_link 'Edit' - wait_for_requests - - click_link 'Create project label' - fill_in 'new_label_name', with: 'test label' - first('.suggest-colors-dropdown a').click - click_button 'Create' - wait_for_requests - - expect(page).to have_link 'test label' - end - expect(page).to have_selector('.board', count: 3) - end - - it 'creates project label and list' do - click_card(card) - - page.within('.labels') do - click_link 'Edit' - wait_for_requests - - click_link 'Create project label' - fill_in 'new_label_name', with: 'test label' - first('.suggest-colors-dropdown a').click - first('.js-add-list').click - click_button 'Create' - wait_for_requests - - expect(page).to have_link 'test label' - end - expect(page).to have_selector('.board', count: 4) - end + def first_card + find('.board:nth-child(1)').first("[data-testid='board_card']") end - context 'subscription' do - it 'changes issue subscription' do - click_card(card) - wait_for_requests - - page.within('.subscriptions') do - find('[data-testid="subscription-toggle"] button:not(.is-checked)').click - wait_for_requests - - expect(page).to have_css('[data-testid="subscription-toggle"] button.is-checked') - end - end - - it 'has checked subscription toggle when already subscribed' do - create(:subscription, user: user, project: project, subscribable: issue2, subscribed: true) - visit project_board_path(project, board) - wait_for_requests - - click_card(card) - wait_for_requests - - page.within('.subscriptions') do - find('[data-testid="subscription-toggle"] button.is-checked').click - wait_for_requests - - expect(page).to have_css('[data-testid="subscription-toggle"] button:not(.is-checked)') - end - end + def click_first_issue_card + click_card(first_card) end end |