admin_projects_spec.rb 3.75 KB
Newer Older
1 2
# frozen_string_literal: true

gitlabhq's avatar
gitlabhq committed
3 4
require 'spec_helper'

5
RSpec.describe "Admin::Projects" do
6
  include Spec::Support::Helpers::Features::MembersHelpers
7 8 9
  include Select2Helper

  let(:user) { create :user }
10
  let(:project) { create(:project) }
11
  let(:current_user) { create(:admin) }
12 13 14

  before do
    sign_in(current_user)
15
    gitlab_enable_admin_mode_sign_in(current_user)
gitlabhq's avatar
gitlabhq committed
16 17 18
  end

  describe "GET /admin/projects" do
19
    let!(:archived_project) { create :project, :public, :archived }
20

Nihad Abbasov's avatar
Nihad Abbasov committed
21
    before do
22
      expect(project).to be_persisted
23
      visit admin_projects_path
gitlabhq's avatar
gitlabhq committed
24 25
    end

26
    it "is ok" do
27
      expect(current_path).to eq(admin_projects_path)
gitlabhq's avatar
gitlabhq committed
28 29
    end

30 31 32 33 34
    it 'renders projects list without archived project' do
      expect(page).to have_content(project.name)
      expect(page).not_to have_content(archived_project.name)
    end

35
    it 'renders all projects', :js do
36 37 38 39 40
      find(:css, '#sort-projects-dropdown').click
      click_link 'Show archived projects'

      expect(page).to have_content(project.name)
      expect(page).to have_content(archived_project.name)
Clement Ho's avatar
Clement Ho committed
41
      expect(page).to have_xpath("//span[@class='badge badge-warning']", text: 'archived')
gitlabhq's avatar
gitlabhq committed
42
    end
43

44
    it 'renders only archived projects', :js do
45 46 47 48 49 50
      find(:css, '#sort-projects-dropdown').click
      click_link 'Show archived projects only'

      expect(page).to have_content(archived_project.name)
      expect(page).not_to have_content(project.name)
    end
gitlabhq's avatar
gitlabhq committed
51 52
  end

53
  describe "GET /admin/projects/:namespace_id/:id" do
Nihad Abbasov's avatar
Nihad Abbasov committed
54
    before do
55
      expect(project).to be_persisted
56

57 58
      visit admin_projects_path
      click_link project.name
gitlabhq's avatar
gitlabhq committed
59 60
    end

61
    it "has project info" do
62
      expect(current_path).to eq admin_project_path(project)
63 64
      expect(page).to have_content(project.path)
      expect(page).to have_content(project.name)
65
      expect(page).to have_content(project.full_name)
66
      expect(page).to have_content(project.creator.name)
67
      expect(page).to have_content(project.id)
68 69 70 71
    end
  end

  describe 'transfer project' do
72 73 74
    # The gitlab-shell transfer will fail for a project without a repository
    let(:project) { create(:project, :repository) }

75 76 77
    before do
      create(:group, name: 'Web')

78 79 80
      allow_next_instance_of(Projects::TransferService) do |instance|
        allow(instance).to receive(:move_uploads_to_new_namespace).and_return(true)
      end
81 82
    end

83
    it 'transfers project to group web', :js do
84
      visit admin_project_path(project)
85 86 87 88 89 90 91 92 93 94

      click_button 'Search for Namespace'
      click_link 'group: web'
      click_button 'Transfer'

      expect(page).to have_content("Web / #{project.name}")
      expect(page).to have_content('Namespace: Web')
    end
  end

95 96 97 98
  describe 'admin adds themselves to the project', :js do
    before do
      project.add_maintainer(user)
      stub_feature_flags(invite_members_group_modal: false)
99 100
    end

101 102
    it 'adds admin to the project as developer' do
      visit project_project_members_path(project)
103

104 105 106 107
      page.within '.invite-users-form' do
        select2(current_user.id, from: '#user_ids', multiple: true)
        select 'Developer', from: 'access_level'
      end
108

109
      click_button 'Invite'
110

111
      expect(find_member_row(current_user)).to have_content('Developer')
112 113 114
    end
  end

115
  describe 'admin removes themselves from the project', :js do
116
    before do
117 118
      project.add_maintainer(user)
      project.add_developer(current_user)
119 120
    end

121 122
    it 'removes admin from the project' do
      visit project_project_members_path(project)
123

124
      expect(find_member_row(current_user)).to have_content('Developer')
125

126 127
      page.within find_member_row(current_user) do
        click_button 'Leave'
128 129
      end

130 131
      page.within('[role="dialog"]') do
        click_button('Leave')
132 133
      end

134
      expect(current_path).to match dashboard_projects_path
gitlabhq's avatar
gitlabhq committed
135 136 137
    end
  end
end