summaryrefslogtreecommitdiff
path: root/features/steps/admin/groups.rb
blob: e1f1db2872fdad292b8e8ca628a2b094318be028 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
class Spinach::Features::AdminGroups < Spinach::FeatureSteps
  include SharedAuthentication
  include SharedGroup
  include SharedPaths
  include SharedUser
  include SharedActiveTab
  include Select2Helper

  When 'I visit admin group page' do
    visit admin_group_path(current_group)
  end

  When 'I click new group link' do
    click_link "New Group"
  end

  step 'I have group with projects' do
    @group   = create(:group)
    @project = create(:project, group: @group)
    @event   = create(:closed_issue_event, project: @project)

    @project.team << [current_user, :master]
  end

  step 'submit form with new group info' do
    fill_in 'group_path', with: 'gitlab'
    fill_in 'group_description', with: 'Group description'
    click_button "Create group"
  end

  step 'I should see newly created group' do
    expect(page).to have_content "Group: gitlab"
    expect(page).to have_content "Group description"
  end

  step 'I should be redirected to group page' do
    expect(current_path).to eq admin_group_path(Group.find_by(path: 'gitlab'))
  end

  When 'I select user "John Doe" from user list as "Reporter"' do
    select2(user_john.id, from: "#user_ids", multiple: true)
    page.within "#new_project_member" do
      select "Reporter", from: "access_level"
    end
    click_button "Add users to group"
  end

  When 'I select user "johndoe@gitlab.com" from user list as "Reporter"' do
    select2('johndoe@gitlab.com', from: "#user_ids", multiple: true)
    page.within "#new_project_member" do
      select "Reporter", from: "access_level"
    end
    click_button "Add users to group"
  end

  step 'I should see "John Doe" in team list in every project as "Reporter"' do
    page.within ".group-users-list" do
      expect(page).to have_content "John Doe"
      expect(page).to have_content "Reporter"
    end
  end

  step 'I should see "johndoe@gitlab.com" in team list in every project as "Reporter"' do
    page.within ".group-users-list" do
      expect(page).to have_content "johndoe@gitlab.com (invited)"
      expect(page).to have_content "Reporter"
    end
  end

  step 'I should be all groups' do
    Group.all.each do |group|
      expect(page).to have_content group.name
    end
  end

  step 'group has shared projects' do
    share_link = shared_project.project_group_links.new(group_access: Gitlab::Access::MASTER)
    share_link.group_id = current_group.id
    share_link.save!
  end

  step 'I visit group page' do
    visit admin_group_path(current_group)
  end

  step 'I should see project shared with group' do
    expect(page).to have_content(shared_project.name_with_namespace)
    expect(page).to have_content "Projects shared with"
  end

  step 'we have user "John Doe" in group' do
    current_group.add_reporter(user_john)
  end

  step 'I remove user "John Doe" from group' do
    page.within "#user_#{user_john.id}" do
      click_link 'Remove user from group'
    end
  end

  step 'I should not see "John Doe" in team list' do
    page.within ".group-users-list" do
      expect(page).not_to have_content "John Doe"
    end
  end

  step 'I select current user as "Developer"' do
    page.within ".users-group-form" do
      select2(current_user.id, from: "#user_ids", multiple: true)
      select "Developer", from: "access_level"
    end

    click_button "Add users to group"
  end

  step 'I should see current user as "Developer"' do
    page.within '.content-list' do
      expect(page).to have_content(current_user.name)
      expect(page).to have_content('Developer')
    end
  end

  step 'I click on the "Remove User From Group" button for current user' do
    find(:css, 'li', text: current_user.name).find(:css, 'a.btn-remove').click
    # poltergeist always confirms popups.
  end

  step 'I should not see current user as "Developer"' do
    page.within '.content-list' do
      expect(page).not_to have_content(current_user.name)
      expect(page).not_to have_content('Developer')
    end
  end

  protected

  def current_group
    @group ||= Group.first
  end

  def shared_project
    @shared_project ||= create(:empty_project)
  end

  def user_john
    @user_john ||= User.find_by(name: "John Doe")
  end
end