issue_sidebar_spec.rb 4.29 KB
Newer Older
1 2 3
require 'rails_helper'

feature 'Issue Sidebar', feature: true do
4
  include MobileHelpers
5

6 7
  let(:group) { create(:group, :nested) }
  let(:project) { create(:project, :public, namespace: group) }
8 9
  let(:issue) { create(:issue, project: project) }
  let!(:user) { create(:user)}
10
  let!(:label) { create(:label, project: project, title: 'bug') }
11 12 13 14 15

  before do
    login_as(user)
  end

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
  context 'assignee', js: true do
    let(:user2) { create(:user) }
    let(:issue2) { create(:issue, project: project, author: user2) }

    before do
      project.team << [user, :developer]
      visit_issue(project, issue2)

      find('.block.assignee .edit-link').click

      wait_for_ajax
    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').native.send_keys user2.name
        sleep 1 # Required to wait for end of input delay

        wait_for_ajax

        expect(page).to have_content(user2.name)
      end
    end
  end

47 48 49 50 51 52
  context 'as a allowed user' do
    before do
      project.team << [user, :developer]
      visit_issue(project, issue)
    end

53 54 55 56 57 58
    context 'sidebar', js: true 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
59
        find(sidebar_selector)
60 61
        expect(page).to have_css(sidebar_selector)
        # Once is collapsed let's open the sidebard and reload
62
        open_issue_sidebar
63
        refresh
64
        find(sidebar_selector)
65 66 67
        expect(page).to have_css(sidebar_selector)
        # Restore the window size as it was including the sidebar
        restore_window_size
68
        open_issue_sidebar
69 70 71
      end
    end

72 73
    context 'editing issue labels', js: true do
      before do
74 75
        page.within('.block.labels') do
          find('.edit-link').click
76 77
        end
      end
78

79 80
      it 'shows option to create a new label' do
        page.within('.block.labels') do
81 82 83 84
          expect(page).to have_content 'Create new'
        end
      end

85 86 87 88 89 90
      context 'creating a new label', js: true do
        before do
          page.within('.block.labels') do
            click_link 'Create new'
          end
        end
91

92 93 94 95
        it 'shows dropdown switches to "create label" section' do
          page.within('.block.labels') do
            expect(page).to have_content 'Create new label'
          end
96 97
        end

98 99 100 101 102 103 104 105 106 107 108
        it 'adds new label' do
          page.within('.block.labels') do
            fill_in 'new_label_name', with: 'wontfix'
            page.find(".suggest-colors a", match: :first).click
            click_button 'Create'

            page.within('.dropdown-page-one') do
              expect(page).to have_content 'wontfix'
            end
          end
        end
109

110 111 112 113 114
        it 'shows error message if label title is taken' do
          page.within('.block.labels') do
            fill_in 'new_label_name', with: label.title
            page.find('.suggest-colors a', match: :first).click
            click_button 'Create'
115

116 117 118
            page.within('.dropdown-page-two') do
              expect(page).to have_content 'Title has already been taken'
            end
119 120 121 122 123 124
          end
        end
      end
    end
  end

125 126 127 128 129 130 131 132 133 134 135 136 137 138
  context 'as a allowed mobile user', js: true do
    before do
      project.team << [user, :developer]
      resize_screen_xs
      visit_issue(project, issue)
    end

    context 'mobile sidebar' do
      it 'collapses the sidebar for small screens' do
        expect(page).not_to have_css('aside.right-sidebar.right-sidebar-collapsed')
      end
    end
  end

139 140 141 142 143 144 145 146 147 148 149 150 151 152
  context 'as a guest' do
    before do
      project.team << [user, :guest]
      visit_issue(project, issue)
    end

    it 'does not have a option to edit labels' do
      expect(page).not_to have_selector('.block.labels .edit-link')
    end
  end

  def visit_issue(project, issue)
    visit namespace_project_issue_path(project.namespace, project, issue)
  end
153 154

  def open_issue_sidebar
155
    find('aside.right-sidebar.right-sidebar-collapsed .js-sidebar-toggle').click
156
    find('aside.right-sidebar.right-sidebar-expanded')
157
  end
158
end