require 'spec_helper' describe 'Configuration.logger' do before do @env = {} end context 'in a Rails app' do key_warning = '[Bugsnag]: No valid API key has been set, notifications will not be sent' is_jruby = defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby' incompatible = (RUBY_VERSION < '2.0.0') || is_jruby before do skip "Incompatible with Ruby <2.0 and JRuby" if incompatible @env['RACK_ENV'] = 'production' end def run_app(name) out_reader, out_writer = IO.pipe Dir.chdir(File.join(File.dirname(__FILE__), "../fixtures/apps/#{name}")) do Bundler.with_clean_env do pid = Process.spawn('bundle install', out: out_writer.fileno, err: out_writer.fileno) Process.waitpid(pid, 0) pid = Process.spawn(@env, 'bundle exec rackup config.ru', out: out_writer.fileno, err: out_writer.fileno) sleep(2) Process.kill(1, pid) end end out_writer.close output = "" output << out_reader.gets until out_reader.eof? output end context 'sets an API key using the BUGSNAG_API_KEY env var' do it 'does not log a warning' do skip "Incompatible with Ruby <2.0 and JRuby" if incompatible @env['BUGSNAG_API_KEY'] = 'c34a2472bd240ac0ab0f52715bbdc05d' output = run_app('rails-no-config') expect(output).not_to include(key_warning) end end context 'sets an API key using the bugsnag initializer' do it 'does not log a warning' do skip "Incompatible with Ruby <2.0 and JRuby" if incompatible output = run_app('rails-initializer-config') expect(output).not_to include(key_warning) end end context 'skips setting an API key' do it 'logs a warning' do skip "Incompatible with Ruby <2.0 and JRuby" if incompatible output = run_app('rails-no-config') expect(output).to include(key_warning) end end context 'when the API key is invalid in the bugsnag initializer' do it 'logs a warning' do skip "Incompatible with Ruby <2.0 and JRuby" if incompatible output = run_app('rails-invalid-initializer-config') expect(output).to include(key_warning) end end context 'sets an invalid API key using the BUGSNAG_API_KEY env var' do it 'logs a warning' do skip "Incompatible with Ruby <2.0 and JRuby" if incompatible @env['BUGSNAG_API_KEY'] = 'not a real key' output = run_app('rails-no-config') expect(output).to include(key_warning) end end end context 'in a script' do key_warning = /\[Bugsnag\] .* No valid API key has been set, notifications will not be sent/ def run_app(name) output = '' Dir.chdir(File.join(File.dirname(__FILE__), "../fixtures/apps/scripts")) do Bundler.with_clean_env do IO.popen([@env, 'bundle', 'exec', 'ruby', "#{name}.rb", err: [:child, :out]]) do |io| output << io.read end end end output end context 'sets an API key using the BUGSNAG_API_KEY env var' do it 'does not log a warning' do @env['BUGSNAG_API_KEY'] = 'c34a2472bd240ac0ab0f52715bbdc05d' output = run_app('no_config') expect(output).not_to match(key_warning) end end context 'sets an API key using Bugsnag.configure' do it 'does not log a warning' do output = run_app('configure_key') expect(output).not_to match(key_warning) end end context 'sets an invalid API key using Bugsnag.configure' do it 'logs a warning' do output = run_app('configure_invalid_key') expect(output).to match(key_warning) end end context 'sets an invalid API key using the BUGSNAG_API_KEY env var' do it 'logs a warning' do @env['BUGSNAG_API_KEY'] = 'bad key bad key whatcha gonna do' output = run_app('no_config') expect(output).to match(key_warning) end end context 'skips setting an API key' do it 'logs a warning' do output = run_app('no_config') expect(output).to match(key_warning) end end end end