public IList <IndividualTest> CollectTestCases(string directory)
        {
            var pytest = EngineFactory.Pytest();

            pytest.Run("--collect-only", "CollectTestTemp.txt", directory);

            var content = File.ReadAllLines(Path.Combine(directory, "CollectTestTemp.txt"));

            File.Delete(Path.Combine(directory, "CollectTestTemp.txt"));

            return(new TestCaseParser().GatherTests(content));
        }
        public bool Preprocessing(SubmissionDto submissionDto, string directory, out EngineWorkingDirectories workingDirectories,
                                  out FeedbackDto feedback)
        {
            workingDirectories = new EngineWorkingDirectories();

            if (!ValidateSubmission(submissionDto, out feedback))
            {
                return(false);
            }

            var handler = Factory.FileHandler();

            workingDirectories.ParentDirectory   = directory;
            workingDirectories.ReferenceTestSuit = Path.Combine(directory, "ReferenceTestSuit");
            workingDirectories.Solution          = Path.Combine(directory, Path.GetFileNameWithoutExtension(submissionDto.SolutionFolderName));
            workingDirectories.StudentTestSuit   = Path.Combine(directory, "StudentTestSuit");

            handler.UnzipByteArray(submissionDto.ReferenceTestSolution, directory,
                                   workingDirectories.ReferenceTestSuit);
            handler.UnzipByteArray(submissionDto.AssignmentSolution, directory,
                                   workingDirectories.Solution);
            handler.UnzipByteArray(submissionDto.TestCaseSolution, directory,
                                   workingDirectories.StudentTestSuit);

            var exitCode = Factory.Pytest().Run(workingDirectories.StudentTestSuit, "$null", workingDirectories.StudentTestSuit);

            if (exitCode != 0)
            {
                feedback.Message = "Student's solution didn't pass their own Test Suite";
                return(false);
            }

            return(true);
        }