spec/cli_spec.rb in bundler-audit-0.8.0 vs spec/cli_spec.rb in bundler-audit-0.9.0

- old
+ new

@@ -13,32 +13,72 @@ end end end end + describe "#stats" do + let(:size) { 1234 } + let(:last_updated_at) { Time.now } + let(:commit_id) { 'f0f97c4c493b853319e029d226e96f2c2f0dc539' } + + let(:database) { double(Bundler::Audit::Database) } + + before do + expect(Bundler::Audit::Database).to receive(:new).and_return(database) + + expect(database).to receive(:size).and_return(size) + expect(database).to receive(:last_updated_at).and_return(last_updated_at) + expect(database).to receive(:commit_id).and_return(commit_id) + end + + it "prints total advisory count" do + expect { subject.stats }.to output( + include( + "advisories:\t#{size} advisories", + "last updated:\t#{last_updated_at}", + "commit:\t#{commit_id}" + ) + ).to_stdout + end + end + describe "#update" do + let(:database) { double(Bundler::Audit::Database) } + + before do + allow(Bundler::Audit::Database).to receive(:new).and_return(database) + end + context "not --quiet (the default)" do context "when update succeeds" do + let(:size) { 1234 } + let(:last_updated_at) { Time.now } + let(:commit_id) { 'f0f97c4c493b853319e029d226e96f2c2f0dc539' } + before do - expect_any_instance_of(Bundler::Audit::Database).to receive(:update!).and_return(true) + expect(database).to receive(:update!).and_return(true) + expect(database).to receive(:size).and_return(size) + expect(database).to receive(:last_updated_at).and_return(last_updated_at) + expect(database).to receive(:commit_id).and_return(commit_id) end - it "prints updated message" do - expect { subject.update }.to output(/Updated ruby-advisory-db/).to_stdout + it "prints updated message and then the stats" do + expect { subject.update }.to output( + include( + "Updated ruby-advisory-db", + "ruby-advisory-db:", + " advisories:\t#{size} advisories", + " last updated:\t#{last_updated_at}", + " commit:\t#{commit_id}" + ) + ).to_stdout end - - it "prints total advisory count" do - size = 1234 - expect_any_instance_of(Bundler::Audit::Database).to receive(:size).and_return(size) - - expect { subject.update }.to output(/advisories:\t#{size} advisories/).to_stdout - end end context "when update fails" do before do - expect_any_instance_of(Bundler::Audit::Database).to receive(:update!).and_return(false) + expect(database).to receive(:update!).and_return(false) end it "prints failure message" do expect { begin @@ -56,26 +96,26 @@ }.to raise_error(SystemExit) do |error| expect(error.success?).to eq(false) expect(error.status).to eq(1) end end - end context "when git is not installed" do before do - expect_any_instance_of(Bundler::Audit::Database).to receive(:update!).and_return(nil) + expect(database).to receive(:update!).and_return(nil) + expect(Bundler).to receive(:git_present?).and_return(false) end it "prints failure message" do - expect do + expect { begin subject.update rescue SystemExit end - end.to output(/Git is not installed!/).to_stderr + }.to output(/Git is not installed!/).to_stderr end it "exits with error status code" do expect { # Capture output of `update` only to keep spec output clean. @@ -94,11 +134,11 @@ described_class.new([], {quiet: true}) end context "when update succeeds" do before do - expect_any_instance_of(Bundler::Audit::Database).to( + expect(database).to( receive(:update!).with(quiet: true).and_return(true) ) end it "does not print any output" do @@ -106,10 +146,10 @@ end end context "when update fails" do before do - expect_any_instance_of(Bundler::Audit::Database).to( + expect(database).to( receive(:update!).with(quiet: true).and_return(false) ) end it "prints failure message" do