spec/cli_spec.rb in sandi_meter-1.1.8 vs spec/cli_spec.rb in sandi_meter-1.2.0
- old
+ new
@@ -1,44 +1,105 @@
require 'test_helper'
require_relative '../lib/sandi_meter/cli'
describe SandiMeter::CLI do
+ include FakeFS::SpecHelpers
+
let(:cli) { SandiMeter::CLI }
-
- describe '#execute' do
- before do
+ let(:gem_root) { File.expand_path('../', File.dirname(__FILE__)) }
+
+ before do
+ FakeFS.activate!
+
+ FakeFS::FileSystem.clone(gem_root)
+ end
+
+ after do
+ FakeFS.deactivate!
+ end
+
+ describe '#execute', silent_cli: true do
+ before do
@original_argv = ARGV
ARGV.clear
end
-
- after do
+
+ after do
ARGV.clear
ARGV.concat(@original_argv)
end
-
+
context 'with the graph flag passed in' do
before { ARGV.push('-g') }
- after { ARGV.pop }
-
+
it 'opens the graph in a web browser' do
- cli.should_receive(:open_in_browser)
+ expect(cli).to receive(:open_in_browser)
expect { cli.execute }.to raise_error(SystemExit)
end
end
context 'with the quiet flag passed in' do
before do
ARGV.push('-q')
ARGV.push('-g')
end
- after do
- ARGV.pop
- ARGV.pop
- end
-
+
it 'does not open the browser' do
- cli.should_not_receive(:open_in_browser)
+ expect(cli).to_not receive(:open_in_browser)
expect { cli.execute }.to raise_error(SystemExit)
+ end
+ end
+
+ context 'output path passed in' do
+ let(:test_path) { '/test_out_dir/test2' }
+ before do
+ ARGV.push('-q')
+ ARGV.push('-g')
+ ARGV.push('-o')
+ ARGV.push(test_path)
+ end
+
+ it 'saves output files to specified output path' do
+ expect { cli.execute }.to raise_error(SystemExit)
+ expect(File.directory?(test_path)).to eq(true)
+ end
+ end
+
+ context 'output path not specified' do
+ before do
+ ARGV.push('-q')
+ ARGV.push('-g')
+ ARGV.push('-p')
+ ARGV.push('/')
+ end
+
+ it 'saves output files in sandi_meter folder relative to scanned path' do
+ expect { cli.execute }.to raise_error(SystemExit)
+ expect(File.directory?(File.expand_path('/sandi_meter'))).to eq(true)
+ end
+ end
+
+ context 'makes account for rules thresholds' do
+ context 'for low thresholds' do
+ before do
+ ARGV.push('-t')
+ ARGV.push("1,1,1,1")
+ end
+
+ it 'terminates with 0 code' do
+ expect { cli.execute }.to terminate.with_code(0)
+ end
+ end
+
+ context 'for high thresholds' do
+ before do
+ ARGV.push('-t')
+ ARGV.push("99,99,99,99")
+ end
+
+ it 'terminates with 1 code' do
+ expect { cli.execute }.to terminate.with_code(1)
+ end
end
end
end
end