139 lines
4.2 KiB
Ruby
139 lines
4.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::Ci::Reports::CodequalityReports do
|
|
let(:codequality_report) { described_class.new }
|
|
let(:degradation_1) { build(:codequality_degradation_1) }
|
|
let(:degradation_2) { build(:codequality_degradation_2) }
|
|
|
|
it { expect(codequality_report.degradations).to eq({}) }
|
|
|
|
describe '#add_degradation' do
|
|
context 'when there is a degradation' do
|
|
before do
|
|
codequality_report.add_degradation(degradation_1)
|
|
end
|
|
|
|
it 'adds degradation to codequality report' do
|
|
expect(codequality_report.degradations.keys).to eq([degradation_1[:fingerprint]])
|
|
expect(codequality_report.degradations.values.size).to eq(1)
|
|
end
|
|
end
|
|
|
|
context 'when a required property is missing in the degradation' do
|
|
let(:invalid_degradation) do
|
|
{
|
|
"type": "Issue",
|
|
"check_name": "Rubocop/Metrics/ParameterLists",
|
|
"description": "Avoid parameter lists longer than 5 parameters. [12/5]",
|
|
"fingerprint": "ab5f8b935886b942d621399aefkaehfiaehf",
|
|
"severity": "minor"
|
|
}.with_indifferent_access
|
|
end
|
|
|
|
it 'sets location as an error' do
|
|
codequality_report.add_degradation(invalid_degradation)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#set_error_message' do
|
|
context 'when there is an error' do
|
|
it 'sets errors' do
|
|
codequality_report.set_error_message("error")
|
|
|
|
expect(codequality_report.error_message).to eq("error")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#degradations_count' do
|
|
subject(:degradations_count) { codequality_report.degradations_count }
|
|
|
|
context 'when there are many degradations' do
|
|
before do
|
|
codequality_report.add_degradation(degradation_1)
|
|
codequality_report.add_degradation(degradation_2)
|
|
end
|
|
|
|
it 'returns the number of degradations' do
|
|
expect(degradations_count).to eq(2)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#all_degradations' do
|
|
subject(:all_degradations) { codequality_report.all_degradations }
|
|
|
|
context 'when there are many degradations' do
|
|
before do
|
|
codequality_report.add_degradation(degradation_1)
|
|
codequality_report.add_degradation(degradation_2)
|
|
end
|
|
|
|
it 'returns all degradations' do
|
|
expect(all_degradations).to contain_exactly(degradation_1, degradation_2)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#sort_degradations!' do
|
|
let(:major) { build(:codequality_degradation, :major) }
|
|
let(:minor) { build(:codequality_degradation, :minor) }
|
|
let(:blocker) { build(:codequality_degradation, :blocker) }
|
|
let(:info) { build(:codequality_degradation, :info) }
|
|
let(:major_2) { build(:codequality_degradation, :major) }
|
|
let(:critical) { build(:codequality_degradation, :critical) }
|
|
let(:uppercase_major) { build(:codequality_degradation, severity: 'MAJOR') }
|
|
let(:unknown) { build(:codequality_degradation, severity: 'unknown') }
|
|
|
|
let(:codequality_report) { described_class.new }
|
|
|
|
before do
|
|
codequality_report.add_degradation(major)
|
|
codequality_report.add_degradation(minor)
|
|
codequality_report.add_degradation(blocker)
|
|
codequality_report.add_degradation(major_2)
|
|
codequality_report.add_degradation(info)
|
|
codequality_report.add_degradation(critical)
|
|
codequality_report.add_degradation(unknown)
|
|
|
|
codequality_report.sort_degradations!
|
|
end
|
|
|
|
it 'sorts degradations based on severity' do
|
|
expect(codequality_report.degradations.values).to eq([
|
|
blocker,
|
|
critical,
|
|
major,
|
|
major_2,
|
|
minor,
|
|
info,
|
|
unknown
|
|
])
|
|
end
|
|
|
|
context 'with non-existence and uppercase severities' do
|
|
let(:other_report) { described_class.new }
|
|
let(:non_existent) { build(:codequality_degradation, severity: 'non-existent') }
|
|
|
|
before do
|
|
other_report.add_degradation(blocker)
|
|
other_report.add_degradation(uppercase_major)
|
|
other_report.add_degradation(minor)
|
|
other_report.add_degradation(non_existent)
|
|
end
|
|
|
|
it 'sorts unknown last' do
|
|
expect(other_report.degradations.values).to eq([
|
|
blocker,
|
|
uppercase_major,
|
|
minor,
|
|
non_existent
|
|
])
|
|
end
|
|
end
|
|
end
|
|
end
|