Skip to content
Snippets Groups Projects
Unverified Commit 65b33e31 authored by Hakeem Abdul-Razak's avatar Hakeem Abdul-Razak Committed by GitLab
Browse files

Show SAML badges for projects under nested subgroups

Changelog: fixed
EE: true
parent 3f443be2
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -3,7 +3,9 @@
module EE
module ProjectMemberPresenter
def group_sso?
false
return false unless member.user.present? && source.root_ancestor.group_namespace?
member.user.group_sso?(source.root_ancestor)
end
 
def group_managed_account?
Loading
Loading
Loading
Loading
@@ -7,6 +7,7 @@
 
let_it_be(:user1) { create(:user, name: 'John Doe') }
let_it_be(:user2) { create(:user, name: 'Mary Jane') }
let_it_be(:user3) { create(:user, name: 'Wally West') }
let_it_be(:group) { create(:group) }
 
context 'with Group SAML identity linked for a user' do
Loading
Loading
@@ -16,18 +17,23 @@
 
before do
sign_in(user1)
group.add_developer(user1)
group.add_owner(user1)
group.add_guest(user2)
create(:identity, saml_provider: saml_provider, user: user2)
group.add_guest(user3)
create(:identity, saml_provider: saml_provider, user: user3)
end
 
it 'shows user with SSO status badge', :js do
it 'shows user with a SSO status badge', :js do
visit group_group_members_path(group)
 
expect(second_row).to have_content('SAML')
expect(third_row).to have_content('SAML')
end
 
context 'when group is a sub group and member is a direct member' do
context 'when group is in a sub group' do
let(:sub_group) { create(:group, parent: group) }
 
before do
Loading
Loading
@@ -35,10 +41,31 @@
sub_group.add_developer(user2)
end
 
it 'shows user with SSO status badge for direct member', :js do
it 'shows user2 with a SSO status badge & a direct membership type', :js do
visit group_group_members_path(sub_group)
expect(second_row).to have_content('SAML').and have_content('Direct')
end
it 'shows user3 with a SSO status badge & an inherited membership type', :js do
visit group_group_members_path(sub_group)
 
expect(second_row).to have_content('SAML')
expect(third_row).to have_content('SAML').and have_content('Inherited')
end
context 'when a project is in the subgroup' do
let(:project) { create(:project, namespace: sub_group) }
before do
project.add_developer(user3)
end
it 'retains the SSO status badges & direct membership types from its group', :js do
visit group_group_members_path(project.namespace)
expect(second_row).to have_content('SAML').and have_content('Direct')
expect(third_row).to have_content('SAML').and have_content('Inherited')
end
end
end
end
Loading
Loading
Loading
Loading
@@ -2,15 +2,45 @@
 
require 'spec_helper'
 
RSpec.describe ProjectMemberPresenter do
RSpec.describe ProjectMemberPresenter, feature_category: :groups_and_projects do
let(:user) { double(:user) }
let(:project) { double(:project) }
let(:project_member) { double(:project_member, source: project) }
let(:project_member) { double(:project_member, source: project, user: user) }
let(:presenter) { described_class.new(project_member, current_user: user) }
 
describe '#group_sso?' do
it 'returns `false`' do
expect(presenter.group_sso?).to eq(false)
let(:user) { create(:user) } # rubocop:disable RSpec/FactoryBot/AvoidCreate -- persisted user_id needed for creating a saml_identity
let(:saml_provider) { create(:saml_provider) } # rubocop:disable RSpec/FactoryBot/AvoidCreate -- persisted saml_provider_id needed for creating a saml_identity
let(:group) { saml_provider.group }
let(:project) { build_stubbed(:project, namespace: group) }
context 'when a project_member does not have a user' do
let(:project_member) { build_stubbed(:project_member, source: project, user: nil) }
it 'returns false' do
expect(project_member.user).not_to be_present
expect(presenter.group_sso?).to eq(false)
end
end
context 'when a project_member has a user, without a group_namespace (is a personal project)' do
let(:project) { build_stubbed(:project, namespace: user.namespace) }
it 'returns false' do
expect(project).to receive(:root_ancestor).and_return(project)
expect(project).to receive(:group_namespace?).and_return(false)
expect(presenter.group_sso?).to eq(false)
end
end
context 'when a project_member has a user, within a group namespace' do
before do
create(:group_saml_identity, saml_provider: saml_provider, user: user) # rubocop:disable RSpec/FactoryBot/AvoidCreate -- searches dB and prevents FK errors
end
it 'returns true' do
expect(presenter.group_sso?).to eq(true)
end
end
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment