Commit 4c60f5b2 authored by mo khan's avatar mo khan

Convert detected_policies to find_policies

* Rename `detected_policies to `find_policies`.
* Update test cases
parent 48c04638
......@@ -70,13 +70,10 @@ module Projects
end
def matching_policies_from(license_compliance)
only_detected = filter_params[:detected]
classifications = Array(filter_params[:classification] || ['allowed', 'denied', 'unclassified'])
license_compliance.policies.find_all do |policy|
next if only_detected && policy.dependencies.none?
classifications.include?(policy.classification)
end
license_compliance.find_policies(
detected_only: filter_params[:detected].present?,
classification: Array(filter_params[:classification] || [])
)
end
end
end
......@@ -14,8 +14,12 @@ module SCA
end
end
def detected_policies
policies.reject { |policy| policy.dependencies.count.zero? }
def find_policies(detected_only: false, classification: [])
classifications = Array(classification || [])
policies.reject do |policy|
(detected_only && policy.dependencies.none?) ||
(classifications.present? && !policy.classification.in?(classifications))
end
end
def latest_build_for_default_branch
......
......@@ -199,7 +199,7 @@ describe Projects::LicensesController do
get :index, params: {
namespace_id: project.namespace,
project_id: project,
classification: ['allowed', 'denied']
classification: %w[allowed denied]
}, format: :json
end
......
......@@ -147,11 +147,13 @@ RSpec.describe SCA::LicenseCompliance do
end
end
describe "#detected_policies" do
describe "#find_policies" do
let!(:pipeline) { create(:ci_pipeline, :success, project: project, builds: [create(:ee_ci_build, :success, :license_scan_v2)]) }
let!(:mit_policy) { create(:software_license_policy, :denied, software_license: mit, project: project) }
let!(:other_license_policy) { create(:software_license_policy, :allowed, software_license: other_license, project: project) }
let(:results) { subject.detected_policies }
context "when searching for policies for licenses that were detected in a scan report" do
let(:results) { subject.find_policies(detected_only: true) }
it 'excludes policies for licenses that do not appear in the latest license scan report' do
expect(results.count).to eq(3)
......@@ -182,6 +184,54 @@ RSpec.describe SCA::LicenseCompliance do
end
end
context "when searching for policies with a specific classification" do
let(:results) { subject.find_policies(classification: ['allowed']) }
it 'includes an entry for each `allowed` licensed' do
expect(results.count).to eq(1)
expect(results[0].id).to eql(other_license_policy.id)
expect(results[0].name).to eq(other_license_policy.software_license.name)
expect(results[0].url).to be_blank
expect(results[0].classification).to eq("allowed")
expect(results[0].spdx_identifier).to eq(other_license_policy.software_license.spdx_identifier)
end
end
context "when searching for policies by multiple classifications" do
let(:results) { subject.find_policies(classification: %w[allowed denied]) }
it 'includes an entry for each `allowed` and `denied` licensed' do
expect(results.count).to eq(2)
expect(results[0].id).to eql(mit_policy.id)
expect(results[0].name).to eq(mit_policy.software_license.name)
expect(results[0].url).to be_present
expect(results[0].classification).to eq("denied")
expect(results[0].spdx_identifier).to eq(mit_policy.software_license.spdx_identifier)
expect(results[1].id).to eql(other_license_policy.id)
expect(results[1].name).to eq(other_license_policy.software_license.name)
expect(results[1].url).to be_blank
expect(results[1].classification).to eq("allowed")
expect(results[1].spdx_identifier).to eq(other_license_policy.software_license.spdx_identifier)
end
end
context "when searching for detected policies matching a classification" do
let(:results) { subject.find_policies(detected_only: true, classification: %w[allowed denied]) }
it 'includes an entry for each entry that was detected in the report and matches a classification' do
expect(results.count).to eq(1)
expect(results[0].id).to eql(mit_policy.id)
expect(results[0].name).to eq(mit_policy.software_license.name)
expect(results[0].url).to be_present
expect(results[0].classification).to eq("denied")
expect(results[0].spdx_identifier).to eq(mit_policy.software_license.spdx_identifier)
end
end
end
describe "#latest_build_for_default_branch" do
let(:regular_build) { create(:ci_build, :success) }
let(:license_scan_build) { create(:ee_ci_build, :license_scan_v2, :success) }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment