Fix User role displayed on projects dashboard
This commit is contained in:
parent
83f79ced3f
commit
837c3b3d73
8 changed files with 62 additions and 3 deletions
|
@ -7,7 +7,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
|
|||
skip_cross_project_access_check :index, :starred
|
||||
|
||||
def index
|
||||
@projects = load_projects(params.merge(non_public: true)).page(params[:page])
|
||||
@projects = load_projects(params.merge(non_public: true))
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
|
@ -25,7 +25,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
|
|||
|
||||
def starred
|
||||
@projects = load_projects(params.merge(starred: true))
|
||||
.includes(:forked_from_project, :tags).page(params[:page])
|
||||
.includes(:forked_from_project, :tags)
|
||||
|
||||
@groups = []
|
||||
|
||||
|
@ -51,6 +51,7 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
|
|||
.new(params: finder_params, current_user: current_user)
|
||||
.execute
|
||||
.includes(:route, :creator, namespace: [:route, :owner])
|
||||
.page(finder_params[:page])
|
||||
|
||||
prepare_projects_for_rendering(projects)
|
||||
end
|
||||
|
|
|
@ -177,6 +177,7 @@ module ProjectsHelper
|
|||
controller.action_name,
|
||||
Gitlab::CurrentSettings.cache_key,
|
||||
"cross-project:#{can?(current_user, :read_cross_project)}",
|
||||
max_project_member_access_cache_key(project),
|
||||
'v2.6'
|
||||
]
|
||||
|
||||
|
|
|
@ -31,6 +31,14 @@ module UsersHelper
|
|||
current_user_menu_items.include?(item)
|
||||
end
|
||||
|
||||
def max_project_member_access(project)
|
||||
current_user&.max_member_access_for_project(project.id) || Gitlab::Access::NO_ACCESS
|
||||
end
|
||||
|
||||
def max_project_member_access_cache_key(project)
|
||||
"access:#{max_project_member_access(project)}"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def get_profile_tabs
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
- ci = false unless local_assigns[:ci] == true
|
||||
- skip_namespace = false unless local_assigns[:skip_namespace] == true
|
||||
- user = local_assigns[:user]
|
||||
- access = user&.max_member_access_for_project(project.id) unless user.nil?
|
||||
- access = max_project_member_access(project)
|
||||
- css_class = '' unless local_assigns[:css_class]
|
||||
- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true && can_show_last_commit_in_list?(project)
|
||||
- css_class += " no-description" if project.description.blank? && !show_last_commit_as_description
|
||||
|
|
5
changelogs/unreleased/fj-43565-wrong-role-displayed.yml
Normal file
5
changelogs/unreleased/fj-43565-wrong-role-displayed.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix wrong role badge displayed in projects dashboard
|
||||
merge_request: 20374
|
||||
author:
|
||||
type: fixed
|
|
@ -29,6 +29,34 @@ describe 'Dashboard Projects' do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when user has access to the project' do
|
||||
it 'shows role badge' do
|
||||
visit dashboard_projects_path
|
||||
|
||||
page.within '.user-access-role' do
|
||||
expect(page).to have_content('Developer')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when role changes', :use_clean_rails_memory_store_fragment_caching do
|
||||
it 'displays the right role' do
|
||||
visit dashboard_projects_path
|
||||
|
||||
page.within '.user-access-role' do
|
||||
expect(page).to have_content('Developer')
|
||||
end
|
||||
|
||||
project.members.last.update(access_level: 40)
|
||||
|
||||
visit dashboard_projects_path
|
||||
|
||||
page.within '.user-access-role' do
|
||||
expect(page).to have_content('Maintainer')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when last_repository_updated_at, last_activity_at and update_at are present' do
|
||||
it 'shows the last_repository_updated_at attribute as the update date' do
|
||||
project.update_attributes!(last_repository_updated_at: Time.now, last_activity_at: 1.hour.ago)
|
||||
|
|
|
@ -80,6 +80,7 @@ describe ProjectsHelper do
|
|||
before do
|
||||
allow(helper).to receive(:current_user).and_return(user)
|
||||
allow(helper).to receive(:can?).with(user, :read_cross_project) { true }
|
||||
allow(user).to receive(:max_member_access_for_project).and_return(40)
|
||||
end
|
||||
|
||||
it "includes the route" do
|
||||
|
@ -125,6 +126,10 @@ describe ProjectsHelper do
|
|||
|
||||
expect(helper.project_list_cache_key(project)).to include("pipeline-status/#{project.commit.sha}-success")
|
||||
end
|
||||
|
||||
it "includes the user max member access" do
|
||||
expect(helper.project_list_cache_key(project)).to include('access:40')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#load_pipeline_status' do
|
||||
|
|
|
@ -170,6 +170,17 @@ RSpec.configure do |config|
|
|||
redis_queues_cleanup!
|
||||
end
|
||||
|
||||
config.around(:each, :use_clean_rails_memory_store_fragment_caching) do |example|
|
||||
caching_store = ActionController::Base.cache_store
|
||||
ActionController::Base.cache_store = ActiveSupport::Cache::MemoryStore.new
|
||||
ActionController::Base.perform_caching = true
|
||||
|
||||
example.run
|
||||
|
||||
ActionController::Base.perform_caching = false
|
||||
ActionController::Base.cache_store = caching_store
|
||||
end
|
||||
|
||||
# The :each scope runs "inside" the example, so this hook ensures the DB is in the
|
||||
# correct state before any examples' before hooks are called. This prevents a
|
||||
# problem where `ScheduleIssuesClosedAtTypeChange` (or any migration that depends
|
||||
|
|
Loading…
Reference in a new issue