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 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe '00_deprecations', feature_category: :shared do
def setup_other_deprecations
Warning.process(__FILE__) { :default }
end
def load_initializer
load Rails.root.join('config/initializers/00_deprecations.rb')
end
let(:rails_env) { nil }
let(:gitlab_log_deprecations) { nil }
before do
stub_rails_env(rails_env) if rails_env
stub_env('GITLAB_LOG_DEPRECATIONS', gitlab_log_deprecations)
setup_other_deprecations
ActiveSupport::Deprecation.disallowed_warnings = nil
ActiveSupport::Notifications.unsubscribe('deprecation.rails')
load_initializer
end
around do |example|
Warning.clear(&example)
end
shared_examples 'logs to Gitlab::DeprecationJsonLogger' do |message, source|
it 'logs them to Gitlab::DeprecationJsonLogger' do
allow(Gitlab::DeprecationJsonLogger).to receive(:info)
expect(Gitlab::DeprecationJsonLogger).to receive(:info).with(
message: match(/^#{message}/),
source: source
)
subject
end
end
shared_examples 'does not log to Gitlab::DeprecationJsonLogger' do
it 'does not log them to Gitlab::DeprecationJsonLogger' do
expect(Gitlab::DeprecationJsonLogger).not_to receive(:info)
subject
end
end
shared_examples 'logs to stderr' do |message|
it 'logs them to stderr' do
expect { subject }.to output(match(/^#{message}/)).to_stderr
end
end
shared_examples 'does not log to stderr' do
it 'does not log them to stderr' do
expect { subject }.not_to output.to_stderr
end
end
describe 'Ruby deprecations' do
context 'when catching deprecations through Kernel#warn' do
subject { warn('ABC gem is deprecated and will be removed') }
include_examples 'logs to Gitlab::DeprecationJsonLogger', 'ABC gem is deprecated and will be removed', 'ruby'
include_examples 'logs to stderr', 'ABC gem is deprecated and will be removed'
context 'when in production environment' do
let(:rails_env) { 'production' }
include_examples 'does not log to Gitlab::DeprecationJsonLogger'
include_examples 'logs to stderr', 'ABC gem is deprecated and will be removed'
context 'when GITLAB_LOG_DEPRECATIONS is set' do
let(:gitlab_log_deprecations) { '1' }
include_examples 'logs to Gitlab::DeprecationJsonLogger', 'ABC gem is deprecated and will be removed', 'ruby'
include_examples 'logs to stderr', 'ABC gem is deprecated and will be removed'
end
end
end
context 'when other messages from Kernel#warn' do
subject { warn('Sure is hot today') }
include_examples 'does not log to Gitlab::DeprecationJsonLogger'
include_examples 'logs to stderr', 'Sure is hot today'
end
end
describe 'Rails deprecations' do
context 'when catching deprecation warnings' do
subject { ActiveSupport::Deprecation.warn('ABC will be removed') }
include_examples 'logs to Gitlab::DeprecationJsonLogger', 'DEPRECATION WARNING: ABC will be removed', 'rails'
include_examples 'logs to stderr', 'DEPRECATION WARNING: ABC will be removed'
context 'when in production environment' do
let(:rails_env) { 'production' }
include_examples 'does not log to Gitlab::DeprecationJsonLogger'
include_examples 'does not log to stderr'
context 'when GITLAB_LOG_DEPRECATIONS is set' do
let(:gitlab_log_deprecations) { '1' }
include_examples 'logs to Gitlab::DeprecationJsonLogger', 'DEPRECATION WARNING: ABC will be removed', 'rails'
include_examples 'does not log to stderr'
end
end
end
context 'when catching disallowed warnings' do
before do
ActiveSupport::Deprecation.disallowed_warnings << /disallowed warning 1/
end
subject { ActiveSupport::Deprecation.warn('This is disallowed warning 1.') }
it 'raises Exception and warns on stderr' do
expect { subject }
.to raise_error(Exception)
.and output(match(/^DEPRECATION WARNING: This is disallowed warning 1\./)).to_stderr
end
context 'when in production environment' do
let(:rails_env) { 'production' }
it_behaves_like 'does not log to stderr'
it 'does not raise' do
expect { subject }.not_to raise_error
end
context 'when GITLAB_LOG_DEPRECATIONS is set' do
let(:gitlab_log_deprecations) { '1' }
it_behaves_like 'does not log to stderr'
it 'does not raise' do
expect { subject }.not_to raise_error
end
end
end
end
describe 'configuring ActiveSupport::Deprecation.disallowed_warnings' do
subject(:disallowed_warnings) { ActiveSupport::Deprecation.disallowed_warnings }
it { is_expected.to be_empty }
context 'when in production environment' do
let(:rails_env) { 'production' }
it { is_expected.to be_empty }
context 'when GITLAB_LOG_DEPRECATIONS is set' do
let(:gitlab_log_deprecations) { '1' }
it { is_expected.to be_empty }
end
end
end
end
end
|