Skip to content
代码片段 群组 项目
未验证 提交 43e11043 编辑于 作者: Rodrigo Tomonari's avatar Rodrigo Tomonari 提交者: GitLab
浏览文件

Merge branch 'georgekoltsov/paginated-placeholders-data' into 'master'

Add import source users pagination info to GroupMembersHelper

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/158468



Merged-by: default avatarRodrigo Tomonari <rtomonari@gitlab.com>
Approved-by: default avatarSam Word <sword@gitlab.com>
Approved-by: default avatarRodrigo Tomonari <rtomonari@gitlab.com>
Reviewed-by: default avatarGeorge Koltsov <gkoltsov@gitlab.com>
Reviewed-by: default avatarJustin Ho Tuan Duong <hduong@gitlab.com>
Reviewed-by: default avatarRodrigo Tomonari <rtomonari@gitlab.com>
Reviewed-by: default avatarSam Word <sword@gitlab.com>
Co-authored-by: default avatarGeorge Koltsov <gkoltsov@gitlab.com>
No related branches found
No related tags found
加载中
......@@ -44,6 +44,7 @@ def index
end
@members = present_group_members(non_invited_members)
@placeholder_users_count = placeholder_users_count
@requesters = present_members(
AccessRequestsFinder.new(@group).execute(current_user)
......@@ -104,6 +105,25 @@ def members_page_url
def root_params_key
:group_member
end
def placeholder_users_count
{
pagination: {
total_items: placeholder_users.count,
awaiting_reassignment_items: placeholder_users.awaiting_reassignment.count,
reassigned_items: placeholder_users.reassigned.count
}
}
end
def placeholder_users
if Feature.enabled?(:importer_user_mapping, current_user)
Import::SourceUsersFinder.new(@group, current_user).execute
else
Import::SourceUser.none
end
end
strong_memoize_attr :placeholder_users
end
Groups::GroupMembersController.prepend_mod_with('Groups::GroupMembersController')
......@@ -5,7 +5,18 @@ module Groups::GroupMembersHelper
AVATAR_SIZE = 40
def group_members_app_data(group, members:, invited:, access_requests:, banned:, include_relations:, search:, pending_members:)
# rubocop:disable Metrics/ParameterLists -- all arguments needed
def group_members_app_data(
group,
members:,
invited:,
access_requests:,
banned:,
include_relations:,
search:,
pending_members:,
placeholder_users:
)
{
user: group_members_list_data(group, members, { param_name: :page, params: { invited_members_page: nil, search_invited: nil } }),
group: group_group_links_list_data(group, include_relations, search),
......@@ -16,9 +27,11 @@ def group_members_app_data(group, members:, invited:, access_requests:, banned:,
can_manage_access_requests: can?(current_user, :admin_member_access_request, group),
group_name: group.name,
group_path: group.full_path,
can_approve_access_requests: true # true for CE, overridden in EE
can_approve_access_requests: true, # true for CE, overridden in EE
placeholder: placeholder_users
}
end
# rubocop:enable Metrics/ParameterLists
def group_member_header_subtext(group)
ERB::Util.html_escape(_("You're viewing members of %{strong_start}%{group_name}%{strong_end}.").html_safe) % {
......
......@@ -22,6 +22,8 @@ class SourceUser < ApplicationRecord
scope :for_namespace, ->(namespace_id) { where(namespace_id: namespace_id) }
scope :by_statuses, ->(statuses) { where(status: statuses) }
scope :awaiting_reassignment, -> { where(status: [0, 1, 2, 3, 4]) }
scope :reassigned, -> { where(status: [5, 6]) }
state_machine :status, initial: :pending_reassignment do
state :pending_reassignment, value: 0
......
......@@ -32,6 +32,7 @@
banned: @banned || [],
include_relations: @include_relations,
search: params[:search_groups],
pending_members: @pending_promotion_members
pending_members: @pending_promotion_members,
placeholder_users: @placeholder_users_count
).to_json } }
= gl_loading_icon(css_class: 'gl-my-5', size: 'md')
......@@ -11,9 +11,18 @@ def group_members_list_data(group, _members, _pagination = {})
})
end
# rubocop:disable Metrics/ParameterLists -- all arguments needed
override :group_members_app_data
def group_members_app_data(
group, members:, invited:, access_requests:, banned:, include_relations:, search:, pending_members:
group,
members:,
invited:,
access_requests:,
banned:,
include_relations:,
search:,
pending_members:,
placeholder_users:
)
super.merge!({
can_export_members: can?(current_user, :export_group_memberships, group),
......@@ -26,6 +35,7 @@ def group_members_app_data(
namespace_user_limit: ::Namespaces::FreeUserCap.dashboard_limit
})
end
# rubocop:enable Metrics/ParameterLists
def group_member_header_subtext(group)
if ::Namespaces::FreeUserCap::Enforcement.new(group.root_ancestor).enforce_cap? &&
......
......@@ -22,7 +22,8 @@
banned: banned,
include_relations: [:inherited, :direct],
search: nil,
pending_members: []
pending_members: [],
placeholder_users: {}
)
end
......@@ -151,7 +152,8 @@
banned: banned,
include_relations: [:inherited, :direct],
search: nil,
pending_members: pending_members
pending_members: pending_members,
placeholder_users: {}
)
end
......
......@@ -69,6 +69,56 @@
expect(assigns(:members).map(&:user_id)).to match_array([service_account.id])
end
end
context 'when there are import source users available' do
it 'returns import source users count' do
create(:import_source_user, :pending_assignment, namespace: group)
create(:import_source_user, :awaiting_approval, namespace: group)
create(:import_source_user, :completed, namespace: group)
get :index, params: { group_id: group }
expect(assigns(:placeholder_users_count)).to eq(
pagination: {
total_items: 3,
awaiting_reassignment_items: 2,
reassigned_items: 1
}
)
end
context 'where there are no import source users available' do
it 'returns 0 counts' do
get :index, params: { group_id: group }
expect(assigns(:placeholder_users_count)).to eq(
pagination: {
total_items: 0,
awaiting_reassignment_items: 0,
reassigned_items: 0
}
)
end
end
context 'when importer_user_mapping feature flag is disabled' do
it 'returns 0 counts' do
stub_feature_flags(importer_user_mapping: false)
create(:import_source_user, :pending_assignment, namespace: group)
get :index, params: { group_id: group }
expect(assigns(:placeholder_users_count)).to eq(
pagination: {
total_items: 0,
awaiting_reassignment_items: 0,
reassigned_items: 0
}
)
end
end
end
end
context 'when user cannot manage members' do
......
......@@ -21,6 +21,10 @@
reassigned_by_user factory: :user
end
trait :pending_assignment do
status { 0 }
end
trait :awaiting_approval do
status { 1 }
end
......@@ -28,5 +32,9 @@
trait :completed do
status { 5 }
end
trait :keep_as_placeholder do
status { 6 }
end
end
end
......@@ -33,7 +33,14 @@
banned: [],
include_relations: [:inherited, :direct],
search: nil,
pending_members: []
pending_members: [],
placeholder_users: {
pagination: {
total_items: 3,
awaiting_reassignment_items: 2,
reassigned_items: 1
}
}
)
end
......@@ -110,7 +117,8 @@
banned: [],
include_relations: include_relations,
search: nil,
pending_members: []
pending_members: [],
placeholder_users: {}
)
end
......@@ -159,6 +167,18 @@
expect(subject[:user][:pagination].as_json).to include(expected)
end
end
context 'when placeholder users data is available' do
it 'returns placeholder information' do
expect(subject[:placeholder]).to eq(
pagination: {
total_items: 3,
awaiting_reassignment_items: 2,
reassigned_items: 1
}
)
end
end
end
describe '#group_member_header_subtext' do
......
......@@ -27,6 +27,28 @@
)
end
end
describe '.awaiting_reassignment' do
it 'only returns source users that await reassignment' do
namespace = create(:namespace)
pending_assignment_user = create(:import_source_user, :pending_assignment, namespace: namespace)
awaiting_approval_user = create(:import_source_user, :awaiting_approval, namespace: namespace)
expect(namespace.import_source_users.awaiting_reassignment)
.to match_array([pending_assignment_user, awaiting_approval_user])
end
end
describe '.reassigned' do
it 'only returns source users with status completed' do
namespace = create(:namespace)
completed_assignment_user = create(:import_source_user, :completed, namespace: namespace)
placeholder_user = create(:import_source_user, :keep_as_placeholder, namespace: namespace)
expect(described_class.for_namespace(namespace.id).to_a)
.to match_array([completed_assignment_user, placeholder_user])
end
end
end
describe 'state machine' do
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册