diff options
author | Stan Hu <stanhu@gmail.com> | 2019-09-11 00:24:05 +0000 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2019-09-11 00:24:05 +0000 |
commit | d20ce7de3e9174fba2b35673bcc23085136523b3 (patch) | |
tree | 2475cf85620f6397d8efa20465b974142bd3947d | |
parent | c0b9e50af9ecdbaf6cd8bb0dbcf23388c3c388e4 (diff) | |
parent | a38aa7e3df0f91ebaa017b29cd508958fa7b0df1 (diff) | |
download | gitlab-ce-d20ce7de3e9174fba2b35673bcc23085136523b3.tar.gz |
Merge branch '66023-public-private-fork-counts' into 'master'
Resolve "Forks count do not match after searching"
Closes #66023
See merge request gitlab-org/gitlab-ce!31930
-rw-r--r-- | app/controllers/projects/forks_controller.rb | 15 | ||||
-rw-r--r-- | app/views/projects/forks/index.html.haml | 2 | ||||
-rw-r--r-- | app/views/shared/projects/_list.html.haml | 6 | ||||
-rw-r--r-- | spec/controllers/projects/forks_controller_spec.rb | 61 | ||||
-rw-r--r-- | spec/features/projects/fork_spec.rb | 1 |
5 files changed, 67 insertions, 18 deletions
diff --git a/app/controllers/projects/forks_controller.rb b/app/controllers/projects/forks_controller.rb index ac1c4bc7fd3..1bb21857dcf 100644 --- a/app/controllers/projects/forks_controller.rb +++ b/app/controllers/projects/forks_controller.rb @@ -2,6 +2,7 @@ class Projects::ForksController < Projects::ApplicationController include ContinueParams + include RendersMemberAccess # Authorize before_action :whitelist_query_limiting, only: [:create] @@ -11,14 +12,16 @@ class Projects::ForksController < Projects::ApplicationController # rubocop: disable CodeReuse/ActiveRecord def index - base_query = project.forks.includes(:creator) + @total_forks_count = project.forks.size + @public_forks_count = project.forks.public_only.size + @private_forks_count = @total_forks_count - project.forks.public_and_internal_only.size + @internal_forks_count = @total_forks_count - @public_forks_count - @private_forks_count - forks = ForkProjectsFinder.new(project, params: params.merge(search: params[:filter_projects]), current_user: current_user).execute - @total_forks_count = base_query.size - @private_forks_count = @total_forks_count - forks.size - @public_forks_count = @total_forks_count - @private_forks_count + @forks = ForkProjectsFinder.new(project, params: params.merge(search: params[:filter_projects]), current_user: current_user).execute + @forks = @forks.includes(:route, :creator, :group, namespace: [:route, :owner]) + .page(params[:page]) - @forks = forks.page(params[:page]) + prepare_projects_for_rendering(@forks) respond_to do |format| format.html diff --git a/app/views/projects/forks/index.html.haml b/app/views/projects/forks/index.html.haml index 0397a7034c7..8384561891a 100644 --- a/app/views/projects/forks/index.html.haml +++ b/app/views/projects/forks/index.html.haml @@ -1,6 +1,6 @@ .top-area .nav-text - - full_count_title = "#{@public_forks_count} public and #{@private_forks_count} private" + - full_count_title = "#{@public_forks_count} public, #{@internal_forks_count} internal, and #{@private_forks_count} private" #{pluralize(@total_forks_count, 'fork')}: #{full_count_title} .nav-controls diff --git a/app/views/shared/projects/_list.html.haml b/app/views/shared/projects/_list.html.haml index bb05658c719..d70a1631010 100644 --- a/app/views/shared/projects/_list.html.haml +++ b/app/views/shared/projects/_list.html.haml @@ -42,12 +42,6 @@ avatar: avatar, stars: stars, css_class: css_class, ci: ci, use_creator_avatar: use_creator_avatar, forks: forks, show_last_commit_as_description: show_last_commit_as_description, user: user, merge_requests: merge_requests, issues: issues, pipeline_status: pipeline_status, compact_mode: compact_mode - - - if @private_forks_count && @private_forks_count > 0 - %li.project-row.private-forks-notice - = icon('lock fw', base: 'circle', class: 'fa-lg private-fork-icon') - %strong= pluralize(@private_forks_count, 'private fork') - %span you have no access to. = paginate_collection(projects, remote: remote) unless skip_pagination - else - if @contributed_projects diff --git a/spec/controllers/projects/forks_controller_spec.rb b/spec/controllers/projects/forks_controller_spec.rb index 5ac5279e997..80b5eb9a7ee 100644 --- a/spec/controllers/projects/forks_controller_spec.rb +++ b/spec/controllers/projects/forks_controller_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' describe Projects::ForksController do let(:user) { create(:user) } let(:project) { create(:project, :public, :repository) } - let(:forked_project) { Projects::ForkService.new(project, user).execute } + let(:forked_project) { Projects::ForkService.new(project, user, name: 'Some name').execute } let(:group) { create(:group) } before do @@ -13,11 +13,12 @@ describe Projects::ForksController do end describe 'GET index' do - def get_forks + def get_forks(search: nil) get :index, params: { namespace_id: project.namespace, - project_id: project + project_id: project, + search: search } end @@ -31,6 +32,41 @@ describe Projects::ForksController do expect(assigns[:forks]).to be_present end + + it 'forks counts are correct' do + get_forks + + expect(assigns[:total_forks_count]).to eq(1) + expect(assigns[:public_forks_count]).to eq(1) + expect(assigns[:internal_forks_count]).to eq(0) + expect(assigns[:private_forks_count]).to eq(0) + end + + context 'after search' do + it 'forks counts are correct' do + get_forks(search: 'Non-matching query') + + expect(assigns[:total_forks_count]).to eq(1) + expect(assigns[:public_forks_count]).to eq(1) + expect(assigns[:internal_forks_count]).to eq(0) + expect(assigns[:private_forks_count]).to eq(0) + end + end + end + + context 'when fork is internal' do + before do + forked_project.update(visibility_level: Project::INTERNAL, group: group) + end + + it 'forks counts are correct' do + get_forks + + expect(assigns[:total_forks_count]).to eq(1) + expect(assigns[:public_forks_count]).to eq(0) + expect(assigns[:internal_forks_count]).to eq(1) + expect(assigns[:private_forks_count]).to eq(0) + end end context 'when fork is private' do @@ -38,12 +74,25 @@ describe Projects::ForksController do forked_project.update(visibility_level: Project::PRIVATE, group: group) end - it 'is not be visible for non logged in users' do + shared_examples 'forks counts' do + it 'forks counts are correct' do + get_forks + + expect(assigns[:total_forks_count]).to eq(1) + expect(assigns[:public_forks_count]).to eq(0) + expect(assigns[:internal_forks_count]).to eq(0) + expect(assigns[:private_forks_count]).to eq(1) + end + end + + it 'is not visible for non logged in users' do get_forks expect(assigns[:forks]).to be_blank end + include_examples 'forks counts' + context 'when user is logged in' do before do sign_in(project.creator) @@ -67,6 +116,8 @@ describe Projects::ForksController do expect(assigns[:forks]).to be_present end + + include_examples 'forks counts' end context 'when user is a member of the Group' do @@ -79,6 +130,8 @@ describe Projects::ForksController do expect(assigns[:forks]).to be_present end + + include_examples 'forks counts' end end end diff --git a/spec/features/projects/fork_spec.rb b/spec/features/projects/fork_spec.rb index 2aed402652b..6792a6e2af0 100644 --- a/spec/features/projects/fork_spec.rb +++ b/spec/features/projects/fork_spec.rb @@ -121,7 +121,6 @@ describe 'Project fork' do end expect(page).not_to have_content("#{another_project_fork.namespace.human_name} / #{another_project_fork.name}") - expect(page).to have_content("1 private fork") end end |