From 80dacf519c6c6cb8c7c2f9798104f9e83514a10f Mon Sep 17 00:00:00 2001
From: Artur Fedorov <afedorov@gitlab.com>
Date: Thu, 6 Mar 2025 11:49:43 +0100
Subject: [PATCH] Add check for nullability for compliance framework

Changelog: fixed
EE: true
---
 .../scope/compliance_framework_dropdown.vue   |  8 ++++----
 .../compliance_framework_dropdown_spec.js     | 19 +++++++++++++++++++
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scope/compliance_framework_dropdown.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scope/compliance_framework_dropdown.vue
index c9f87005cb48c..f232928f537d2 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scope/compliance_framework_dropdown.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scope/compliance_framework_dropdown.vue
@@ -43,13 +43,13 @@ export default {
         };
       },
       update(data) {
-        return this.getUniqueFrameworks(data.namespace?.complianceFrameworks.nodes);
+        return this.getUniqueFrameworks(data.namespace?.complianceFrameworks?.nodes);
       },
       result({ data }) {
         this.pageInfo = data?.namespace?.complianceFrameworks?.pageInfo || {};
 
         if (this.selectedButNotLoadedComplianceIds.length > 0) {
-          this.fetchComplianceFramoworksByIds();
+          this.fetchComplianceFrameworksByIds();
         }
       },
       error() {
@@ -179,7 +179,7 @@ export default {
     this.debouncedSearch.cancel();
   },
   methods: {
-    async fetchComplianceFramoworksByIds() {
+    async fetchComplianceFrameworksByIds() {
       try {
         const { data } = await this.$apollo.query({
           query: getComplianceFrameworkQuery,
@@ -190,7 +190,7 @@ export default {
         });
 
         this.complianceFrameworks = this.getUniqueFrameworks(
-          data?.namespace?.complianceFrameworks.nodes,
+          data?.namespace?.complianceFrameworks?.nodes,
         );
       } catch {
         this.emitError();
diff --git a/ee/spec/frontend/security_orchestration/components/policy_editor/scope/compliance_framework_dropdown_spec.js b/ee/spec/frontend/security_orchestration/components/policy_editor/scope/compliance_framework_dropdown_spec.js
index 6dbcfd18328d3..fee87d2529193 100644
--- a/ee/spec/frontend/security_orchestration/components/policy_editor/scope/compliance_framework_dropdown_spec.js
+++ b/ee/spec/frontend/security_orchestration/components/policy_editor/scope/compliance_framework_dropdown_spec.js
@@ -360,6 +360,25 @@ describe('ComplianceFrameworkDropdown', () => {
     });
   });
 
+  describe('when query response has no frameworks', () => {
+    it('emits error when query does not return frameworks', async () => {
+      createComponent({
+        handlers: {
+          complianceFrameworks: jest.fn().mockResolvedValue({
+            data: {
+              namespace: {
+                id: 1,
+                name: 'name',
+              },
+            },
+          }),
+        },
+      });
+      await waitForPromises();
+      expect(wrapper.emitted('framework-query-error')).toHaveLength(1);
+    });
+  });
+
   describe('error state', () => {
     it.each`
       showError | variant      | category       | groupErrorAttribute
-- 
GitLab