spec/finders/members/invite_users_finder_spec.rb (76 lines of code) (raw):

# frozen_string_literal: true require 'spec_helper' RSpec.describe Members::InviteUsersFinder, feature_category: :groups_and_projects do let_it_be(:current_user) { create(:user, :with_namespace) } let_it_be(:root_group) { create(:group) } let_it_be(:regular_user) { create(:user) } let_it_be(:admin_user) { create(:user, :admin) } let_it_be(:banned_user) { create(:user, :banned) } let_it_be(:blocked_user) { create(:user, :blocked) } let_it_be(:ldap_blocked_user) { create(:user, :ldap_blocked) } let_it_be(:external_user) { create(:user, :external) } let_it_be(:unconfirmed_user) { create(:user, confirmed_at: nil) } let_it_be(:omniauth_user) { create(:omniauth_user) } let_it_be(:internal_user) { Users::Internal.alert_bot } let_it_be(:project_bot_user) { create(:user, :project_bot) } let_it_be(:service_account_user) { create(:user, :service_account) } before_all do root_group.add_owner(current_user) end subject(:finder) do described_class.new(current_user, resource) end describe '#execute' do shared_examples 'searchable' do let(:searchable_users_ordered_by_id_desc) do [ current_user, regular_user, admin_user, external_user, unconfirmed_user, omniauth_user, service_account_user ].sort_by(&:id).reverse end it 'returns searchable users ordered by id descending' do expect(finder.execute).to eq(searchable_users_ordered_by_id_desc) end context 'for search param' do subject(:finder) do described_class.new(current_user, resource, search: search) end context 'with empty string' do let(:search) { '' } it 'returns searchable users ordered by id descending' do expect(finder.execute).to eq(searchable_users_ordered_by_id_desc) end end context "with a user's name" do let(:search) { regular_user.name } it 'returns users that match the name' do expect(finder.execute).to eq([regular_user]) end end end end context 'for root_group' do let_it_be(:resource) { root_group } include_examples 'searchable' end context 'for subgroup' do let_it_be(:subgroup) { create(:group, parent: root_group) } let_it_be(:resource) { subgroup } include_examples 'searchable' end context 'for project within group namespace' do let_it_be(:project) { create(:project, namespace: root_group, creator: current_user) } let_it_be(:resource) { project } include_examples 'searchable' end context 'for project within user namespace' do let_it_be(:project) { create(:project, namespace: current_user.namespace) } let_it_be(:resource) { project } include_examples 'searchable' end end end