spec/cc/cli/validate_config_spec.rb (115 lines of code) (raw):

require "spec_helper" module CC::CLI describe ValidateConfig do around do |spec| Dir.chdir(Dir.mktmpdir) { spec.run } end describe "#run" do it "reports no errors if no file is committed" do stdout, _stderr, code = capture_io_and_exit_code do ValidateConfig.new.run end expect(stdout).to match("nothing to validate") expect(code).to be_zero end it "reports warning if too many files are committed" do write_cc_yaml("foo") write_cc_json("{}") stdout, _stderr, code = capture_io_and_exit_code do ValidateConfig.new.run end expect(stdout).to match("only the JSON will be used") expect(code).to be_zero end it "reports yaml errors and exits nonzero" do write_cc_yaml(<<-EOYAML) engkxhfgkxfhg: sdoufhsfogh: - 0- fgkjfhgkdjfg;h:; sligj: oi i ; EOYAML stdout, _stderr, code = capture_io_and_exit_code do ValidateConfig.new.run end expect(stdout).to match("ERROR") expect(code).to be_nonzero end it "reports yaml warnings but does not exit nonzero" do write_cc_yaml(<<-EOYAML) engines: rubocop: enabled: true EOYAML stdout, _stderr, code = capture_io_and_exit_code do ValidateConfig.new.run end expect(stdout).to match("WARNING") expect(code).to be_zero end it "reports yaml errors and warnings together" do write_cc_yaml(<<-EOYAML) engines: rubocop: enabled: true jshint: not_enabled EOYAML stdout, _stderr, code = capture_io_and_exit_code do ValidateConfig.new.run end expect(stdout).to match("engine jshint: section must be a boolean or a hash") expect(stdout).to match("'engines' has been deprecated") expect(code).to be_nonzero end it "reports copy looks great for valid yaml" do write_cc_yaml(<<-EOYAML) version: "2" plugins: rubocop: enabled: true EOYAML stdout, _stderr, code = capture_io_and_exit_code do ValidateConfig.new.run end expect(stdout).to match(/no errors or warnings/i) expect(code).to be_zero end it "warns of invalid engines or channels in yaml" do write_cc_yaml(<<-EOYAML) engines: rubocop: enabled: true eslint: enabled: true channel: madeup madeup: enabled: true EOYAML stdout, _stderr, code = capture_io_and_exit_code do ValidateConfig.new.run end expect(stdout).to include("unknown engine or channel <madeup:stable>") expect(stdout).to include("unknown engine or channel <eslint:madeup>") expect(code).to be_zero end end it "reports json errors and exits nonzero" do write_cc_yaml(JSON.generate( plugins: "foobar" )) stdout, _stderr, code = capture_io_and_exit_code do ValidateConfig.new.run end expect(stdout).to match("ERROR") expect(stdout).to match("'plugins' must be a hash") expect(code).to be_nonzero end def write_cc_yaml(content) File.write(".codeclimate.yml", content) end def write_cc_json(content) File.write(".codeclimate.json", content) end end end