From 0ea3fcec397b69815975647f5e2aa5fe944a8486 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 20 Jun 2022 11:10:13 +0000 Subject: Add latest changes from gitlab-org/gitlab@15-1-stable-ee --- .../forbid_sidekiq_in_transactions_spec.rb | 57 +++++++++++++++------- spec/initializers/mail_encoding_patch_spec.rb | 34 ++++++++++++- spec/initializers/omniauth_spec.rb | 29 +++-------- .../set_active_support_hash_digest_class_spec.rb | 9 ++++ spec/initializers/validate_database_config_spec.rb | 3 -- 5 files changed, 87 insertions(+), 45 deletions(-) create mode 100644 spec/initializers/set_active_support_hash_digest_class_spec.rb (limited to 'spec/initializers') diff --git a/spec/initializers/forbid_sidekiq_in_transactions_spec.rb b/spec/initializers/forbid_sidekiq_in_transactions_spec.rb index 6cd15d37ad4..a89ac73f6fa 100644 --- a/spec/initializers/forbid_sidekiq_in_transactions_spec.rb +++ b/spec/initializers/forbid_sidekiq_in_transactions_spec.rb @@ -3,36 +3,57 @@ require 'spec_helper' RSpec.describe 'Sidekiq::Worker' do - let(:worker_class) do - Class.new do - include Sidekiq::Worker + shared_examples_for 'a forbiddable operation within a transaction' do + it 'allows the operation outside of a transaction' do + expect { operation }.not_to raise_error + end - def perform + it 'forbids the operation within a transaction' do + ApplicationRecord.transaction do + expect { operation }.to raise_error(Sidekiq::Worker::EnqueueFromTransactionError) end end - end - it 'allows sidekiq worker outside of a transaction' do - expect { worker_class.perform_async }.not_to raise_error - end + it 'allows the oepration within a transaction if skipped' do + Sidekiq::Worker.skipping_transaction_check do + ApplicationRecord.transaction do + expect { operation }.not_to raise_error + end + end + end - it 'forbids queue sidekiq worker in a transaction' do - Project.transaction do - expect { worker_class.perform_async }.to raise_error(Sidekiq::Worker::EnqueueFromTransactionError) + it 'forbids the operation if it is within a Ci::ApplicationRecord transaction' do + Ci::Pipeline.transaction do + expect { operation }.to raise_error(Sidekiq::Worker::EnqueueFromTransactionError) + end end end - it 'allows sidekiq worker in a transaction if skipped' do - Sidekiq::Worker.skipping_transaction_check do - Project.transaction do - expect { worker_class.perform_async }.not_to raise_error + context 'for sidekiq workers' do + let(:worker_class) do + Class.new do + include Sidekiq::Worker + + def perform + end end end + + let(:operation) { worker_class.perform_async } + + it_behaves_like 'a forbiddable operation within a transaction' end - it 'forbids queue sidekiq worker in a Ci::ApplicationRecord transaction' do - Ci::Pipeline.transaction do - expect { worker_class.perform_async }.to raise_error(Sidekiq::Worker::EnqueueFromTransactionError) + context 'for mailers' do + let(:mailer_class) do + Class.new(ApplicationMailer) do + def test_mail + end + end end + + let(:operation) { mailer_class.test_mail.deliver_later } + + it_behaves_like 'a forbiddable operation within a transaction' end end diff --git a/spec/initializers/mail_encoding_patch_spec.rb b/spec/initializers/mail_encoding_patch_spec.rb index 12539c9ca52..e6cede817b5 100644 --- a/spec/initializers/mail_encoding_patch_spec.rb +++ b/spec/initializers/mail_encoding_patch_spec.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true # rubocop:disable RSpec/VariableDefinition, RSpec/VariableName -require 'fast_spec_helper' +require 'spec_helper' require 'mail' require_relative '../../config/initializers/mail_encoding_patch' RSpec.describe 'Mail quoted-printable transfer encoding patch and Unicode characters' do + include FixtureHelpers + shared_examples 'email encoding' do |email| it 'enclosing in a new object does not change the encoded original' do new_email = Mail.new(email) @@ -204,5 +206,35 @@ RSpec.describe 'Mail quoted-printable transfer encoding patch and Unicode charac end end end + + context 'empty text mail with unsual body encoding' do + it 'decodes email successfully' do + email = Mail::Message.new(nil) + + Mail::Encodings.get_all.each do |encoder| + email.body = nil + email.body.charset = 'utf-8' + email.body.encoding = encoder.to_s + + expect { email.encoded }.not_to raise_error + end + end + end + + context 'frozen email boy content with unsual body encoding' do + let(:content) { fixture_file("emails/ios_default.eml") } + + it 'decodes email successfully' do + email = Mail::Message.new(content) + + Mail::Encodings.get_all.each do |encoder| + email.body = content.freeze + email.body.charset = 'utf-8' + email.body.encoding = encoder.to_s + + expect { email.encoded }.not_to raise_error + end + end + end end # rubocop:enable RSpec/VariableDefinition, RSpec/VariableName diff --git a/spec/initializers/omniauth_spec.rb b/spec/initializers/omniauth_spec.rb index 928eac8c533..f0a73162dd2 100644 --- a/spec/initializers/omniauth_spec.rb +++ b/spec/initializers/omniauth_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'OmniAuth initializer for GitLab' do - let(:load_omniauth_initializer) do + def load_omniauth_initializer load Rails.root.join('config/initializers/omniauth.rb') end @@ -15,32 +15,15 @@ RSpec.describe 'OmniAuth initializer for GitLab' do before do allow(Settings).to receive(:gitlab).and_return({ 'base_url' => base_url }) allow(Gitlab::OmniauthInitializer).to receive(:full_host).and_return('proc') - end - - context 'with feature flags not available' do - before do - expect(Feature).to receive(:feature_flags_available?).and_return(false) - load_omniauth_initializer - end - it { is_expected.to eq(base_url) } + load_omniauth_initializer end - context 'with the omniauth_initializer_fullhost_proc FF disabled' do - before do - stub_feature_flags(omniauth_initializer_fullhost_proc: false) - load_omniauth_initializer - end - - it { is_expected.to eq(base_url) } + # to clear existing mocks and prevent order-dependent failures + after(:all) do + load_omniauth_initializer end - context 'with the omniauth_initializer_fullhost_proc FF disabled' do - before do - load_omniauth_initializer - end - - it { is_expected.to eq('proc') } - end + it { is_expected.to eq('proc') } end end diff --git a/spec/initializers/set_active_support_hash_digest_class_spec.rb b/spec/initializers/set_active_support_hash_digest_class_spec.rb new file mode 100644 index 00000000000..256e8a1f218 --- /dev/null +++ b/spec/initializers/set_active_support_hash_digest_class_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'setting ActiveSupport::Digest.hash_digest_class' do + it 'sets overrides config.active_support.hash_digest_class' do + expect(ActiveSupport::Digest.hash_digest_class).to eq(Gitlab::HashDigest::Facade) + end +end diff --git a/spec/initializers/validate_database_config_spec.rb b/spec/initializers/validate_database_config_spec.rb index 5f3f950a852..23a3d9a2950 100644 --- a/spec/initializers/validate_database_config_spec.rb +++ b/spec/initializers/validate_database_config_spec.rb @@ -14,9 +14,6 @@ RSpec.describe 'validate database config' do end before do - allow(File).to receive(:exist?).and_call_original - allow(File).to receive(:exist?).with(Rails.root.join("config/database_geo.yml")).and_return(false) - # The `AS::ConfigurationFile` calls `read` in `def initialize` # thus we cannot use `expect_next_instance_of` # rubocop:disable RSpec/AnyInstanceOf -- cgit v1.2.3