From e813b7e09a54a37e99cf4fc42f13ff996fdfe5ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me>
Date: Fri, 11 Aug 2023 23:12:31 +0200
Subject: [PATCH] ExerciceHelper => Add display execution results

---
 helpers/Dojo/ClientsSharedExerciceHelper.ts | 32 +++++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 helpers/Dojo/ClientsSharedExerciceHelper.ts

diff --git a/helpers/Dojo/ClientsSharedExerciceHelper.ts b/helpers/Dojo/ClientsSharedExerciceHelper.ts
new file mode 100644
index 0000000..5437cc8
--- /dev/null
+++ b/helpers/Dojo/ClientsSharedExerciceHelper.ts
@@ -0,0 +1,32 @@
+import ExerciceResultsFile from '../../../shared/types/Dojo/ExerciceResultsFile';
+import chalk               from 'chalk';
+import boxen               from 'boxen';
+import Icon                from '../../types/Icon';
+
+
+class ClientsSharedExerciceHelper {
+    displayExecutionResults(exerciceResults: ExerciceResultsFile, containerExitCode: number, Style: { INFO: chalk.Chalk, SUCCESS: chalk.Chalk, FAILURE: chalk.Chalk }, additionalText: string = '') {
+        const finalLogGlobalResult = `${ Style.INFO('Global result') } : ${ exerciceResults.success ? Style.SUCCESS(`${ Icon.SUCCESS } Success`) : Style.FAILURE(`${ Icon.FAILURE } Failure`) }`;
+
+        const finalLogExecutionExitCode = `${ Style.INFO('Execution exit code') } : ${ (containerExitCode == 0 ? Style.SUCCESS : Style.FAILURE)(containerExitCode) }`;
+
+        const finalLogResultNumbers = exerciceResults.successfulTests || exerciceResults.failedTests ? `\n\n${ Style.SUCCESS('Tests passed') } : ${ exerciceResults.successfulTests ?? '--' }\n${ Style.FAILURE('Tests failed') } : ${ exerciceResults.failedTests ?? '--' }` : '';
+
+        const finalLogSuccessResultDetails = (exerciceResults.successfulTestsList ?? []).map(testName => `- ${ Icon.SUCCESS } ${ testName }`).join('\n');
+        const finalLogFailedResultDetails = (exerciceResults.failedTestsList ?? []).map(testName => `- ${ Icon.FAILURE } ${ testName }`).join('\n');
+        const finalLogResultDetails = exerciceResults.successfulTestsList || exerciceResults.failedTestsList ? `\n\n${ Style.INFO('Tests') } :${ finalLogSuccessResultDetails != '' ? '\n' + finalLogSuccessResultDetails : '' }${ finalLogFailedResultDetails != '' ? '\n' + finalLogFailedResultDetails : '' }` : '';
+
+        console.log(boxen(`${ finalLogGlobalResult }\n\n${ finalLogExecutionExitCode }${ finalLogResultNumbers }${ finalLogResultDetails }${ additionalText }`, {
+            title         : 'Results',
+            titleAlignment: 'center',
+            borderColor   : 'yellow',
+            borderStyle   : 'bold',
+            margin        : 1,
+            padding       : 1,
+            textAlignment : 'left'
+        }));
+    }
+}
+
+
+export default new ClientsSharedExerciceHelper();
\ No newline at end of file
-- 
GitLab