spec/cc/analyzer/engine_output_spec.rb (65 lines of code) (raw):
require "spec_helper"
module CC::Analyzer
describe EngineOutput do
describe "#issue?" do
it "returns true if the output is an issue" do
output = { type: "issue" }.to_json
expect(EngineOutput.new("", output).issue?).to eq(true)
end
end
describe "#valid?" do
it "is true for a valid issue" do
output = sample_issue.to_json
expect(EngineOutput.new("engine", output)).to be_valid
end
it "is true for a valid meaure" do
output = { type: "measurement", name: "foo", value: 42 }.to_json
expect(EngineOutput.new("engine", output)).to be_valid
end
it "is false for an invalid issue" do
output = { type: "issue", categories: ["Foo"] }.to_json
expect(EngineOutput.new("engine", output)).not_to be_valid
end
it "is false for an invalid measurement" do
output = { type: "measurement", value: "Foo" }.to_json
expect(EngineOutput.new("engine", output)).not_to be_valid
end
it "is false for invalid JSON" do
output = "{bad"
expect(EngineOutput.new("engine", output)).not_to be_valid
end
end
describe "#error" do
it "gets IssueValidator errors for invalid issue" do
output = { type: "issue", categories: ["Foo"] }.to_json
expect(EngineOutput.new("engine", output).error[:message]).to match(
"Category must be at least one of"
)
end
it "gets MeasureValidator errors for invalid measures" do
output = { type: "measurement", value: "Foo" }.to_json
expect(EngineOutput.new("engine", output).error[:message]).to match(
"Value must be present and numeric"
)
end
it "is appropriate for invalid JSON" do
output = "{bad"
expect(EngineOutput.new("engine", output).error[:message]).to match(
"Invalid JSON"
)
end
end
describe "#to_json" do
it "is JSON for an issue" do
str = sample_issue.to_json
output = EngineOutput.new("engine", str)
expect(output.to_json).to eq(Issue.new("engine", str).to_json)
end
it "is JSON for a measurement" do
str = { type: "measurement", name: "foo", value: 42 }.to_json
output = EngineOutput.new("engine", str)
expect(output.to_json).to eq(Measurement.new("engine", str).to_json)
end
end
end
end