Add finders logic and tests for shared projects feature
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
8901336c78
commit
068fd5de8a
|
@ -43,7 +43,8 @@ class ProjectsFinder
|
|||
if current_user
|
||||
[
|
||||
group_projects_for_user(current_user, group),
|
||||
group.projects.public_and_internal_only
|
||||
group.projects.public_and_internal_only,
|
||||
group.shared_projects.visible_to_user(current_user)
|
||||
]
|
||||
else
|
||||
[group.projects.public_only]
|
||||
|
|
|
@ -818,7 +818,8 @@ class User < ActiveRecord::Base
|
|||
def projects_union
|
||||
Gitlab::SQL::Union.new([personal_projects.select(:id),
|
||||
groups_projects.select(:id),
|
||||
projects.select(:id)])
|
||||
projects.select(:id),
|
||||
groups.joins(:shared_projects).select(:project_id)])
|
||||
end
|
||||
|
||||
def ci_projects_union
|
||||
|
|
|
@ -50,6 +50,22 @@
|
|||
.panel-footer
|
||||
= paginate @projects, param_name: 'projects_page', theme: 'gitlab'
|
||||
|
||||
- if @group.shared_projects.any?
|
||||
.panel.panel-default
|
||||
.panel-heading
|
||||
Projects shared with #{@group.name}
|
||||
%span.badge
|
||||
#{@group.shared_projects.count}
|
||||
%ul.well-list
|
||||
- @group.shared_projects.sort_by(&:name).each do |project|
|
||||
%li
|
||||
%strong
|
||||
= link_to project.name_with_namespace, [:admin, project.namespace.becomes(Namespace), project]
|
||||
%span.label.label-gray
|
||||
= repository_size(project)
|
||||
%span.pull-right.light
|
||||
%span.monospace= project.path_with_namespace + ".git"
|
||||
|
||||
.col-md-6
|
||||
- if can?(current_user, :admin_group_member, @group)
|
||||
.panel.panel-default
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
Feature: Project Group Links
|
||||
Background:
|
||||
Given I sign in as a user
|
||||
And I own project "Shop"
|
||||
And project "Shop" is shared with group "Ops"
|
||||
And project "Shop" is not shared with group "Market"
|
||||
And I visit project group links page
|
||||
|
||||
Scenario: I should see list of groups
|
||||
Then I should see project already shared with group "Ops"
|
||||
Then I should see project is not shared with group "Market"
|
||||
|
||||
@javascript
|
||||
Scenario: I share project with group
|
||||
When I select group "Market" for share
|
||||
Then I should see project is shared with group "Market"
|
|
@ -0,0 +1,50 @@
|
|||
class Spinach::Features::ProjectGroupLinks < Spinach::FeatureSteps
|
||||
include SharedAuthentication
|
||||
include SharedProject
|
||||
include SharedPaths
|
||||
include Select2Helper
|
||||
|
||||
step 'I should see project already shared with group "Ops"' do
|
||||
page.within '.enabled-groups' do
|
||||
expect(page).to have_content "Ops"
|
||||
end
|
||||
end
|
||||
|
||||
step 'I should see project is not shared with group "Market"' do
|
||||
page.within '.enabled-groups' do
|
||||
expect(page).not_to have_content "Market"
|
||||
end
|
||||
end
|
||||
|
||||
step 'I select group "Market" for share' do
|
||||
group = Group.find_by(path: 'market')
|
||||
select2(group.id, from: "#link_group_id")
|
||||
select "Master", from: 'link_group_access'
|
||||
click_button "Share"
|
||||
end
|
||||
|
||||
step 'I should see project is shared with group "Market"' do
|
||||
page.within '.enabled-groups' do
|
||||
expect(page).to have_content "Market"
|
||||
end
|
||||
end
|
||||
|
||||
step 'project "Shop" is shared with group "Ops"' do
|
||||
group = create(:group, name: 'Ops')
|
||||
share_link = project.project_group_links.new(group_access: Gitlab::Access::MASTER)
|
||||
share_link.group_id = group.id
|
||||
share_link.save!
|
||||
end
|
||||
|
||||
step 'project "Shop" is not shared with group "Market"' do
|
||||
create(:group, name: 'Market', path: 'market')
|
||||
end
|
||||
|
||||
step 'I visit project group links page' do
|
||||
visit namespace_project_group_links_path(project.namespace, project)
|
||||
end
|
||||
|
||||
def project
|
||||
@project ||= Project.find_by_name "Shop"
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue