spec/lib/gdk/command/debug_info_spec.rb (72 lines of code) (raw):
# frozen_string_literal: true
RSpec.describe GDK::Command::DebugInfo do
include ShelloutHelper
let(:gdk_root) { Pathname.new('/home/git/gdk') }
let(:args) { [] }
let(:shellout) { double(run: true) } # rubocop:todo RSpec/VerifiedDoubles
subject { described_class.new.run(args) }
before do
allow(GDK).to receive(:root).and_return(gdk_root)
allow(GDK::Output).to receive(:puts)
allow(File).to receive(:exist?).with(GDK::Config::FILE).and_return(false)
stub_shellout_response('uname -moprsv', 'exampleOS')
stub_shellout_response('arch', 'example_arch')
stub_shellout_response('ruby --version', '1.2.3')
stub_shellout_response('git rev-parse --short HEAD', 'abcdef')
env = {
'LANGUAGE' => 'example-lang',
'RUBY_CONFIGURE_OPTS' => 'example-ruby-config-opt'
}
stub_const('ENV', env)
end
describe '#run' do
it 'displays debug information and returns true' do
expect_output(/#{described_class::NEW_ISSUE_LINK}/o)
expect_output('Operating system: exampleOS')
expect_output('Architecture: example_arch')
expect_output('Ruby version: 1.2.3')
expect_output('GDK version: abcdef')
expect_output('Environment:')
expect_output("PATH=")
expect_output("LANG=")
expect_output("LANGUAGE=example-lang")
expect_output("LC_ALL=")
expect_output("LDFLAGS=")
expect_output("CPPFLAGS=")
expect_output("PKG_CONFIG_PATH=")
expect_output("LIBPCREDIR=")
expect_output("RUBY_CONFIGURE_OPTS=example-ruby-config-opt")
expect(subject).to be(true)
end
context 'gdk.yml is present' do
let(:gdk_config) { { example: :config, username: SecureRandom.uuid } }
let(:gdk_yml) { gdk_config.to_yaml }
let(:redacted_gdk_yml) { gdk_config.merge!({ username: "[redacted]" }).to_yaml }
before do
allow(File).to receive(:exist?).with(GDK::Config::FILE).and_return(true)
allow(File).to receive(:read).with(GDK::Config::FILE).and_return(gdk_yml)
allow(GDK.config).to receive(:dump!).with(user_only: true).and_return(gdk_config)
end
it 'includes gdk.yml contents in the debug output' do
expect_output('GDK configuration:')
expect_output(redacted_gdk_yml)
expect(subject).to be(true)
end
end
context 'an error is raised during shellout' do
before do
allow_gdk_shellout_command('uname -moprsv', any_args).and_raise('halt and catch fire')
end
it 'displays the error message and continues' do
expect_output('Operating system: Unknown (halt and catch fire)')
expect(subject).to be(true)
end
end
end
def stub_shellout_response(cmd, response)
shellout = double(run: response) # rubocop:todo RSpec/VerifiedDoubles
allow_gdk_shellout_command(cmd, any_args).and_return(shellout)
end
def expect_output(message)
expect(GDK::Output).to receive(:puts).with(message)
end
end