spec/lib/gdk/command/report_spec.rb (85 lines of code) (raw):
# frozen_string_literal: true
RSpec.describe GDK::Command::Report, :gdk_root do
include ShelloutHelper
let(:gdk_report) { described_class.new }
let(:gdk_root) { Pathname.new('/home/git/gdk') }
let(:report_template_dir) { Pathname.new('gdk/lib/support/files') }
let(:report_template_file) { GDK.root.join(described_class::REPORT_TEMPLATE_PATH) }
let(:args) { [] }
let(:shellout) { double(run: true) } # rubocop:todo RSpec/VerifiedDoubles
let(:debug_info) { GDK::Command::DebugInfo.new }
let(:report_id) { SecureRandom.uuid }
let(:package_manager) { 'mise-en-place' }
let(:env_variables) { { 'PATH' => '/usr/local/bin', 'GDK_VERSION' => '0.2.0' } }
let(:gdk_config) { { 'config' => 'value' } }
let(:gdk_doctor) { 'GDK Doctor output' }
let(:gem_env) { 'Gem environment' }
let(:bundle_env) { 'Bundle environment' }
let(:network_information) { 'Network information' }
let(:logs) { { 'service1' => 'Log content' } }
let(:git_status) { gdk_report.git_status('repo1') }
let(:git_head) { gdk_report.git_head('repo1') }
let(:git_repositories) { { 'repo1' => { git_status: git_status, git_head: git_head } } }
let(:date_time) { Time.now.strftime('%d/%m/%Y %H:%M:%S %Z') }
let(:report_json) do
{
report_id: report_id,
os_name: debug_info.os_name,
arch: debug_info.arch,
ruby_version: debug_info.ruby_version,
gdk_version: debug_info.gdk_version,
package_manager: package_manager,
env_variables: env_variables,
gdk_config: gdk_config,
gdk_doctor: gdk_doctor,
gem_env: gem_env,
bundle_env: bundle_env,
network_information: network_information,
logs: logs,
git_repositories: git_repositories,
date_time: date_time
}
end
subject { gdk_report.run(args) }
describe '#run' do
before do
allow(GDK.config.mise).to receive(:enabled?).and_return(true)
allow(GDK.config).to receive(:gdk_root).and_return(gdk_root)
allow(GDK.root).to receive(:join).with(described_class::REPORT_TEMPLATE_PATH)
.and_return(report_template_file)
allow(gdk_report).to receive_messages(
report_id: report_id,
package_manager: package_manager,
env_variables: env_variables,
gdk_config: gdk_config,
gdk_doctor: gdk_doctor,
gem_env: gem_env,
bundle_env: bundle_env,
network_information: network_information,
logs: logs,
git_repositories: git_repositories,
git_status: { repo1: 'clean' },
git_head: { repo1: 'commit_hash' },
date_time: date_time
)
allow(GDK::Templates::ErbRenderer).to receive(:new).with(report_template_file, report_json: report_json)
.and_call_original
allow(gdk_report).to receive(:open_browser)
allow(gdk_report).to receive(:copy_clipboard)
end
it 'displays the generated report and returns true' do
expect_output(:info, message: 'We are collecting report details, this might take a minute ...')
expect_output_to_include('## Environment')
expect_output(:info, message: 'This report has been copied to your clipboard.')
expect_output(
:info, message: 'We opened the browser with a new issue, please paste this report from your clipboard into the description.'
)
expect(subject).to be(true)
end
end
def expect_output(level, message: nil)
expect(GDK::Output).to receive(level).with(message || no_args)
end
def expect_output_to_include(message)
expect(GDK::Output).to receive(:puts).with(include(message))
end
end