new_menu_spec.rb 4.7 KB
Newer Older
T
Tim Zallmann 已提交
1 2
require 'spec_helper'

T
Tim Zallmann 已提交
3
feature 'Top Plus Menu', feature: true, js: true do
4
  let(:user) { create(:user) }
5 6
  let(:group) { create(:group) }
  let(:project) { create(:project, :repository, creator: user, namespace: user.namespace) }
7
  let(:public_project) { create(:project, :public) }
T
Tim Zallmann 已提交
8 9 10 11 12 13 14

  before do
    group.add_owner(user)
  end

  context 'used by full user' do
    before do
15
      sign_in(user)
T
Tim Zallmann 已提交
16 17
    end

T
Tim Zallmann 已提交
18
    scenario 'click on New project shows new project page' do
T
Tim Zallmann 已提交
19 20 21 22 23 24 25 26
      visit root_dashboard_path

      click_topmenuitem("New project")

      expect(page).to have_content('Project path')
      expect(page).to have_content('Project name')
    end

T
Tim Zallmann 已提交
27
    scenario 'click on New group shows new group page' do
T
Tim Zallmann 已提交
28 29 30 31 32 33 34 35
      visit root_dashboard_path

      click_topmenuitem("New group")

      expect(page).to have_content('Group path')
      expect(page).to have_content('Group name')
    end

T
Tim Zallmann 已提交
36
    scenario 'click on New snippet shows new snippet page' do
T
Tim Zallmann 已提交
37
      visit root_dashboard_path
38

T
Tim Zallmann 已提交
39 40 41 42 43
      click_topmenuitem("New snippet")

      expect(page).to have_content('New Snippet')
      expect(page).to have_content('Title')
    end
T
Tim Zallmann 已提交
44 45

    scenario 'click on New issue shows new issue page' do
46
      visit project_path(project)
T
Tim Zallmann 已提交
47 48 49 50 51 52 53 54

      click_topmenuitem("New issue")

      expect(page).to have_content('New Issue')
      expect(page).to have_content('Title')
    end

    scenario 'click on New merge request shows new merge request page' do
55
      visit project_path(project)
T
Tim Zallmann 已提交
56 57 58 59 60 61 62 63 64

      click_topmenuitem("New merge request")

      expect(page).to have_content('New Merge Request')
      expect(page).to have_content('Source branch')
      expect(page).to have_content('Target branch')
    end

    scenario 'click on New project snippet shows new snippet page' do
65
      visit project_path(project)
T
Tim Zallmann 已提交
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

      page.within '.header-content' do
        find('.header-new-dropdown-toggle').trigger('click')
        expect(page).to have_selector('.header-new.dropdown.open', count: 1)
        find('.header-new-project-snippet a').trigger('click')
      end

      expect(page).to have_content('New Snippet')
      expect(page).to have_content('Title')
    end

    scenario 'Click on New subgroup shows new group page' do
      visit group_path(group)

      click_topmenuitem("New subgroup")

      expect(page).to have_content('Group path')
      expect(page).to have_content('Group name')
    end

    scenario 'Click on New project in group shows new project page' do
      visit group_path(group)

      page.within '.header-content' do
        find('.header-new-dropdown-toggle').trigger('click')
        expect(page).to have_selector('.header-new.dropdown.open', count: 1)
        find('.header-new-group-project a').trigger('click')
      end

      expect(page).to have_content('Project path')
      expect(page).to have_content('Project name')
    end
T
Tim Zallmann 已提交
98 99
  end

100
  context 'used by guest user' do
101 102
    let(:guest_user) { create(:user) }

103
    before do
104 105 106
      group.add_guest(guest_user)
      project.add_guest(guest_user)

107
      sign_in(guest_user)
108 109 110
    end

    scenario 'click on New issue shows new issue page' do
111
      visit project_path(project)
112 113 114 115 116 117 118 119

      click_topmenuitem("New issue")

      expect(page).to have_content('New Issue')
      expect(page).to have_content('Title')
    end

    scenario 'has no New merge request menu item' do
120
      visit project_path(project)
121 122 123 124 125

      hasnot_topmenuitem("New merge request")
    end

    scenario 'has no New project snippet menu item' do
126
      visit project_path(project)
127 128 129 130

      expect(find('.header-new.dropdown')).not_to have_selector('.header-new-project-snippet')
    end

131
    scenario 'public project has no New Issue Button' do
132
      visit project_path(public_project)
133 134 135 136 137

      hasnot_topmenuitem("New issue")
    end

    scenario 'public project has no New merge request menu item' do
138
      visit project_path(public_project)
139 140 141 142 143

      hasnot_topmenuitem("New merge request")
    end

    scenario 'public project has no New project snippet menu item' do
144
      visit project_path(public_project)
145 146 147 148

      expect(find('.header-new.dropdown')).not_to have_selector('.header-new-project-snippet')
    end

149 150 151 152 153 154 155 156
    scenario 'has no New subgroup menu item' do
      visit group_path(group)

      hasnot_topmenuitem("New subgroup")
    end

    scenario 'has no New project for group menu item' do
      visit group_path(group)
157

158 159 160 161
      expect(find('.header-new.dropdown')).not_to have_selector('.header-new-group-project')
    end
  end

T
Tim Zallmann 已提交
162 163 164 165 166 167 168
  def click_topmenuitem(item_name)
    page.within '.header-content' do
      find('.header-new-dropdown-toggle').trigger('click')
      expect(page).to have_selector('.header-new.dropdown.open', count: 1)
      click_link item_name
    end
  end
169 170

  def hasnot_topmenuitem(item_name)
T
Tim Zallmann 已提交
171
    expect(find('.header-new.dropdown')).not_to have_content(item_name)
172
  end
T
Tim Zallmann 已提交
173
end