From e022107e40e3428b33147f76f3acf2908c760fae Mon Sep 17 00:00:00 2001
From: Will Meek <wmeek@gitlab.com>
Date: Mon, 10 Oct 2022 02:27:06 +0000
Subject: [PATCH] Add E2E test to check Security Config License Compliance
 status

---
 .../security_configuration/components/app.vue |  7 ++-
 .../page/project/secure/configuration_form.rb | 26 ++++++++++
 ...enable_scanning_from_configuration_spec.rb | 47 +++++++++++++++++++
 3 files changed, 79 insertions(+), 1 deletion(-)

diff --git a/app/assets/javascripts/security_configuration/components/app.vue b/app/assets/javascripts/security_configuration/components/app.vue
index 4fb70a9225427..7828efc358aa1 100644
--- a/app/assets/javascripts/security_configuration/components/app.vue
+++ b/app/assets/javascripts/security_configuration/components/app.vue
@@ -167,7 +167,12 @@ export default {
       </template>
     </user-callout-dismisser>
 
-    <gl-tabs content-class="gl-pt-0" sync-active-tab-with-query-params lazy>
+    <gl-tabs
+      content-class="gl-pt-0"
+      data-qa-selector="security_configuration_container"
+      sync-active-tab-with-query-params
+      lazy
+    >
       <gl-tab
         data-testid="security-testing-tab"
         :title="$options.i18n.securityTesting"
diff --git a/qa/qa/page/project/secure/configuration_form.rb b/qa/qa/page/project/secure/configuration_form.rb
index fa1fad4427310..20999f7c92af5 100644
--- a/qa/qa/page/project/secure/configuration_form.rb
+++ b/qa/qa/page/project/secure/configuration_form.rb
@@ -9,6 +9,7 @@ class ConfigurationForm < QA::Page::Base
           include QA::Page::Settings::Common
 
           view 'app/assets/javascripts/security_configuration/components/app.vue' do
+            element :security_configuration_container
             element :security_configuration_history_link
           end
 
@@ -17,6 +18,7 @@ class ConfigurationForm < QA::Page::Base
             element :sast_status, "`${feature.type}_status`" # rubocop:disable QA/ElementWithPattern
             element :sast_enable_button, "`${feature.type}_enable_button`" # rubocop:disable QA/ElementWithPattern
             element :dependency_scanning_mr_button, "`${feature.type}_mr_button`" # rubocop:disable QA/ElementWithPattern
+            element :license_scanning_status, "`${feature.type}_status`" # rubocop:disable QA/ElementWithPattern
           end
 
           view 'app/assets/javascripts/security_configuration/components/auto_dev_ops_alert.vue' do
@@ -67,6 +69,18 @@ def has_no_dependency_scanning_status?(status_text)
             end
           end
 
+          def has_license_compliance_status?(status_text)
+            within_element(:license_scanning_status) do
+              has_text?(status_text)
+            end
+          end
+
+          def has_no_license_compliance_status?(status_text)
+            within_element(:license_scanning_status) do
+              has_no_text?(status_text)
+            end
+          end
+
           def has_auto_devops_container?
             has_element?(:autodevops_container)
           end
@@ -80,6 +94,18 @@ def has_auto_devops_container_description?
               has_text?('Quickly enable all continuous testing and compliance tools by enabling Auto DevOps')
             end
           end
+
+          def go_to_compliance_tab
+            go_to_tab('Compliance')
+          end
+
+          private
+
+          def go_to_tab(name)
+            within_element(:security_configuration_container) do
+              find('.nav-item', text: name).click
+            end
+          end
         end
       end
     end
diff --git a/qa/qa/specs/features/ee/browser_ui/13_secure/enable_scanning_from_configuration_spec.rb b/qa/qa/specs/features/ee/browser_ui/13_secure/enable_scanning_from_configuration_spec.rb
index 9df374795e15f..467ee57e87d22 100644
--- a/qa/qa/specs/features/ee/browser_ui/13_secure/enable_scanning_from_configuration_spec.rb
+++ b/qa/qa/specs/features/ee/browser_ui/13_secure/enable_scanning_from_configuration_spec.rb
@@ -173,6 +173,53 @@ def sast_config_expects(current_page, sast_string_fields, sast_int_fields)
           end
         end
       end
+
+      describe 'license compliance shows status in configuration' do
+        it(
+          'shows correct status in configuration',
+          testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/375460'
+        ) do
+          Page::Project::Menu.perform(&:click_on_security_configuration_link)
+          Page::Project::Secure::ConfigurationForm.perform do |config_form|
+            config_form.go_to_compliance_tab
+
+            expect(config_form).to have_license_compliance_status('Not enabled')
+            expect(config_form).to have_no_license_compliance_status('Enabled')
+          end
+
+          # Push fixture to generate Secure reports
+          Resource::Repository::Commit.fabricate_via_api! do |commit|
+            commit.project = project
+
+            commit.add_files([{ file_path: '.gitlab-ci.yml',
+                                content: File.read(
+                                  Pathname
+                                    .new(__dir__)
+                                    .join('../../../../../ee/fixtures/secure_license_files/.gitlab-ci.yml')) },
+                              { file_path: 'gl-license-scanning-report.json',
+                                content: File.read(
+                                  Pathname
+                                    .new(__dir__)
+                                    .join('../../../../../ee/fixtures/secure_premade_reports/gl-license-scanning-report.json')) }])
+            commit.commit_message = 'Add license scanning to project'
+          end
+          Flow::Login.sign_in_unless_signed_in
+          project.visit!
+          Flow::Pipeline.visit_latest_pipeline
+
+          Page::Project::Pipeline::Show.perform do |pipeline|
+            expect(pipeline).to have_job('license_scanning')
+          end
+
+          Page::Project::Menu.perform(&:click_on_security_configuration_link)
+          Page::Project::Secure::ConfigurationForm.perform do |config_form|
+            config_form.go_to_compliance_tab
+
+            expect(config_form).to have_no_license_compliance_status('Not enabled')
+            expect(config_form).to have_license_compliance_status('Enabled')
+          end
+        end
+      end
     end
   end
 end
-- 
GitLab