Commit 6819a07f authored by Grzegorz Bizon's avatar Grzegorz Bizon

Merge branch 'group-spec-ee' into 'master'

EE: Replace group spinach tests with RSpec analog

See merge request gitlab-org/gitlab-ee!5074
parents 026f5db4 f5460100
require 'spec_helper' require 'spec_helper'
feature 'Edit group settings', :js do feature 'Edit group settings', :js do
include Select2Helper
given(:user) { create(:user) } given(:user) { create(:user) }
given(:group) { create(:group, path: 'foo') } given(:group) { create(:group, path: 'foo') }
...@@ -21,6 +23,18 @@ feature 'Edit group settings', :js do ...@@ -21,6 +23,18 @@ feature 'Edit group settings', :js do
visit group_ldap_group_links_path(group) visit group_ldap_group_links_path(group)
end end
scenario 'adds new LDAP synchronization', :js do
page.within('form#new_ldap_group_link') do
select2 'my-group-cn', from: '#ldap_group_link_cn'
select 'Developer', from: 'ldap_group_link_group_access'
click_button 'Add synchronization'
end
expect(page).not_to have_content('No LDAP synchronizations')
expect(page).to have_content('As Developer on ldap server')
end
scenario 'shows the LDAP filter section' do scenario 'shows the LDAP filter section' do
choose('sync_method_filter') choose('sync_method_filter')
...@@ -37,7 +51,7 @@ feature 'Edit group settings', :js do ...@@ -37,7 +51,7 @@ feature 'Edit group settings', :js do
end end
end end
context 'when the LDAP group sync filter feature is available' do context 'when the LDAP group sync filter feature is not available' do
before do before do
stub_licensed_features(ldap_group_sync_filter: false) stub_licensed_features(ldap_group_sync_filter: false)
......
Feature: Groups
Background:
Given I sign in as "John Doe"
And "John Doe" is owner of group "Owned"
Scenario: I should not see a group if it does not exist
When I visit group "NonExistentGroup" page
Then page status code should be 404
@javascript
Scenario: I should see group "Owned" dashboard list
When I visit group "Owned" page
Then I should see group "Owned" projects list
@javascript
Scenario: I should see group "Owned" activity feed
When I visit group "Owned" activity page
And I should see projects activity feed
Scenario: I should see group "Owned" issues list
Given project from group "Owned" has issues assigned to me
When I visit group "Owned" issues page
Then I should see issues from group "Owned" assigned to me
Scenario: I should not see issues from archived project in "Owned" group issues list
Given Group "Owned" has archived project
And the archived project have some issues
When I visit group "Owned" issues page
Then I should not see issues from the archived project
Scenario: I should see group "Owned" merge requests list
Given project from group "Owned" has merge requests assigned to me
When I visit group "Owned" merge requests page
Then I should see merge requests from group "Owned" assigned to me
Scenario: I should not see merge requests from archived project in "Owned" group merge requests list
Given Group "Owned" has archived project
And the archived project have some merge_requests
When I visit group "Owned" merge requests page
Then I should not see merge requests from the archived project
Scenario: I edit group "Owned" avatar
When I visit group "Owned" settings page
And I change group "Owned" avatar
And I visit group "Owned" settings page
Then I should see new group "Owned" avatar
And I should see the "Remove avatar" button
Scenario: I remove group "Owned" avatar
When I visit group "Owned" settings page
And I have group "Owned" avatar
And I visit group "Owned" settings page
And I remove group "Owned" avatar
Then I should not see group "Owned" avatar
And I should not see the "Remove avatar" button
Scenario: Add new LDAP synchronization
Given LDAP enabled
When I visit Group "Owned" LDAP settings page
And I add a new LDAP synchronization
Then I see a new LDAP synchronization listed
And LDAP disabled
# Group projects in settings
Scenario: I should see all projects in the project list in settings
Given Group "Owned" has archived project
When I visit group "Owned" projects page
Then I should see group "Owned" projects list
And I should see "archived" label
# Public group
@javascript
Scenario: Signed out user should see group
Given "Mary Jane" is owner of group "Owned"
And I am a signed out user
And Group "Owned" has a public project "Public-project"
When I visit group "Owned" page
Then I should see group "Owned"
Then I should see project "Public-project"
class Spinach::Features::Groups < Spinach::FeatureSteps
include SharedAuthentication
include SharedPaths
include SharedGroup
include SharedUser
step 'I should see group "Owned"' do
expect(page).to have_content 'Owned'
end
step 'I am a signed out user' do
logout
end
step 'Group "Owned" has a public project "Public-project"' do
group = owned_group
@project = create :project, :public,
group: group,
name: "Public-project"
end
step 'I should see project "Public-project"' do
expect(page).to have_content 'Public-project'
end
step 'I should see group "Owned" projects list' do
owned_group.projects.each do |project|
expect(page).to have_link project.name
end
end
step 'I should see projects activity feed' do
expect(page).to have_content 'joined project'
end
step 'I should see issues from group "Owned" assigned to me' do
assigned_to_me(:issues).each do |issue|
expect(page).to have_content issue.title
end
end
step 'I should not see issues from the archived project' do
@archived_project.issues.each do |issue|
expect(page).not_to have_content issue.title
end
end
step 'I should not see merge requests from the archived project' do
@archived_project.merge_requests.each do |mr|
expect(page).not_to have_content mr.title
end
end
step 'I should see merge requests from group "Owned" assigned to me' do
assigned_to_me(:merge_requests).each do |issue|
expect(page).to have_content issue.title[0..80]
end
end
step 'project from group "Owned" has issues assigned to me' do
create :issue,
project: project,
assignees: [current_user],
author: current_user
end
step 'project from group "Owned" has merge requests assigned to me' do
create :merge_request,
source_project: project,
target_project: project,
assignee: current_user,
author: current_user
end
step 'I should be redirected to group page' do
expect(current_path).to eq group_path(Group.last)
end
step 'I change group name' do
page.within '#tab-edit' do
fill_in 'group_name', with: 'new-name'
click_button "Save group"
end
end
step 'I change group "Owned" name to "new-name"' do
fill_in 'group_name', with: 'new-name'
fill_in 'group_path', with: 'new-name'
click_button "Save group"
end
step 'I should see new group "Owned" name' do
page.within ".navbar-gitlab" do
expect(page).to have_content "new-name"
end
end
step 'I change group "Owned" avatar' do
attach_file(:group_avatar, File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif'))
click_button "Save group"
owned_group.reload
end
step 'I should see new group "Owned" avatar' do
expect(owned_group.avatar).to be_instance_of AvatarUploader
expect(owned_group.avatar.url).to eq "/uploads/-/system/group/avatar/#{Group.find_by(name: "Owned").id}/banana_sample.gif"
end
step 'I should see the "Remove avatar" button' do
expect(page).to have_link("Remove avatar")
end
step 'I have group "Owned" avatar' do
attach_file(:group_avatar, File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif'))
click_button "Save group"
owned_group.reload
end
step 'I remove group "Owned" avatar' do
click_link "Remove avatar"
owned_group.reload
end
step 'I should not see group "Owned" avatar' do
expect(owned_group.avatar?).to eq false
end
step 'I should not see the "Remove avatar" button' do
expect(page).not_to have_link("Remove avatar")
end
step 'Group "Owned" has archived project' do
group = Group.find_by(name: 'Owned')
@archived_project = create(:project, :archived, namespace: group, path: "archived-project")
end
step 'I should see "archived" label' do
expect(page).to have_xpath("//span[@class='label label-warning']", text: 'archived')
end
step 'LDAP enabled' do
allow(Gitlab.config.ldap).to receive(:enabled).and_return(true)
end
step 'LDAP disabled' do
allow(Gitlab.config.ldap).to receive(:enabled).and_return(false)
end
step 'I add a new LDAP synchronization' do
page.within('form#new_ldap_group_link') do
find('#ldap_group_link_cn', visible: false).set('my-group-cn')
# fill_in('LDAP Group cn', with: 'my-group-cn', visible: false)
select 'Developer', from: "ldap_group_link_group_access"
click_button 'Add synchronization'
end
end
step 'I see a new LDAP synchronization listed' do
expect(page).not_to have_content('No LDAP synchronizations')
expect(page).to have_content('As Developer on ldap server')
end
step 'I visit group "NonExistentGroup" page' do
visit group_path("NonExistentGroup")
end
step 'the archived project have some issues' do
create :issue,
project: @archived_project,
assignees: [current_user],
author: current_user
end
step 'the archived project have some merge requests' do
create :merge_request,
source_project: @archived_project,
target_project: @archived_project,
assignee: current_user,
author: current_user
end
private
def assigned_to_me(key)
project.send(key).assigned_to(current_user)
end
def project
owned_group.projects.first
end
end
...@@ -52,10 +52,6 @@ module SharedPaths ...@@ -52,10 +52,6 @@ module SharedPaths
visit edit_group_path(Group.find_by(name: "Owned")) visit edit_group_path(Group.find_by(name: "Owned"))
end end
step 'I visit group "Owned" LDAP settings page' do
visit group_ldap_group_links_path(Group.find_by(name: "Owned"))
end
step 'I visit group "Owned" projects page' do step 'I visit group "Owned" projects page' do
visit projects_group_path(Group.find_by(name: "Owned")) visit projects_group_path(Group.find_by(name: "Owned"))
end end
......
...@@ -8,11 +8,30 @@ feature 'Group activity page' do ...@@ -8,11 +8,30 @@ feature 'Group activity page' do
context 'when signed in' do context 'when signed in' do
before do before do
sign_in(user) sign_in(user)
visit path
end end
it_behaves_like "it has an RSS button with current_user's RSS token" describe 'RSS' do
it_behaves_like "an autodiscoverable RSS feed with current_user's RSS token" before do
visit path
end
it_behaves_like "it has an RSS button with current_user's RSS token"
it_behaves_like "an autodiscoverable RSS feed with current_user's RSS token"
end
context 'when project in the group', :js do
let(:project) { create(:project, :public, namespace: group) }
before do
project.add_master(user)
visit path
end
it 'renders user joined to project event' do
expect(page).to have_content 'joined project'
end
end
end end
context 'when signed out' do context 'when signed out' do
......
...@@ -101,6 +101,27 @@ feature 'Edit group settings' do ...@@ -101,6 +101,27 @@ feature 'Edit group settings' do
end end
end end
end end
describe 'edit group avatar' do
before do
visit edit_group_path(group)
attach_file(:group_avatar, Rails.root.join('spec', 'fixtures', 'banana_sample.gif'))
expect { click_button 'Save group' }.to change { group.reload.avatar? }.to(true)
end
it 'uploads new group avatar' do
expect(group.avatar).to be_instance_of AvatarUploader
expect(group.avatar.url).to eq "/uploads/-/system/group/avatar/#{group.id}/banana_sample.gif"
expect(page).to have_link('Remove avatar')
end
it 'removes group avatar' do
expect { click_link 'Remove avatar' }.to change { group.reload.avatar? }.to(false)
expect(page).not_to have_link('Remove avatar')
end
end
end end
def update_path(new_group_path) def update_path(new_group_path)
......
...@@ -3,8 +3,11 @@ require 'spec_helper' ...@@ -3,8 +3,11 @@ require 'spec_helper'
feature 'Group issues page' do feature 'Group issues page' do
include FilteredSearchHelpers include FilteredSearchHelpers
let(:group) { create(:group) }
let(:project) { create(:project, :public, group: group)}
let(:path) { issues_group_path(group) }
context 'with shared examples' do context 'with shared examples' do
let(:path) { issues_group_path(group) }
let(:issuable) { create(:issue, project: project, title: "this is my created issuable")} let(:issuable) { create(:issue, project: project, title: "this is my created issuable")}
include_examples 'project features apply to issuables', Issue include_examples 'project features apply to issuables', Issue
...@@ -31,7 +34,6 @@ feature 'Group issues page' do ...@@ -31,7 +34,6 @@ feature 'Group issues page' do
let(:access_level) { ProjectFeature::ENABLED } let(:access_level) { ProjectFeature::ENABLED }
let(:user) { user_in_group } let(:user) { user_in_group }
let(:user2) { user_outside_group } let(:user2) { user_outside_group }
let(:path) { issues_group_path(group) }
it 'filters by only group users' do it 'filters by only group users' do
filtered_search.set('assignee:') filtered_search.set('assignee:')
...@@ -43,9 +45,7 @@ feature 'Group issues page' do ...@@ -43,9 +45,7 @@ feature 'Group issues page' do
end end
context 'issues list', :nested_groups do context 'issues list', :nested_groups do
let(:group) { create(:group)}
let(:subgroup) { create(:group, parent: group) } let(:subgroup) { create(:group, parent: group) }
let(:project) { create(:project, :public, group: group)}
let(:subgroup_project) { create(:project, :public, group: subgroup)} let(:subgroup_project) { create(:project, :public, group: subgroup)}
let!(:issue) { create(:issue, project: project, title: 'root group issue') } let!(:issue) { create(:issue, project: project, title: 'root group issue') }
let!(:subgroup_issue) { create(:issue, project: subgroup_project, title: 'subgroup issue') } let!(:subgroup_issue) { create(:issue, project: subgroup_project, title: 'subgroup issue') }
...@@ -59,5 +59,17 @@ feature 'Group issues page' do ...@@ -59,5 +59,17 @@ feature 'Group issues page' do
expect(page).to have_content('subgroup issue') expect(page).to have_content('subgroup issue')
end end
end end
context 'when project is archived' do
before do
project.archive!
end
it 'does not render issue' do
visit path
expect(page).not_to have_content issue.title
end
end
end end
end end
...@@ -5,14 +5,14 @@ feature 'Group merge requests page' do ...@@ -5,14 +5,14 @@ feature 'Group merge requests page' do
let(:path) { merge_requests_group_path(group) } let(:path) { merge_requests_group_path(group) }
let(:issuable) { create(:merge_request, source_project: project, target_project: project, title: 'this is my created issuable') } let(:issuable) { create(:merge_request, source_project: project, target_project: project, title: 'this is my created issuable') }
let(:access_level) { ProjectFeature::ENABLED }
let(:user) { user_in_group }
include_examples 'project features apply to issuables', MergeRequest include_examples 'project features apply to issuables', MergeRequest
context 'archived issuable' do context 'archived issuable' do
let(:project_archived) { create(:project, :archived, :merge_requests_enabled, :repository, group: group) } let(:project_archived) { create(:project, :archived, :merge_requests_enabled, :repository, group: group) }
let(:issuable_archived) { create(:merge_request, source_project: project_archived, target_project: project_archived, title: 'issuable of an archived project') } let(:issuable_archived) { create(:merge_request, source_project: project_archived, target_project: project_archived, title: 'issuable of an archived project') }
let(:access_level) { ProjectFeature::ENABLED }
let(:user) { user_in_group }
before do before do
issuable_archived issuable_archived
...@@ -36,9 +36,17 @@ feature 'Group merge requests page' do ...@@ -36,9 +36,17 @@ feature 'Group merge requests page' do
end end
end end
context 'when merge request assignee to user' do
before do
issuable.update!(assignee: user)
visit path
end
it { expect(page).to have_content issuable.title[0..80] }
end
context 'group filtered search', :js do context 'group filtered search', :js do
let(:access_level) { ProjectFeature::ENABLED }
let(:user) { user_in_group }
let(:user2) { user_outside_group } let(:user2) { user_outside_group }
it 'filters by assignee only group users' do it 'filters by assignee only group users' do
......
...@@ -15,14 +15,33 @@ feature 'Group show page' do ...@@ -15,14 +15,33 @@ feature 'Group show page' do
end end
it_behaves_like "an autodiscoverable RSS feed with current_user's RSS token" it_behaves_like "an autodiscoverable RSS feed with current_user's RSS token"
context 'when group does not exist' do
let(:path) { group_path('not-exist') }
it { expect(status_code).to eq(404) }
end
end end
context 'when signed out' do context 'when signed out' do
before do describe 'RSS' do
visit path before do
visit path
end
it_behaves_like "an autodiscoverable RSS feed without an RSS token"
end end
it_behaves_like "an autodiscoverable RSS feed without an RSS token" context 'when group has a public project', :js do
let!(:project) { create(:project, :public, namespace: group) }
it 'renders public project' do
visit path
expect(page).to have_link group.name
expect(page).to have_link project.name
end
end
end end
context 'subgroup support' do context 'subgroup support' do
......
require 'rails_helper'
describe 'User browse group projects page' do
let(:user) { create :user }
let(:group) { create :group }
context 'when user is owner' do
before do
group.add_owner(user)
end
context 'when user signed in' do
before do
sign_in(user)
end
context 'when group has archived project', :js do
let!(:project) { create :project, :archived, namespace: group }
it 'renders projects list' do
visit projects_group_path(group)
expect(page).to have_link project.name
expect(page).to have_xpath("//span[@class='label label-warning']", text: 'archived')
end
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment