spec/cc/analyzer/issue_spec.rb (71 lines of code) (raw):
require "spec_helper"
module CC::Analyzer
describe Issue do
let(:output) do
sample_issue
end
it "allows access to keys as methods" do
issue = Issue.new("", output.to_json)
expect(issue.respond_to?("check_name")).to eq true
expect(issue.check_name).to eq("Rubocop/Style/Documentation")
end
describe "#fingerprint" do
it "adds a fingerprint when it is missing" do
issue = Issue.new("", output.to_json)
expect(issue.fingerprint).to eq "6d6cd30cd53e7566fb681eb3239a3cf4"
end
it "raises a helpful error when the location is malformed" do
output["location"] = {
"path" => "foo.js",
"positions" => {
"begin" => {
"line" => 3,
"column" => nil,
},
"end" => {
"line" => 7,
"column" => 9,
},
},
}
issue = Issue.new("", output.to_json)
expect { issue.fingerprint }.to raise_error SourceExtractor::InvalidLocation
end
it "doesn't overwrite fingerprints within output" do
output["fingerprint"] = "foo"
issue = Issue.new("", output.to_json)
expect(issue.fingerprint).to eq "foo"
end
end
describe "#as_json" do
it "merges in defaulted attributes" do
expected_additions = {
"engine_name" => "foo",
"fingerprint" => "6d6cd30cd53e7566fb681eb3239a3cf4",
"severity" => Issue::DEFAULT_SEVERITY,
}
issue = Issue.new("foo", output.to_json)
expect(issue.as_json).to eq(output.merge(expected_additions))
end
it "maps deprecated severity to default" do
expected_additions = {
"engine_name" => "",
"fingerprint" => "6d6cd30cd53e7566fb681eb3239a3cf4",
"severity" => Issue::DEFAULT_SEVERITY,
}
issue = Issue.new("", output.merge({ "severity" => Issue::DEPRECATED_SEVERITY }).to_json)
expect(issue.as_json).to eq(output.merge!(expected_additions))
end
it "doesn't overwrite defaulted attrs when present" do
optional_attrs = {
"engine_name" => "foo",
"fingerprint" => "433fae1189b03bcd9153dc8dce209fa5",
"severity" => "major",
}
unchanged = output.merge(optional_attrs)
issue = Issue.new("", unchanged.to_json)
expect(issue.as_json).to eq(unchanged)
end
end
end
end