From 21b0cb40e3a9535247e5ed171733d4aec73d38e3 Mon Sep 17 00:00:00 2001
From: Joel von der Weid <joel.von-der-weid@hesge.ch>
Date: Wed, 22 May 2024 10:31:32 +0200
Subject: [PATCH] Test sonar qualities before creating assignment

---
 .../subcommands/AssignmentCreateCommand.ts         | 14 ++++++++++++++
 NodeApp/src/managers/DojoBackendManager.ts         |  9 +++++++++
 NodeApp/src/shared                                 |  2 +-
 NodeApp/src/sharedByClients                        |  2 +-
 4 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts
index af5395e..79fd5e4 100644
--- a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts
+++ b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts
@@ -96,6 +96,20 @@ class AssignmentCreateCommand extends CommanderCommand {
 
             languagesSpinner.succeed(`Language "${ options.language }" is supported`);
 
+            if ((sonarGate ?? "") !== "" || sonarProfiles.length > 0) {
+                const qualitiesSpinner: ora.Ora = ora('Checking sonar qualities').start();
+
+                // SonarQube quality gate and profiles
+                const result = await DojoBackendManager.testSonarQualities(sonarGate ?? "", sonarProfiles);
+                if (!result.valid) {
+                    const invalid = (result.badGate == undefined ? result.badProfiles : [result.badGate, ...result.badProfiles]);
+                    qualitiesSpinner.fail(`Invalid quality gate or profiles : ${invalid}`);
+                    return;
+                }
+
+                qualitiesSpinner.succeed(`Quality gate and profiles are valid`);
+            }
+
             if ( options.template ) {
                 templateIdOrNamespace = options.template;
 
diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts
index a346758..46e7c6a 100644
--- a/NodeApp/src/managers/DojoBackendManager.ts
+++ b/NodeApp/src/managers/DojoBackendManager.ts
@@ -254,6 +254,15 @@ class DojoBackendManager {
         const resp = await axios.get<DojoBackendResponse<string[]>>(this.getApiUrl(ApiRoute.LANGUAGES));
         return resp.data.data;
     }
+
+    public async testSonarQualities(gate: string, profiles: string[]) {
+        const resp = await axios.post<DojoBackendResponse<{ valid: boolean, badProfiles: string[], badGate: string | undefined }>>(
+            this.getApiUrl(ApiRoute.SONAR_QUALITIES), {
+                gate: gate,
+                profiles: profiles,
+            });
+        return resp.data.data;
+    }
 }
 
 
diff --git a/NodeApp/src/shared b/NodeApp/src/shared
index 102e79d..4d1e63e 160000
--- a/NodeApp/src/shared
+++ b/NodeApp/src/shared
@@ -1 +1 @@
-Subproject commit 102e79d9b78d79e495f7b82e5e767eb7898248db
+Subproject commit 4d1e63ebbbe7e6fec1de74d79a2919047eea5775
diff --git a/NodeApp/src/sharedByClients b/NodeApp/src/sharedByClients
index 76e13d9..b54af90 160000
--- a/NodeApp/src/sharedByClients
+++ b/NodeApp/src/sharedByClients
@@ -1 +1 @@
-Subproject commit 76e13d9d08d52d31ece9a58645ac113c51132c71
+Subproject commit b54af90977a928488d2346fe95635aef567dfacc
-- 
GitLab