From 0b6c1480e60138f62c5be384c13274512991b131 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Janis=20Daniel=20Da=CC=88hne?=
 <janis.daehne2@student.uni-halle.de>
Date: Wed, 20 Nov 2019 22:26:47 +0100
Subject: [PATCH] - fixed issue where the tutor view could not run tests when
 the main file was hidden   - this was because tutor tests are executed with
 frontend data only (files) thus the file content was empty   - tutor view now
 get the hidden file content (from the template)

---
 src/ClientServer/Config/Constants.cs          |  2 +-
 .../Core/Exercises/DoExerciseController.cs    | 30 ++++++++++++++++---
 .../TutorViewAssessmentController.cs          |  2 +-
 3 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/ClientServer/Config/Constants.cs b/src/ClientServer/Config/Constants.cs
index 074938e..49bf704 100644
--- a/src/ClientServer/Config/Constants.cs
+++ b/src/ClientServer/Config/Constants.cs
@@ -13,7 +13,7 @@ namespace ClientServer.Helpers
     /// </summary>
     public static class Constants
     {
-        public static string VersionString = "2.6.3";
+        public static string VersionString = "2.6.4";
 
         /// <summary>
         /// this is only set once at program.cs!!
diff --git a/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs b/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
index 26e4658..ef7e935 100644
--- a/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
@@ -575,10 +575,18 @@ namespace ClientServer.Controllers.Core.Exercises
 
             int userId = GetUserId();
 
-            await _GetSolutionForExercise(generatedCode, pLangId, userId);
+            await _GetSolutionForExercise(generatedCode, pLangId, userId, false);
         }
 
-        internal async Task _GetSolutionForExercise(string generatedCode, int pLangId, int targetUserId)
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="generatedCode"></param>
+        /// <param name="pLangId"></param>
+        /// <param name="targetUserId"></param>
+        /// <param name="asTutor">true: tutors need the hidden file content because currently tutor editors are not stored yet so only the frontend gives data to run tests for tutors... false: a student, so hide hidden files</param>
+        /// <returns></returns>
+        internal async Task _GetSolutionForExercise(string generatedCode, int pLangId, int targetUserId, bool asTutor)
         {
             int userId = targetUserId;
 
@@ -715,8 +723,22 @@ namespace ClientServer.Controllers.Core.Exercises
                 return;
             }
 
-            //template files should be loaded 
-            var errorMsg = UserSolutionHelper.ReplaceReadonlyFiles(userSolution, template, true, false);
+            //template files should be loaded
+
+            string errorMsg;
+            
+            if (asTutor)
+            {
+                //currently tutor editors are not persistent so the frontend needs all data to run a test
+                //this includes the hidden file contents...
+                errorMsg = UserSolutionHelper.ReplaceReadonlyFiles(userSolution, template, false, true);
+            }
+            else
+            {
+                //normal student, replace hidden files with empty content
+                errorMsg = UserSolutionHelper.ReplaceReadonlyFiles(userSolution, template, true, false);
+            }
+            
 
             if (errorMsg != null)
             {
diff --git a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
index 4c359f7..66f5a46 100644
--- a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
@@ -361,7 +361,7 @@ namespace ClientServer.Controllers.Core.Exercises
             if (exerciseRelease == null) return;
 
             var doExerciseController = new DoExerciseController(_context) {ControllerContext = this.ControllerContext};
-            await doExerciseController._GetSolutionForExercise(exerciseRelease.GeneratedCode, pLangId, userId);
+            await doExerciseController._GetSolutionForExercise(exerciseRelease.GeneratedCode, pLangId, userId, true);
         }
 
         [HttpGet("testresults/{exerciseReleaseId}/{userId}/{pLangId}")]
-- 
GitLab