Commit 068fd5de authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Add finders logic and tests for shared projects feature

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent 8901336c
...@@ -43,7 +43,8 @@ class ProjectsFinder ...@@ -43,7 +43,8 @@ class ProjectsFinder
if current_user if current_user
[ [
group_projects_for_user(current_user, group), 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 else
[group.projects.public_only] [group.projects.public_only]
......
...@@ -818,7 +818,8 @@ class User < ActiveRecord::Base ...@@ -818,7 +818,8 @@ class User < ActiveRecord::Base
def projects_union def projects_union
Gitlab::SQL::Union.new([personal_projects.select(:id), Gitlab::SQL::Union.new([personal_projects.select(:id),
groups_projects.select(:id), groups_projects.select(:id),
projects.select(:id)]) projects.select(:id),
groups.joins(:shared_projects).select(:project_id)])
end end
def ci_projects_union def ci_projects_union
......
...@@ -50,6 +50,22 @@ ...@@ -50,6 +50,22 @@
.panel-footer .panel-footer
= paginate @projects, param_name: 'projects_page', theme: 'gitlab' = 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 .col-md-6
- if can?(current_user, :admin_group_member, @group) - if can?(current_user, :admin_group_member, @group)
.panel.panel-default .panel.panel-default
......
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"
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
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