spec/cc/cli/analyze_spec.rb (111 lines of code) (raw):

require "spec_helper" module CC::CLI describe Analyze do include FileSystemHelpers around do |test| within_temp_dir { test.call } end describe "#run" do it "sends expected engines to bridge" do write_cc_yaml(<<-EOYAML) {} EOYAML expect_bridge( config: match_engines([ CC::Config::Engine.new("structure", enabled: true, config: { "enabled" => true, "channel" => "stable" }), CC::Config::Engine.new("duplication", enabled: true, channel: "stable", config: { "enabled" => true, "channel" => "stable" }), ]) ) command = described_class.new command.run end it "respects -e for an unconfigured engine" do write_cc_yaml(<<-EOYAML) plugins: rubocop: enabled: true EOYAML expect_bridge( config: match_engines([ CC::Config::Engine.new("structure", enabled: false, config: { "enabled" => true, "channel" => "stable" }), CC::Config::Engine.new("duplication", enabled: false, channel: "stable", config: { "enabled" => true, "channel" => "stable" }), CC::Config::Engine.new("rubocop", enabled: false, channel: "stable", config: { "enabled" => true }), CC::Config::Engine.new("eslint", enabled: true, channel: "stable"), ]) ) command = described_class.new(["-e", "eslint"]) command.run end it "respects -e for an already configured engine" do write_cc_yaml(<<-EOYAML) plugins: rubocop: enabled: true config: file: myconfig.yml EOYAML expect_bridge( config: match_engines([ CC::Config::Engine.new("structure", enabled: false, config: { "enabled" => true, "channel" => "stable" }), CC::Config::Engine.new("duplication", enabled: false, channel: "stable", config: { "enabled" => true, "channel" => "stable" }), CC::Config::Engine.new("rubocop", enabled: true, channel: "stable", config: { "enabled" => true, "config" => "myconfig.yml" }), ]) ) command = described_class.new(["-e", "rubocop"]) command.run end it "respects multiple -e" do write_cc_yaml(<<-EOYAML) plugins: rubocop: enabled: true exclude_patterns: - foo EOYAML expect_bridge( config: match_engines([ CC::Config::Engine.new("structure", enabled: false, config: { "enabled" => true, "channel" => "stable" }), CC::Config::Engine.new("duplication", enabled: false, channel: "stable", config: { "enabled" => true, "channel" => "stable" }), CC::Config::Engine.new("rubocop", enabled: true, channel: "stable", exclude_patterns: ["foo"], config: { "enabled" => true, "exclude_patterns" => ["foo"] }), CC::Config::Engine.new("eslint", enabled: true, channel: "stable"), ]) ) command = described_class.new(["-e", "eslint", "-e", "rubocop"]) command.run end it "respects multiple -e with channel" do write_cc_yaml(<<-EOYAML) plugins: rubocop: enabled: true exclude_patterns: - foo EOYAML expect_bridge( config: match_engines([ CC::Config::Engine.new("structure", enabled: false, config: { "enabled" => true, "channel" => "stable" }), CC::Config::Engine.new("duplication", enabled: true, channel: "stable", config: { "enabled" => true, "channel" => "stable" }), CC::Config::Engine.new("rubocop", enabled: true, channel: "foo", exclude_patterns: ["foo"], config: { "enabled" => true, "exclude_patterns" => ["foo"] }), CC::Config::Engine.new("eslint", enabled: true, channel: "bar"), ]) ) command = described_class.new(["-e", "duplication", "-e", "eslint:bar", "-e", "rubocop:foo"]) command.run end end def write_cc_yaml(yaml) make_file(CC::Config::YAMLAdapter::DEFAULT_PATH, yaml) end def expect_bridge(config:) stub_bridge = double(:bridge) expect(stub_bridge).to receive(:run) expect(CC::Analyzer::Bridge).to receive(:new) do |args| expect(args[:config]).to config expect(args[:formatter]).to be_a_kind_of(CC::Analyzer::Formatters::Formatter) expect(args[:listener]).to be_an_instance_of(CC::Analyzer::CompositeContainerListener) expect(args[:registry]).to be_an_instance_of(CC::EngineRegistry) stub_bridge end end end end