1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Users::Internal, feature_category: :user_profile do
let_it_be(:default_organization) { create(:organization, :default) }
shared_examples 'bot users' do |bot_type, username, email|
it 'creates the user if it does not exist' do
expect do
described_class.public_send(bot_type)
end.to change { User.where(user_type: bot_type).count }.by(1)
end
it 'creates a route for the namespace of the created user' do
bot_user = described_class.public_send(bot_type)
expect(bot_user.namespace.route).to be_present
expect(bot_user.namespace.organization).to eq(default_organization)
end
it 'does not create a new user if it already exists' do
described_class.public_send(bot_type)
expect do
described_class.public_send(bot_type)
end.not_to change { User.count }
end
context 'when a regular user exists with the bot username' do
it 'creates a user with a non-conflicting username' do
create(:user, username: username)
expect do
described_class.public_send(bot_type)
end.to change { User.where(user_type: bot_type).count }.by(1)
end
end
context 'when a regular user exists with the bot user email' do
it 'creates a user with a non-conflicting email' do
create(:user, email: email)
expect do
described_class.public_send(bot_type)
end.to change { User.where(user_type: bot_type).count }.by(1)
end
end
context 'when a group namespace exists with path that is equal to the bot username' do
it 'creates a user with a non-conflicting username' do
create(:group, path: username)
expect do
described_class.public_send(bot_type)
end.to change { User.where(user_type: bot_type).count }.by(1)
end
end
context 'when a domain allowlist is in place' do
before do
stub_application_setting(domain_allowlist: ['gitlab.com'])
end
it 'creates the bot user' do
expect do
described_class.public_send(bot_type)
end.to change { User.where(user_type: bot_type).count }.by(1)
end
end
end
shared_examples 'bot user avatars' do |bot_type, avatar_filename|
it 'sets the custom avatar for the created bot' do
bot_user = described_class.public_send(bot_type)
expect(bot_user.avatar.url).to be_present
expect(bot_user.avatar.filename).to eq(avatar_filename)
end
end
it_behaves_like 'bot users', :alert_bot, 'alert-bot', 'alert@example.com'
it_behaves_like 'bot users', :support_bot, 'support-bot', 'support@example.com'
it_behaves_like 'bot users', :migration_bot, 'migration-bot', 'noreply+gitlab-migration-bot@example.com'
it_behaves_like 'bot users', :security_bot, 'GitLab-Security-Bot', 'security-bot@example.com'
it_behaves_like 'bot users', :ghost, 'ghost', 'ghost@example.com'
it_behaves_like 'bot users', :automation_bot, 'automation-bot', 'automation@example.com'
it_behaves_like 'bot users', :llm_bot, 'GitLab-Llm-Bot', 'llm-bot@example.com'
it_behaves_like 'bot users', :duo_code_review_bot, 'GitLab-Duo-Code-Reviewer', 'duo-code-review-bot@example.com'
it_behaves_like 'bot users', :admin_bot, 'GitLab-Admin-Bot', 'admin-bot@example.com'
it_behaves_like 'bot user avatars', :alert_bot, 'alert-bot.png'
it_behaves_like 'bot user avatars', :support_bot, 'support-bot.png'
it_behaves_like 'bot user avatars', :security_bot, 'security-bot.png'
it_behaves_like 'bot user avatars', :automation_bot, 'support-bot.png'
it_behaves_like 'bot user avatars', :llm_bot, 'support-bot.png'
it_behaves_like 'bot user avatars', :duo_code_review_bot, 'duo-bot.png'
it_behaves_like 'bot user avatars', :admin_bot, 'admin-bot.png'
context 'when bot is the support_bot' do
subject { described_class.support_bot }
it { is_expected.to be_confirmed }
end
context 'when bot is the admin bot' do
subject { described_class.admin_bot }
it { is_expected.to be_admin }
it { is_expected.to be_confirmed }
end
end
|