Split group feature tests
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
561634c78f
commit
d262daa4f0
10 changed files with 380 additions and 356 deletions
|
@ -24,7 +24,7 @@
|
||||||
= form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do
|
= form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do
|
||||||
.form-group
|
.form-group
|
||||||
= search_field_tag :search, params[:search], { placeholder: 'Find existing member by name', class: 'form-control', spellcheck: false }
|
= search_field_tag :search, params[:search], { placeholder: 'Find existing member by name', class: 'form-control', spellcheck: false }
|
||||||
= button_tag class: 'btn' do
|
= button_tag class: 'btn', title: 'Search' do
|
||||||
= icon("search")
|
= icon("search")
|
||||||
%ul.content-list
|
%ul.content-list
|
||||||
- @members.each do |member|
|
- @members.each do |member|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
= form_tag namespace_project_project_members_path(@project.namespace, @project), method: :get, class: 'form-inline member-search-form' do
|
= form_tag namespace_project_project_members_path(@project.namespace, @project), method: :get, class: 'form-inline member-search-form' do
|
||||||
.form-group
|
.form-group
|
||||||
= search_field_tag :search, params[:search], { placeholder: 'Find existing member by name', class: 'form-control', spellcheck: false }
|
= search_field_tag :search, params[:search], { placeholder: 'Find existing member by name', class: 'form-control', spellcheck: false }
|
||||||
= button_tag class: 'btn' do
|
= button_tag class: 'btn', title: 'Search' do
|
||||||
= icon("search")
|
= icon("search")
|
||||||
%ul.content-list
|
%ul.content-list
|
||||||
- members.each do |project_member|
|
- members.each do |project_member|
|
||||||
|
|
105
features/group/members.feature
Normal file
105
features/group/members.feature
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
Feature: Group Members
|
||||||
|
Background:
|
||||||
|
Given I sign in as "John Doe"
|
||||||
|
And "John Doe" is owner of group "Owned"
|
||||||
|
And "John Doe" is guest of group "Guest"
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: I should add user to group "Owned"
|
||||||
|
Given User "Mary Jane" exists
|
||||||
|
When I visit group "Owned" members page
|
||||||
|
And I select user "Mary Jane" from list with role "Reporter"
|
||||||
|
Then I should see user "Mary Jane" in team list
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Add user to group
|
||||||
|
Given gitlab user "Mike"
|
||||||
|
When I visit group "Owned" members page
|
||||||
|
When I select "Mike" as "Reporter"
|
||||||
|
Then I should see "Mike" in team list as "Reporter"
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Ignore add user to group when is already Owner
|
||||||
|
Given gitlab user "Mike"
|
||||||
|
When I visit group "Owned" members page
|
||||||
|
When I select "Mike" as "Reporter"
|
||||||
|
Then I should see "Mike" in team list as "Owner"
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Invite user to group
|
||||||
|
When I visit group "Owned" members page
|
||||||
|
When I select "sjobs@apple.com" as "Reporter"
|
||||||
|
Then I should see "sjobs@apple.com" in team list as invited "Reporter"
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Edit group member permissions
|
||||||
|
Given "Mary Jane" is guest of group "Owned"
|
||||||
|
And I visit group "Owned" members page
|
||||||
|
When I change the "Mary Jane" role to "Developer"
|
||||||
|
Then I should see "Mary Jane" as "Developer"
|
||||||
|
|
||||||
|
# Leave
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Owner should be able to remove himself from group if he is not the last owner
|
||||||
|
Given "Mary Jane" is owner of group "Owned"
|
||||||
|
When I visit group "Owned" members page
|
||||||
|
Then I should see user "John Doe" in team list
|
||||||
|
Then I should see user "Mary Jane" in team list
|
||||||
|
When I click on the "Remove User From Group" button for "John Doe"
|
||||||
|
And I visit group "Owned" members page
|
||||||
|
Then I should not see user "John Doe" in team list
|
||||||
|
Then I should see user "Mary Jane" in team list
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Owner should not be able to remove himself from group if he is the last owner
|
||||||
|
Given "Mary Jane" is guest of group "Owned"
|
||||||
|
When I visit group "Owned" members page
|
||||||
|
Then I should see user "John Doe" in team list
|
||||||
|
Then I should see user "Mary Jane" in team list
|
||||||
|
Then I should not see the "Remove User From Group" button for "John Doe"
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Guest should be able to remove himself from group
|
||||||
|
Given "Mary Jane" is guest of group "Guest"
|
||||||
|
When I visit group "Guest" members page
|
||||||
|
Then I should see user "John Doe" in team list
|
||||||
|
Then I should see user "Mary Jane" in team list
|
||||||
|
When I click on the "Remove User From Group" button for "John Doe"
|
||||||
|
When I visit group "Guest" members page
|
||||||
|
Then I should not see user "John Doe" in team list
|
||||||
|
Then I should see user "Mary Jane" in team list
|
||||||
|
|
||||||
|
@javascript
|
||||||
|
Scenario: Guest should be able to remove himself from group even if he is the only user in the group
|
||||||
|
When I visit group "Guest" members page
|
||||||
|
Then I should see user "John Doe" in team list
|
||||||
|
When I click on the "Remove User From Group" button for "John Doe"
|
||||||
|
When I visit group "Guest" members page
|
||||||
|
Then I should not see user "John Doe" in team list
|
||||||
|
|
||||||
|
# Remove others
|
||||||
|
|
||||||
|
Scenario: Owner should be able to remove other users from group
|
||||||
|
Given "Mary Jane" is owner of group "Owned"
|
||||||
|
When I visit group "Owned" members page
|
||||||
|
Then I should see user "John Doe" in team list
|
||||||
|
Then I should see user "Mary Jane" in team list
|
||||||
|
When I click on the "Remove User From Group" button for "Mary Jane"
|
||||||
|
When I visit group "Owned" members page
|
||||||
|
Then I should see user "John Doe" in team list
|
||||||
|
Then I should not see user "Mary Jane" in team list
|
||||||
|
|
||||||
|
Scenario: Guest should not be able to remove other users from group
|
||||||
|
Given "Mary Jane" is guest of group "Guest"
|
||||||
|
When I visit group "Guest" members page
|
||||||
|
Then I should see user "John Doe" in team list
|
||||||
|
Then I should see user "Mary Jane" in team list
|
||||||
|
Then I should not see the "Remove User From Group" button for "Mary Jane"
|
||||||
|
|
||||||
|
Scenario: Search member by name
|
||||||
|
Given "Mary Jane" is guest of group "Guest"
|
||||||
|
And I visit group "Guest" members page
|
||||||
|
When I search for 'Mary' member
|
||||||
|
Then I should see user "Mary Jane" in team list
|
||||||
|
Then I should not see user "John Doe" in team list
|
30
features/group/milestones.feature
Normal file
30
features/group/milestones.feature
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
Feature: Group Milestones
|
||||||
|
Background:
|
||||||
|
Given I sign in as "John Doe"
|
||||||
|
And "John Doe" is owner of group "Owned"
|
||||||
|
|
||||||
|
Scenario: I should see group "Owned" milestone index page with no milestones
|
||||||
|
When I visit group "Owned" page
|
||||||
|
And I click on group milestones
|
||||||
|
Then I should see group milestones index page has no milestones
|
||||||
|
|
||||||
|
Scenario: I should see group "Owned" milestone index page with milestones
|
||||||
|
Given Group has projects with milestones
|
||||||
|
When I visit group "Owned" page
|
||||||
|
And I click on group milestones
|
||||||
|
Then I should see group milestones index page with milestones
|
||||||
|
|
||||||
|
Scenario: I should see group "Owned" milestone show page
|
||||||
|
Given Group has projects with milestones
|
||||||
|
When I visit group "Owned" page
|
||||||
|
And I click on group milestones
|
||||||
|
And I click on one group milestone
|
||||||
|
Then I should see group milestone with descriptions and expiry date
|
||||||
|
And I should see group milestone with all issues and MRs assigned to that milestone
|
||||||
|
|
||||||
|
Scenario: Create multiple milestones with one form
|
||||||
|
Given I visit group "Owned" milestones page
|
||||||
|
And I click new milestone button
|
||||||
|
And I fill milestone name
|
||||||
|
When I press create mileston button
|
||||||
|
Then milestone in each project should be created
|
|
@ -2,7 +2,6 @@ Feature: Groups
|
||||||
Background:
|
Background:
|
||||||
Given I sign in as "John Doe"
|
Given I sign in as "John Doe"
|
||||||
And "John Doe" is owner of group "Owned"
|
And "John Doe" is owner of group "Owned"
|
||||||
And "John Doe" is guest of group "Guest"
|
|
||||||
|
|
||||||
Scenario: I should have back to group button
|
Scenario: I should have back to group button
|
||||||
When I visit group "Owned" page
|
When I visit group "Owned" page
|
||||||
|
@ -24,13 +23,6 @@ Feature: Groups
|
||||||
When I visit group "Owned" merge requests page
|
When I visit group "Owned" merge requests page
|
||||||
Then I should see merge requests from group "Owned" assigned to me
|
Then I should see merge requests from group "Owned" assigned to me
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: I should add user to projects in group "Owned"
|
|
||||||
Given User "Mary Jane" exists
|
|
||||||
When I visit group "Owned" members page
|
|
||||||
And I select user "Mary Jane" from list with role "Reporter"
|
|
||||||
Then I should see user "Mary Jane" in team list
|
|
||||||
|
|
||||||
Scenario: I should see edit group "Owned" page
|
Scenario: I should see edit group "Owned" page
|
||||||
When I visit group "Owned" settings page
|
When I visit group "Owned" settings page
|
||||||
And I change group "Owned" name to "new-name"
|
And I change group "Owned" name to "new-name"
|
||||||
|
@ -51,127 +43,6 @@ Feature: Groups
|
||||||
Then I should not see group "Owned" avatar
|
Then I should not see group "Owned" avatar
|
||||||
And I should not see the "Remove avatar" button
|
And I should not see the "Remove avatar" button
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Add user to group
|
|
||||||
Given gitlab user "Mike"
|
|
||||||
When I visit group "Owned" members page
|
|
||||||
When I select "Mike" as "Reporter"
|
|
||||||
Then I should see "Mike" in team list as "Reporter"
|
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Ignore add user to group when is already Owner
|
|
||||||
Given gitlab user "Mike"
|
|
||||||
When I visit group "Owned" members page
|
|
||||||
When I select "Mike" as "Reporter"
|
|
||||||
Then I should see "Mike" in team list as "Owner"
|
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Invite user to group
|
|
||||||
When I visit group "Owned" members page
|
|
||||||
When I select "sjobs@apple.com" as "Reporter"
|
|
||||||
Then I should see "sjobs@apple.com" in team list as invited "Reporter"
|
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Edit group member permissions
|
|
||||||
Given "Mary Jane" is guest of group "Owned"
|
|
||||||
And I visit group "Owned" members page
|
|
||||||
When I change the "Mary Jane" role to "Developer"
|
|
||||||
Then I should see "Mary Jane" as "Developer"
|
|
||||||
|
|
||||||
# Leave
|
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Owner should be able to remove himself from group if he is not the last owner
|
|
||||||
Given "Mary Jane" is owner of group "Owned"
|
|
||||||
When I visit group "Owned" members page
|
|
||||||
Then I should see user "John Doe" in team list
|
|
||||||
Then I should see user "Mary Jane" in team list
|
|
||||||
When I click on the "Remove User From Group" button for "John Doe"
|
|
||||||
And I visit group "Owned" members page
|
|
||||||
Then I should not see user "John Doe" in team list
|
|
||||||
Then I should see user "Mary Jane" in team list
|
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Owner should not be able to remove himself from group if he is the last owner
|
|
||||||
Given "Mary Jane" is guest of group "Owned"
|
|
||||||
When I visit group "Owned" members page
|
|
||||||
Then I should see user "John Doe" in team list
|
|
||||||
Then I should see user "Mary Jane" in team list
|
|
||||||
Then I should not see the "Remove User From Group" button for "John Doe"
|
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Guest should be able to remove himself from group
|
|
||||||
Given "Mary Jane" is guest of group "Guest"
|
|
||||||
When I visit group "Guest" members page
|
|
||||||
Then I should see user "John Doe" in team list
|
|
||||||
Then I should see user "Mary Jane" in team list
|
|
||||||
When I click on the "Remove User From Group" button for "John Doe"
|
|
||||||
When I visit group "Guest" members page
|
|
||||||
Then I should not see user "John Doe" in team list
|
|
||||||
Then I should see user "Mary Jane" in team list
|
|
||||||
|
|
||||||
@javascript
|
|
||||||
Scenario: Guest should be able to remove himself from group even if he is the only user in the group
|
|
||||||
When I visit group "Guest" members page
|
|
||||||
Then I should see user "John Doe" in team list
|
|
||||||
When I click on the "Remove User From Group" button for "John Doe"
|
|
||||||
When I visit group "Guest" members page
|
|
||||||
Then I should not see user "John Doe" in team list
|
|
||||||
|
|
||||||
# Remove others
|
|
||||||
|
|
||||||
Scenario: Owner should be able to remove other users from group
|
|
||||||
Given "Mary Jane" is owner of group "Owned"
|
|
||||||
When I visit group "Owned" members page
|
|
||||||
Then I should see user "John Doe" in team list
|
|
||||||
Then I should see user "Mary Jane" in team list
|
|
||||||
When I click on the "Remove User From Group" button for "Mary Jane"
|
|
||||||
When I visit group "Owned" members page
|
|
||||||
Then I should see user "John Doe" in team list
|
|
||||||
Then I should not see user "Mary Jane" in team list
|
|
||||||
|
|
||||||
Scenario: Guest should not be able to remove other users from group
|
|
||||||
Given "Mary Jane" is guest of group "Guest"
|
|
||||||
When I visit group "Guest" members page
|
|
||||||
Then I should see user "John Doe" in team list
|
|
||||||
Then I should see user "Mary Jane" in team list
|
|
||||||
Then I should not see the "Remove User From Group" button for "Mary Jane"
|
|
||||||
|
|
||||||
Scenario: Search member by name
|
|
||||||
Given "Mary Jane" is guest of group "Guest"
|
|
||||||
And I visit group "Guest" members page
|
|
||||||
When I search for 'Mary' member
|
|
||||||
Then I should see user "Mary Jane" in team list
|
|
||||||
Then I should not see user "John Doe" in team list
|
|
||||||
|
|
||||||
# Group milestones
|
|
||||||
|
|
||||||
Scenario: I should see group "Owned" milestone index page with no milestones
|
|
||||||
When I visit group "Owned" page
|
|
||||||
And I click on group milestones
|
|
||||||
Then I should see group milestones index page has no milestones
|
|
||||||
|
|
||||||
Scenario: I should see group "Owned" milestone index page with milestones
|
|
||||||
Given Group has projects with milestones
|
|
||||||
When I visit group "Owned" page
|
|
||||||
And I click on group milestones
|
|
||||||
Then I should see group milestones index page with milestones
|
|
||||||
|
|
||||||
Scenario: I should see group "Owned" milestone show page
|
|
||||||
Given Group has projects with milestones
|
|
||||||
When I visit group "Owned" page
|
|
||||||
And I click on group milestones
|
|
||||||
And I click on one group milestone
|
|
||||||
Then I should see group milestone with descriptions and expiry date
|
|
||||||
And I should see group milestone with all issues and MRs assigned to that milestone
|
|
||||||
|
|
||||||
Scenario: Create multiple milestones with one form
|
|
||||||
Given I visit group "Owned" milestones page
|
|
||||||
And I click new milestone button
|
|
||||||
And I fill milestone name
|
|
||||||
When I press create mileston button
|
|
||||||
Then milestone in each project should be created
|
|
||||||
|
|
||||||
# Group projects in settings
|
# Group projects in settings
|
||||||
Scenario: I should see all projects in the project list in settings
|
Scenario: I should see all projects in the project list in settings
|
||||||
Given Group "Owned" has archived project
|
Given Group "Owned" has archived project
|
||||||
|
|
147
features/steps/group/members.rb
Normal file
147
features/steps/group/members.rb
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
class Spinach::Features::GroupMembers < Spinach::FeatureSteps
|
||||||
|
include SharedAuthentication
|
||||||
|
include SharedPaths
|
||||||
|
include SharedGroup
|
||||||
|
include SharedUser
|
||||||
|
include Select2Helper
|
||||||
|
|
||||||
|
step 'I select "Mike" as "Reporter"' do
|
||||||
|
user = User.find_by(name: "Mike")
|
||||||
|
|
||||||
|
page.within ".users-group-form" do
|
||||||
|
select2(user.id, from: "#user_ids", multiple: true)
|
||||||
|
select "Reporter", from: "access_level"
|
||||||
|
end
|
||||||
|
|
||||||
|
click_button "Add users to group"
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I select "Mike" as "Master"' do
|
||||||
|
user = User.find_by(name: "Mike")
|
||||||
|
|
||||||
|
page.within ".users-group-form" do
|
||||||
|
select2(user.id, from: "#user_ids", multiple: true)
|
||||||
|
select "Master", from: "access_level"
|
||||||
|
end
|
||||||
|
|
||||||
|
click_button "Add users to group"
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see "Mike" in team list as "Reporter"' do
|
||||||
|
page.within '.content-list' do
|
||||||
|
expect(page).to have_content('Mike')
|
||||||
|
expect(page).to have_content('Reporter')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see "Mike" in team list as "Owner"' do
|
||||||
|
page.within '.content-list' do
|
||||||
|
expect(page).to have_content('Mike')
|
||||||
|
expect(page).to have_content('Owner')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I select "sjobs@apple.com" as "Reporter"' do
|
||||||
|
page.within ".users-group-form" do
|
||||||
|
select2("sjobs@apple.com", from: "#user_ids", multiple: true)
|
||||||
|
select "Reporter", from: "access_level"
|
||||||
|
end
|
||||||
|
|
||||||
|
click_button "Add users to group"
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see "sjobs@apple.com" in team list as invited "Reporter"' do
|
||||||
|
page.within '.content-list' do
|
||||||
|
expect(page).to have_content('sjobs@apple.com')
|
||||||
|
expect(page).to have_content('invited')
|
||||||
|
expect(page).to have_content('Reporter')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I select user "Mary Jane" from list with role "Reporter"' do
|
||||||
|
user = User.find_by(name: "Mary Jane") || create(:user, name: "Mary Jane")
|
||||||
|
|
||||||
|
page.within ".users-group-form" do
|
||||||
|
select2(user.id, from: "#user_ids", multiple: true)
|
||||||
|
select "Reporter", from: "access_level"
|
||||||
|
end
|
||||||
|
|
||||||
|
click_button "Add users to group"
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see user "John Doe" in team list' do
|
||||||
|
expect(group_members_list).to have_content("John Doe")
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should not see user "John Doe" in team list' do
|
||||||
|
expect(group_members_list).not_to have_content("John Doe")
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see user "Mary Jane" in team list' do
|
||||||
|
expect(group_members_list).to have_content("Mary Jane")
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should not see user "Mary Jane" in team list' do
|
||||||
|
expect(group_members_list).not_to have_content("Mary Jane")
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I click on the "Remove User From Group" button for "John Doe"' do
|
||||||
|
find(:css, 'li', text: "John Doe").find(:css, 'a.btn-remove').click
|
||||||
|
# poltergeist always confirms popups.
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I click on the "Remove User From Group" button for "Mary Jane"' do
|
||||||
|
find(:css, 'li', text: "Mary Jane").find(:css, 'a.btn-remove').click
|
||||||
|
# poltergeist always confirms popups.
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should not see the "Remove User From Group" button for "John Doe"' do
|
||||||
|
expect(find(:css, 'li', text: "John Doe")).not_to have_selector(:css, 'a.btn-remove')
|
||||||
|
# poltergeist always confirms popups.
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should not see the "Remove User From Group" button for "Mary Jane"' do
|
||||||
|
expect(find(:css, 'li', text: "Mary Jane")).not_to have_selector(:css, 'a.btn-remove')
|
||||||
|
# poltergeist always confirms popups.
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I search for \'Mary\' member' do
|
||||||
|
page.within '.member-search-form' do
|
||||||
|
fill_in 'search', with: 'Mary'
|
||||||
|
click_button 'Search'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I change the "Mary Jane" role to "Developer"' do
|
||||||
|
member = mary_jane_member
|
||||||
|
|
||||||
|
page.within "#group_member_#{member.id}" do
|
||||||
|
find(".js-toggle-button").click
|
||||||
|
page.within "#edit_group_member_#{member.id}" do
|
||||||
|
select 'Developer', from: 'group_member_access_level'
|
||||||
|
click_on 'Save'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see "Mary Jane" as "Developer"' do
|
||||||
|
member = mary_jane_member
|
||||||
|
|
||||||
|
page.within "#group_member_#{member.id}" do
|
||||||
|
page.within '.member-access-level' do
|
||||||
|
expect(page).to have_content "Developer"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def mary_jane_member
|
||||||
|
user = User.find_by(name: "Mary Jane")
|
||||||
|
owned_group.members.find_by(user_id: user.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def group_members_list
|
||||||
|
find(".panel .content-list")
|
||||||
|
end
|
||||||
|
end
|
87
features/steps/group/milestones.rb
Normal file
87
features/steps/group/milestones.rb
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
class Spinach::Features::GroupMilestones < Spinach::FeatureSteps
|
||||||
|
include SharedAuthentication
|
||||||
|
include SharedPaths
|
||||||
|
include SharedGroup
|
||||||
|
include SharedUser
|
||||||
|
|
||||||
|
step 'I click on group milestones' do
|
||||||
|
click_link 'Milestones'
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see group milestones index page has no milestones' do
|
||||||
|
expect(page).to have_content('No milestones to show')
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'Group has projects with milestones' do
|
||||||
|
group_milestone
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see group milestones index page with milestones' do
|
||||||
|
expect(page).to have_content('Version 7.2')
|
||||||
|
expect(page).to have_content('GL-113')
|
||||||
|
expect(page).to have_link('3 Issues', href: issues_group_path("owned", milestone_title: "Version 7.2"))
|
||||||
|
expect(page).to have_link('0 Merge Requests', href: merge_requests_group_path("owned", milestone_title: "GL-113"))
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I click on one group milestone' do
|
||||||
|
click_link 'GL-113'
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see group milestone with descriptions and expiry date' do
|
||||||
|
expect(page).to have_content('expires at Aug 20, 2114')
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I should see group milestone with all issues and MRs assigned to that milestone' do
|
||||||
|
expect(page).to have_content('Milestone GL-113')
|
||||||
|
expect(page).to have_content('Progress: 0 closed – 3 open')
|
||||||
|
issue = Milestone.find_by(name: 'GL-113').issues.first
|
||||||
|
expect(page).to have_link(issue.title, href: namespace_project_issue_path(issue.project.namespace, issue.project, issue))
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I fill milestone name' do
|
||||||
|
fill_in 'milestone_title', with: 'v2.9.0'
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I click new milestone button' do
|
||||||
|
click_link "New Milestone"
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'I press create mileston button' do
|
||||||
|
click_button "Create Milestone"
|
||||||
|
end
|
||||||
|
|
||||||
|
step 'milestone in each project should be created' do
|
||||||
|
group = Group.find_by(name: 'Owned')
|
||||||
|
expect(page).to have_content "Milestone v2.9.0"
|
||||||
|
expect(group.projects).to be_present
|
||||||
|
|
||||||
|
group.projects.each do |project|
|
||||||
|
expect(page).to have_content project.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def group_milestone
|
||||||
|
group = owned_group
|
||||||
|
|
||||||
|
%w(gitlabhq gitlab-ci cookbook-gitlab).each do |path|
|
||||||
|
project = create :project, path: path, group: group
|
||||||
|
milestone = create :milestone, title: "Version 7.2", project: project
|
||||||
|
create :issue,
|
||||||
|
project: project,
|
||||||
|
assignee: current_user,
|
||||||
|
author: current_user,
|
||||||
|
milestone: milestone
|
||||||
|
|
||||||
|
milestone = create :milestone, title: "GL-113", project: project,
|
||||||
|
due_date: '2114-08-20', description: 'Lorem Ipsum is simply dummy text'
|
||||||
|
|
||||||
|
create :issue,
|
||||||
|
project: project,
|
||||||
|
assignee: current_user,
|
||||||
|
author: current_user,
|
||||||
|
milestone: milestone
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -3,16 +3,11 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
|
||||||
include SharedPaths
|
include SharedPaths
|
||||||
include SharedGroup
|
include SharedGroup
|
||||||
include SharedUser
|
include SharedUser
|
||||||
include Select2Helper
|
|
||||||
|
|
||||||
step 'I should see back to dashboard button' do
|
step 'I should see back to dashboard button' do
|
||||||
expect(page).to have_content 'Go to dashboard'
|
expect(page).to have_content 'Go to dashboard'
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'gitlab user "Mike"' do
|
|
||||||
create(:user, name: "Mike")
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see group "Owned"' do
|
step 'I should see group "Owned"' do
|
||||||
expect(page).to have_content '@owned'
|
expect(page).to have_content '@owned'
|
||||||
end
|
end
|
||||||
|
@ -33,59 +28,6 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
|
||||||
expect(page).to have_content 'Public-project'
|
expect(page).to have_content 'Public-project'
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I select "Mike" as "Reporter"' do
|
|
||||||
user = User.find_by(name: "Mike")
|
|
||||||
|
|
||||||
page.within ".users-group-form" do
|
|
||||||
select2(user.id, from: "#user_ids", multiple: true)
|
|
||||||
select "Reporter", from: "access_level"
|
|
||||||
end
|
|
||||||
|
|
||||||
click_button "Add users to group"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I select "Mike" as "Master"' do
|
|
||||||
user = User.find_by(name: "Mike")
|
|
||||||
|
|
||||||
page.within ".users-group-form" do
|
|
||||||
select2(user.id, from: "#user_ids", multiple: true)
|
|
||||||
select "Master", from: "access_level"
|
|
||||||
end
|
|
||||||
|
|
||||||
click_button "Add users to group"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see "Mike" in team list as "Reporter"' do
|
|
||||||
page.within '.content-list' do
|
|
||||||
expect(page).to have_content('Mike')
|
|
||||||
expect(page).to have_content('Reporter')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see "Mike" in team list as "Owner"' do
|
|
||||||
page.within '.content-list' do
|
|
||||||
expect(page).to have_content('Mike')
|
|
||||||
expect(page).to have_content('Owner')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I select "sjobs@apple.com" as "Reporter"' do
|
|
||||||
page.within ".users-group-form" do
|
|
||||||
select2("sjobs@apple.com", from: "#user_ids", multiple: true)
|
|
||||||
select "Reporter", from: "access_level"
|
|
||||||
end
|
|
||||||
|
|
||||||
click_button "Add users to group"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see "sjobs@apple.com" in team list as invited "Reporter"' do
|
|
||||||
page.within '.content-list' do
|
|
||||||
expect(page).to have_content('sjobs@apple.com')
|
|
||||||
expect(page).to have_content('invited')
|
|
||||||
expect(page).to have_content('Reporter')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see group "Owned" projects list' do
|
step 'I should see group "Owned" projects list' do
|
||||||
owned_group.projects.each do |project|
|
owned_group.projects.each do |project|
|
||||||
expect(page).to have_link project.name
|
expect(page).to have_link project.name
|
||||||
|
@ -108,33 +50,6 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I select user "Mary Jane" from list with role "Reporter"' do
|
|
||||||
user = User.find_by(name: "Mary Jane") || create(:user, name: "Mary Jane")
|
|
||||||
|
|
||||||
page.within ".users-group-form" do
|
|
||||||
select2(user.id, from: "#user_ids", multiple: true)
|
|
||||||
select "Reporter", from: "access_level"
|
|
||||||
end
|
|
||||||
|
|
||||||
click_button "Add users to group"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see user "John Doe" in team list' do
|
|
||||||
expect(group_members_list).to have_content("John Doe")
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should not see user "John Doe" in team list' do
|
|
||||||
expect(group_members_list).not_to have_content("John Doe")
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see user "Mary Jane" in team list' do
|
|
||||||
expect(group_members_list).to have_content("Mary Jane")
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should not see user "Mary Jane" in team list' do
|
|
||||||
expect(group_members_list).not_to have_content("Mary Jane")
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'project from group "Owned" has issues assigned to me' do
|
step 'project from group "Owned" has issues assigned to me' do
|
||||||
create :issue,
|
create :issue,
|
||||||
project: project,
|
project: project,
|
||||||
|
@ -196,67 +111,6 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
|
||||||
expect(page).not_to have_link("Remove avatar")
|
expect(page).not_to have_link("Remove avatar")
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I click on the "Remove User From Group" button for "John Doe"' do
|
|
||||||
find(:css, 'li', text: "John Doe").find(:css, 'a.btn-remove').click
|
|
||||||
# poltergeist always confirms popups.
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I click on the "Remove User From Group" button for "Mary Jane"' do
|
|
||||||
find(:css, 'li', text: "Mary Jane").find(:css, 'a.btn-remove').click
|
|
||||||
# poltergeist always confirms popups.
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should not see the "Remove User From Group" button for "John Doe"' do
|
|
||||||
expect(find(:css, 'li', text: "John Doe")).not_to have_selector(:css, 'a.btn-remove')
|
|
||||||
# poltergeist always confirms popups.
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should not see the "Remove User From Group" button for "Mary Jane"' do
|
|
||||||
expect(find(:css, 'li', text: "Mary Jane")).not_to have_selector(:css, 'a.btn-remove')
|
|
||||||
# poltergeist always confirms popups.
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I search for \'Mary\' member' do
|
|
||||||
page.within '.member-search-form' do
|
|
||||||
fill_in 'search', with: 'Mary'
|
|
||||||
click_button 'Search'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I click on group milestones' do
|
|
||||||
click_link 'Milestones'
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see group milestones index page has no milestones' do
|
|
||||||
expect(page).to have_content('No milestones to show')
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'Group has projects with milestones' do
|
|
||||||
group_milestone
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see group milestones index page with milestones' do
|
|
||||||
expect(page).to have_content('Version 7.2')
|
|
||||||
expect(page).to have_content('GL-113')
|
|
||||||
expect(page).to have_link('2 Issues', href: issues_group_path("owned", milestone_title: "Version 7.2"))
|
|
||||||
expect(page).to have_link('3 Merge Requests', href: merge_requests_group_path("owned", milestone_title: "GL-113"))
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I click on one group milestone' do
|
|
||||||
click_link 'GL-113'
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see group milestone with descriptions and expiry date' do
|
|
||||||
expect(page).to have_content('expires at Aug 20, 2114')
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see group milestone with all issues and MRs assigned to that milestone' do
|
|
||||||
expect(page).to have_content('Milestone GL-113')
|
|
||||||
expect(page).to have_content('Progress: 0 closed – 4 open')
|
|
||||||
expect(page).to have_link(@issue1.title, href: namespace_project_issue_path(@project1.namespace, @project1, @issue1))
|
|
||||||
expect(page).to have_link(@mr3.title, href: namespace_project_merge_request_path(@project3.namespace, @project3, @mr3))
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'Group "Owned" has archived project' do
|
step 'Group "Owned" has archived project' do
|
||||||
group = Group.find_by(name: 'Owned')
|
group = Group.find_by(name: 'Owned')
|
||||||
create(:project, namespace: group, archived: true, path: "archived-project")
|
create(:project, namespace: group, archived: true, path: "archived-project")
|
||||||
|
@ -266,60 +120,7 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
|
||||||
expect(page).to have_xpath("//span[@class='label label-warning']", text: 'archived')
|
expect(page).to have_xpath("//span[@class='label label-warning']", text: 'archived')
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I fill milestone name' do
|
private
|
||||||
fill_in 'milestone_title', with: 'v2.9.0'
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I click new milestone button' do
|
|
||||||
click_link "New Milestone"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I press create mileston button' do
|
|
||||||
click_button "Create Milestone"
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'milestone in each project should be created' do
|
|
||||||
group = Group.find_by(name: 'Owned')
|
|
||||||
expect(page).to have_content "Milestone v2.9.0"
|
|
||||||
expect(group.projects).to be_present
|
|
||||||
|
|
||||||
group.projects.each do |project|
|
|
||||||
expect(page).to have_content project.name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I change the "Mary Jane" role to "Developer"' do
|
|
||||||
member = mary_jane_member
|
|
||||||
|
|
||||||
page.within "#group_member_#{member.id}" do
|
|
||||||
find(".js-toggle-button").click
|
|
||||||
page.within "#edit_group_member_#{member.id}" do
|
|
||||||
select 'Developer', from: 'group_member_access_level'
|
|
||||||
click_on 'Save'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
step 'I should see "Mary Jane" as "Developer"' do
|
|
||||||
member = mary_jane_member
|
|
||||||
|
|
||||||
page.within "#group_member_#{member.id}" do
|
|
||||||
page.within '.member-access-level' do
|
|
||||||
expect(page).to have_content "Developer"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
|
||||||
|
|
||||||
def owned_group
|
|
||||||
@owned_group ||= Group.find_by(name: "Owned")
|
|
||||||
end
|
|
||||||
|
|
||||||
def mary_jane_member
|
|
||||||
user = User.find_by(name: "Mary Jane")
|
|
||||||
owned_group.members.find_by(user_id: user.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def assigned_to_me(key)
|
def assigned_to_me(key)
|
||||||
project.send(key).where(assignee_id: current_user.id)
|
project.send(key).where(assignee_id: current_user.id)
|
||||||
|
@ -328,29 +129,4 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
|
||||||
def project
|
def project
|
||||||
owned_group.projects.first
|
owned_group.projects.first
|
||||||
end
|
end
|
||||||
|
|
||||||
def group_milestone
|
|
||||||
group = owned_group
|
|
||||||
|
|
||||||
%w(gitlabhq gitlab-ci cookbook-gitlab).each do |path|
|
|
||||||
project = create :project, path: path, group: group
|
|
||||||
milestone = create :milestone, title: "Version 7.2", project: project
|
|
||||||
create :issue,
|
|
||||||
project: project,
|
|
||||||
assignee: current_user,
|
|
||||||
author: current_user,
|
|
||||||
milestone: milestone
|
|
||||||
|
|
||||||
milestone = create :milestone, title: "GL-113", project: project
|
|
||||||
create :issue,
|
|
||||||
project: project,
|
|
||||||
assignee: current_user,
|
|
||||||
author: current_user,
|
|
||||||
milestone: milestone
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def group_members_list
|
|
||||||
find(".panel .content-list")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -41,4 +41,8 @@ module SharedGroup
|
||||||
project.team << [user, :master]
|
project.team << [user, :master]
|
||||||
@project_count += 1
|
@project_count += 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def owned_group
|
||||||
|
@owned_group ||= Group.find_by(name: "Owned")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,6 +9,10 @@ module SharedUser
|
||||||
user_exists("Mary Jane", { username: "mary_jane" })
|
user_exists("Mary Jane", { username: "mary_jane" })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
step 'gitlab user "Mike"' do
|
||||||
|
create(:user, name: "Mike")
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def user_exists(name, options = {})
|
def user_exists(name, options = {})
|
||||||
|
|
Loading…
Reference in a new issue