From 02c96a05538e068d10001050a0717d092880d6c4 Mon Sep 17 00:00:00 2001 From: Manabu Niseki Date: Tue, 9 Jul 2019 15:59:42 +0900 Subject: [PATCH] test: add CLI spec --- spec/cli_spec.rb | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 spec/cli_spec.rb diff --git a/spec/cli_spec.rb b/spec/cli_spec.rb new file mode 100644 index 0000000..441a1a8 --- /dev/null +++ b/spec/cli_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +RSpec.describe RogueOne::CLI do + def capture(stream) + begin + stream = stream.to_s + eval "$#{stream} = StringIO.new" + yield + result = eval("$#{stream}").string + ensure + eval("$#{stream} = #{stream.upcase}") + end + result + end + + describe "#report" do + let(:mock) { double("detector") } + let(:report) { { "verdict" => "benign one", "landing_pages" => [] } } + + before do + allow(mock).to receive(:report).and_return(report) + allow(RogueOne::Detector).to receive(:new).and_return(mock) + end + + it do + stdout = capture(:stdout) { described_class.start %w(report 1.1.1.1) } + json = JSON.parse(stdout) + expect(json).to eq(report) + end + + context "with ping error" do + before do + allow(RogueOne::Ping).to receive(:pong?).and_raise("error") + end + + it do + stdout = capture(:stdout) { described_class.start %w(report 1.1.1.1) } + json = JSON.parse(stdout) + expect(json).to eq("error" => "error") + end + end + end +end