From cb0e8e282e1e8a4e594596971f742b41b866a8a5 Mon Sep 17 00:00:00 2001
From: Tetiana Chupryna <tchupryna@gitlab.com>
Date: Wed, 22 Jun 2022 19:10:32 +0200
Subject: [PATCH] Add denied licenses bool to widget info

Issue: https://gitlab.com/gitlab-org/gitlab/-/issues/362635

Update test with new field

Momoize method reused method
---
 .../collapsed_comparer_entity.rb              |  4 ++
 ...ense_scanning_reports_collapsed_service.rb | 15 ++++---
 .../collapsed_comparer_entity_spec.rb         |  3 +-
 ...scanning_reports_collapsed_service_spec.rb | 41 ++++++++++---------
 4 files changed, 38 insertions(+), 25 deletions(-)

diff --git a/ee/app/serializers/license_compliance/collapsed_comparer_entity.rb b/ee/app/serializers/license_compliance/collapsed_comparer_entity.rb
index 9c642be0762d0..d2bceb3131732 100644
--- a/ee/app/serializers/license_compliance/collapsed_comparer_entity.rb
+++ b/ee/app/serializers/license_compliance/collapsed_comparer_entity.rb
@@ -18,5 +18,9 @@ class CollapsedComparerEntity < Grape::Entity
     expose :approval_required do |_|
       request.approval_required
     end
+
+    expose :has_denied_licenses do |_|
+      request.has_denied_licenses
+    end
   end
 end
diff --git a/ee/app/services/ci/compare_license_scanning_reports_collapsed_service.rb b/ee/app/services/ci/compare_license_scanning_reports_collapsed_service.rb
index 0438771c00fa4..07133da723b8f 100644
--- a/ee/app/services/ci/compare_license_scanning_reports_collapsed_service.rb
+++ b/ee/app/services/ci/compare_license_scanning_reports_collapsed_service.rb
@@ -2,6 +2,8 @@
 
 module Ci
   class CompareLicenseScanningReportsCollapsedService < ::Ci::CompareLicenseScanningReportsService
+    include ::Gitlab::Utils::StrongMemoize
+
     def serializer_class
       ::LicenseCompliance::CollapsedComparerSerializer
     end
@@ -19,12 +21,14 @@ def approval_required
     end
 
     def has_denied_licenses?
-      licenses = comparer_entity.new_licenses
+      strong_memoize(:has_denied_licenses) do
+        licenses = comparer_entity.new_licenses
 
-      return false if licenses.nil? || licenses.empty?
+        next false if licenses.nil? || licenses.empty?
 
-      licenses.any? do |l|
-        'denied' == l.approval_status
+        licenses.any? do |l|
+          'denied' == l.approval_status
+        end
       end
     end
 
@@ -32,7 +36,8 @@ def serializer_params
       {
         project: project,
         current_user: current_user,
-        approval_required: approval_required
+        approval_required: approval_required,
+        has_denied_licenses: has_denied_licenses?
       }
     end
   end
diff --git a/ee/spec/serializers/license_compliance/collapsed_comparer_entity_spec.rb b/ee/spec/serializers/license_compliance/collapsed_comparer_entity_spec.rb
index 36b2fd5be12ba..5d330bc43497e 100644
--- a/ee/spec/serializers/license_compliance/collapsed_comparer_entity_spec.rb
+++ b/ee/spec/serializers/license_compliance/collapsed_comparer_entity_spec.rb
@@ -22,7 +22,7 @@
     create(:ci_pipeline, :success, project: project, builds: [create(:ee_ci_build, :success)])
   end
 
-  let(:request) { EntityRequest.new(approval_required: false) }
+  let(:request) { EntityRequest.new(approval_required: false, has_denied_licenses: false) }
 
   describe '#as_json' do
     subject { entity.as_json }
@@ -32,6 +32,7 @@
       expect(subject).to have_key(:existing_licenses)
       expect(subject).to have_key(:removed_licenses)
       expect(subject).to have_key(:approval_required)
+      expect(subject).to have_key(:has_denied_licenses)
     end
   end
 end
diff --git a/ee/spec/services/ci/compare_license_scanning_reports_collapsed_service_spec.rb b/ee/spec/services/ci/compare_license_scanning_reports_collapsed_service_spec.rb
index a0bd7d772f99b..482e6597fc9fe 100644
--- a/ee/spec/services/ci/compare_license_scanning_reports_collapsed_service_spec.rb
+++ b/ee/spec/services/ci/compare_license_scanning_reports_collapsed_service_spec.rb
@@ -29,33 +29,36 @@
       let_it_be(:base_pipeline) { create(:ee_ci_pipeline, :with_license_scanning_report, project: project) }
       let_it_be(:head_pipeline) { create(:ee_ci_pipeline, :with_license_scanning_feature_branch, project: project) }
 
-      it 'exposes report with numbers of licenses by type' do
-        expect(subject[:status]).to eq(:parsed)
-        expect(subject[:data]['new_licenses']).to eq(1)
-        expect(subject[:data]['existing_licenses']).to eq(1)
-        expect(subject[:data]['removed_licenses']).to eq(3)
-        expect(subject[:data]['approval_required']).to eq(false)
-      end
+      context 'with denied licenses' do
+        before do
+          allow_next_instance_of(::SCA::LicensePolicy) do |license|
+            allow(license).to receive(:approval_status).and_return('denied')
+          end
+        end
 
-      context 'when license_check enabled' do
-        let(:license_check) { true }
+        it 'exposes report with numbers of licenses by type' do
+          expect(subject[:status]).to eq(:parsed)
+          expect(subject[:data]['new_licenses']).to eq(1)
+          expect(subject[:data]['existing_licenses']).to eq(1)
+          expect(subject[:data]['removed_licenses']).to eq(3)
+          expect(subject[:data]['approval_required']).to eq(false)
+          expect(subject[:data]['has_denied_licenses']).to eq(true)
+        end
 
-        context 'with denied licenses' do
-          before do
-            allow_next_instance_of(::SCA::LicensePolicy) do |license|
-              allow(license).to receive(:approval_status).and_return('denied')
-            end
-          end
+        context 'when license_check enabled' do
+          let(:license_check) { true }
 
           it 'exposes approval as required' do
             expect(subject[:data]['approval_required']).to eq(true)
+            expect(subject[:data]['has_denied_licenses']).to eq(true)
           end
         end
+      end
 
-        context 'without denied licenses' do
-          it 'exposes approval as not required' do
-            expect(subject[:data]['approval_required']).to eq(false)
-          end
+      context 'without denied licenses' do
+        it 'exposes approval as not required' do
+          expect(subject[:data]['approval_required']).to eq(false)
+          expect(subject[:data]['has_denied_licenses']).to eq(false)
         end
       end
     end
-- 
GitLab