public string Post([FromBody] CourseDTO courseDTO)
        {
            ValidatorResult validatorResult = CourseValidator.IsValidCourse(courseDTO);

            if (!validatorResult.IsValid)
            {
                HttpContext.Response.StatusCode = 422;
                return(JsonConvert.SerializeObject(validatorResult.ValidationMessage));
            }

            Course course = new Course()
            {
                Name        = courseDTO.Name,
                Description = courseDTO.Description,
                Length      = courseDTO.Length,
                StartDate   = courseDTO.StartDate,
                EndDate     = courseDTO.EndDate
            };

            //Add to DB
            try
            {
                northwindContext.Add(course);
                northwindContext.SaveChanges();
                HttpContext.Response.StatusCode = 200;
                return(JsonConvert.SerializeObject("The course is successfully saved."));
            }
            catch (Exception e)
            {
                HttpContext.Response.StatusCode = 520;
                return(JsonConvert.SerializeObject(e.Message));
            }
        }
        public void DefaultValidation_CourseIsNull_ShouldThrowException()
        {
            ICourseValidator courseValidator = new CourseValidator();
            Action           action          = () => courseValidator.DefaultValidation(null as Course);

            action.Should().Throw <NullReferenceException>().WithMessage("Course can not be null");
        }
Ejemplo n.º 3
0
        public override void DoExecute()
        {
            var ulearnDir = new DirectoryInfo($"{Dir}/{Config.ULearnCourseId}");

            Console.Write("Loading Ulearn course from {0} ... ", ulearnDir.Name);
            var sw     = Stopwatch.StartNew();
            var course = new CourseLoader().Load(ulearnDir);

            Console.WriteLine(sw.ElapsedMilliseconds + " ms");
            var slides = course.GetSlides(true);

            if (SlideId != null)
            {
                slides = slides.Where(s => s.Id == Guid.Parse(SlideId)).ToList();
                Console.WriteLine("Only slide " + SlideId);
            }

            var validator = new CourseValidator(slides);

            validator.InfoMessage += m => Write(ConsoleColor.Gray, m);
            var errors = new List <string>();

            validator.Error += m =>
            {
                Write(ConsoleColor.Red, m);
                errors.Add(m);
            };
            validator.Warning += m =>
            {
                Write(ConsoleColor.DarkYellow, m);
                errors.Add(m);
            };
            validator.ValidateSpelling(course);
            validator.ValidateExercises();
            validator.ValidateVideos();
            validator.ValidateFlashcardSlides();
            validator.ValidateSlidesXml();
            if (errors.Any())
            {
                Console.WriteLine("Done! There are errors:");
                foreach (var error in errors)
                {
                    Write(ConsoleColor.Red, error, true);
                }

                File.WriteAllText(course.Id + "-validation-report.html", GenerateHtmlReport(course, errors));
            }
            else
            {
                Console.WriteLine("OK! No errors found");
            }

            Console.WriteLine("Press any key...");
            Console.WriteLine("Exit code " + Environment.ExitCode);
            Console.ReadLine();
            Environment.Exit(Environment.ExitCode);
        }
Ejemplo n.º 4
0
        public void ValidateAsync_CourseIsNull_ThrowArgumentNullException()
        {
            //	Arrange
            Course course    = null;
            var    validator = new CourseValidator <Course>();

            //	Act
            validator.ValidateAsync(course);
        }
        public void DefaultValidation_CourseNameIsEmpty_ShouldThrowException()
        {
            ICourseValidator courseValidator = new CourseValidator();
            Action           action          = () => courseValidator.DefaultValidation(new Course()
            {
            });

            action.Should().Throw <ArgumentException>().WithMessage("Course Name can not be empty");
        }
Ejemplo n.º 6
0
        public static CourseValidator BuildValidator(ExerciseSlide slide, StringBuilder valOut)
        {
            var v = new CourseValidator(new List <Slide> {
                slide
            });

            v.Warning += msg => { valOut.Append(msg); };
            v.Error   += msg => { valOut.Append(msg); };
            return(v);
        }
Ejemplo n.º 7
0
        public void Validate()
        {
            var validator        = new CourseValidator();
            var validationResult = validator.Validate(this);

            if (!validationResult.IsValid)
            {
                throw new ValidationException(validationResult.Errors.Select(i => i.ErrorCode));
            }
        }
Ejemplo n.º 8
0
 public static Course mapModel(Course oldCourse, Course newCourse)
 {
     if (!CourseValidator.validateCourse(newCourse))
     {
         return(null);
     }
     oldCourse.IDCourse    = newCourse.IDCourse;
     oldCourse.Name        = newCourse.Name;
     oldCourse.Description = newCourse.Description;
     oldCourse.Price       = newCourse.Price;
     oldCourse.IDCategory  = newCourse.IDCategory;
     oldCourse.IDCreator   = newCourse.IDCreator;
     return(oldCourse);
 }
Ejemplo n.º 9
0
        public async Task ValidateAsync_CourseIsCorrect_ShouldReturnIdentityResultSuccess()
        {
            //	Arrange
            Course course = new Course()
            {
                CourseName = "lnnlmll", StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(+1)
            };
            var validator = new CourseValidator <Course>();

            //	Act
            var result = await validator.ValidateAsync(course);

            //	Assert
            Assert.IsTrue(result.Succeeded);
        }
Ejemplo n.º 10
0
        public async Task ValidateAsync_StartDateIsLaterThanEndDate_ShouldReturnIdentityResultFails()
        {
            //	Arrange
            Course course = new Course()
            {
                CourseName = "lnnlmll", StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(-1)
            };
            var validator = new CourseValidator <Course>();

            //	Act
            var result = await validator.ValidateAsync(course);

            //	Assert
            Assert.IsFalse(result.Succeeded);
        }
Ejemplo n.º 11
0
        public async Task ValidateAsync_CourseNameIsLongerThanAllowed_ShouldReturnIdentityResultFails()
        {
            //	Arrange
            Course course = new Course()
            {
                CourseName = new string('a', 400), StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(1)
            };
            var validator = new CourseValidator <Course>();

            //	Act
            var result = await validator.ValidateAsync(course);

            //	Assert
            Assert.IsFalse(result.Succeeded);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Save all changes of current course to folder that represents is
        /// </summary>
        public static bool Save()
        {
            FFDebug.EnterMethod(Cattegory.Course, State.ToString());
            State |= CourseStates.Saving;

#if CHECKERS
            if (__Manifest == null)
            {
                throw new FireFlyException("Course is not assigned");
            }
            if (__Manifest.organizations.Organizations.Count == 0)
            {
                throw new FireFlyException("No organization assigned");
            }
#endif
            if (CourseSaving != null)
            {
                CourseSaving();
            }
            HtmlPageBase.StorePages();

            State &= ~CourseStates.Saving;


            var cv = new CourseValidator();
            if (!cv.Validate())
            {
                ErrorDialog.ShowError("THIS COURSE IS INVALID!!! It cannot be played. Errors:" + Environment.NewLine + cv.GetErrorMessages());
                State &= ~CourseStates.Modified;
                return(false);
            }

            using (var f = new FileStream(MapPath(MANIFEST_FILE_NAME), FileMode.Create))
            {
                ManifestType.Serializer.Serialize(f, __Manifest, ManifestNamespaces.SerializerNamespaces);
            }
            Answers.SaveToFile(MapPath(ANSWERS_FILE_NAME));
            State &= ~CourseStates.Modified;

            if (CourseSaved != null)
            {
                CourseSaved();
            }

            FFDebug.LeaveMethod(Cattegory.Course, MethodBase.GetCurrentMethod());

            return(true);
        }
Ejemplo n.º 13
0
        public override void DoExecute()
        {
            var ulearnDir = new DirectoryInfo($"{Dir}/{Config.ULearnCourseId}");

            Console.Write("Loading Ulearn course from {0} ... ", ulearnDir.Name);
            var sw     = Stopwatch.StartNew();
            var course = new CourseLoader().LoadCourse(ulearnDir);

            Console.WriteLine(sw.ElapsedMilliseconds + " ms");
            var slides = course.Slides;

            if (SlideId != null)
            {
                slides = course.Slides.Where(s => s.Id == Guid.Parse(SlideId)).ToList();
                Console.WriteLine("Only slide " + SlideId);
            }

            var validator = new CourseValidator(slides, new SandboxRunnerSettings());

            validator.InfoMessage += m => Write(ConsoleColor.Gray, m);
            var errors = new List <string>();

            validator.Error += m => {
                Write(ConsoleColor.Red, m);
                errors.Add(m);
            };
            validator.ValidateExercises();
            validator.ValidateVideos();
            if (errors.Any())
            {
                Console.WriteLine("Done! There are errors:");
                foreach (var error in errors)
                {
                    Write(ConsoleColor.Red, error);
                }
            }
            else
            {
                Console.WriteLine("OK! No errors found");
            }
            Console.WriteLine("Press any key...");
            Console.ReadLine();
        }
        /// <summary>
        ///     Course creating
        /// </summary>
        /// <param name="courseDTO">Course model</param>
        /// <returns>
        ///    Returns the result message of the request.
        /// </returns>
        public HttpResponseMessage Post([FromBody] CourseDTO courseDTO)
        {
            var             response        = new HttpResponseMessage(HttpStatusCode.OK);
            ValidatorResult validatorResult = CourseValidator.IsValidCourse(courseDTO);

            if (!validatorResult.IsValid)
            {
                response.StatusCode = HttpStatusCode.PreconditionFailed;
                response.Content    = new StringContent(JsonConvert.SerializeObject(validatorResult.ValidationMessage));
                return(response);
            }

            Course course = new Course()
            {
                Name        = courseDTO.Name,
                Description = courseDTO.Description,
                Length      = courseDTO.Length,
                StartDate   = courseDTO.StartDate,
                EndDate     = courseDTO.EndDate
            };

            //Add to DB
            try
            {
                northwindContext.Add(course);
                northwindContext.SaveChanges();
                response.Content = new StringContent(JsonConvert.SerializeObject("The course is successfully saved."));
                return(response);
            }
            catch (Exception e)
            {
                response.StatusCode = HttpStatusCode.InternalServerError;
                response.Content    = new StringContent(JsonConvert.SerializeObject(e.Message));
                return(response);
            }
        }
Ejemplo n.º 15
0
		public override void DoExecute()
		{
			var ulearnDir = new DirectoryInfo(string.Format("{0}/{1}", Dir, Config.ULearnCourseId));
			Console.Write("Loading Ulearn course from {0} ... ", ulearnDir.Name);
			var sw = Stopwatch.StartNew();
			var course = new CourseLoader().LoadCourse(ulearnDir);
			Console.WriteLine(sw.ElapsedMilliseconds + " ms");
			var slides = course.Slides;
			if (SlideId != null)
			{
				slides = course.Slides.Where(s => s.Id == Guid.Parse(SlideId)).ToArray();
				Console.WriteLine("Only slide " + SlideId);
			}
			
			var validator = new CourseValidator(slides, new SandboxRunnerSettings());
			validator.InfoMessage += m => Write(ConsoleColor.Gray, m);
			var errors = new List<string>();
			validator.Error += m => {
				Write(ConsoleColor.Red, m);
				errors.Add(m);
			};
			validator.ValidateExercises();
			validator.ValidateVideos();
			if (errors.Any())
			{
				Console.WriteLine("Done! There are errors:");
				foreach (var error in errors)
				{
					Write(ConsoleColor.Red, error);
				}
			}
			else
				Console.WriteLine("OK! No errors found");
			Console.WriteLine("Press any key...");
			Console.ReadLine();
		}
Ejemplo n.º 16
0
        /// <summary>
        /// Builder CourseModule Class.
        /// </summary>
        public CourseModule() : base("/courses")
        {
            #region Method that returns the index View Course, with the registered courses.
            Get ["/"] = _ => {
                return(View ["index", DocumentSession.Query <Course> ()
                             .Customize(q => q.WaitForNonStaleResultsAsOfLastWrite())
                             .ToList()]);
            };
            #endregion

            #region Method that returns a View Show, displaying the course in the form according to the ID.
            Get ["/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var  course       = DocumentSession.Query <Course> ("CoursesById")
                                    .Customize(q => q.WaitForNonStaleResultsAsOfLastWrite())
                                    .Where(n => n.Id == coursenumber).FirstOrDefault();
                if (course == null)
                {
                    return(new NotFoundResponse());
                }
                return(View ["show", course]);
            };
            #endregion

            #region Method that returns the New View, creating a default course
            Get ["/new"] = x => {
                return(View ["new", Course.DefaultCourse()]);
            };
            #endregion

            #region Method that creates and validates a new course in accordance with the specifications of the class CourseValidator
            Post ["/new"] = x => {
                var course = this.Bind <Course> ();
                var result = new CourseValidator().Validate(course);
                if (!result.IsValid)
                {
                    return(View ["Shared/_errors", result]);
                }
                DocumentSession.Store(course);
                return(Response.AsRedirect(string.Format("/courses/{0}", course.Id)));
            };
            #endregion

            #region Displays data in the form of the Course according to ID
            Get ["/edit/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var  course       = DocumentSession.Query <Course> ("CoursesById")
                                    .Where(n => n.Id == coursenumber).FirstOrDefault();
                if (course == null)
                {
                    return(new NotFoundResponse());
                }
                return(View ["edit", course]);
            };
            #endregion

            #region Method editing the course according to ID
            Post ["/edit/{Id}"] = x => {
                var course = this.Bind <Course> ();
                var result = new CourseValidator().Validate(course, ruleSet: "Update");
                if (!result.IsValid)
                {
                    return(View ["Shared/_errors", result]);
                }
                Guid coursenumber = Guid.Parse(x.Id);
                var  saved        = DocumentSession.Query <Course> ("CoursesById")
                                    .Where(n => n.Id == coursenumber).FirstOrDefault();
                if (saved == null)
                {
                    return(new NotFoundResponse());
                }
                saved.Fill(course);
                return(Response.AsRedirect(string.Format("/courses/{0}", course.Id)));
            };
            #endregion

            #region Method to delete a record according to ID
            Delete ["/delete/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var  course       = DocumentSession.Query <Course> ("CoursesById")
                                    .Where(n => n.Id == coursenumber)
                                    .FirstOrDefault();
                if (course == null)
                {
                    return(new NotFoundResponse());
                }
                DocumentSession.Delete(course);
                var resp = new JsonResponse <Course> (
                    course,
                    new DefaultJsonSerializer()
                    );
                resp.StatusCode = HttpStatusCode.OK;
                return(resp);
            };

            Get ["/delete/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var  course       = DocumentSession.Query <Course> ("CoursesById")
                                    .Where(n => n.Id == coursenumber).FirstOrDefault();
                if (course == null)
                {
                    return(new NotFoundResponse());
                }
                DocumentSession.Delete(course);
                return(Response.AsRedirect("/courses"));
            };
            #endregion

            Get["/select"] = _ =>
            {
                return(View["select", DocumentSession.Query <Course>()
                            .Customize(q => q.WaitForNonStaleResultsAsOfLastWrite())
                            .ToList()]);
            };
        }
Ejemplo n.º 17
0
        public CourseModule()
            : base("/courses")
        {
            Get ["/"] = _ => {
                return View ["index", DocumentSession.Query<Course> ()
                    .Customize(q => q.WaitForNonStaleResultsAsOfLastWrite())
                    .ToList ()];
            };

            Get ["/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var course = DocumentSession.Query<Course> ("CoursesById")
                    .Customize(q => q.WaitForNonStaleResultsAsOfLastWrite())
                    .Where (n => n.Id == coursenumber).FirstOrDefault ();
                if (course == null)
                    return new NotFoundResponse ();
                return View ["show", course];
            };

            Get ["/new"] = x => {
                return View ["new", new Course ()];
            };

            Post ["/new"] = x => {
                var course = this.Bind<Course> ();
                var result = this.Validate (course);
                if (!result.IsValid)
                    return View ["Shared/_errors", result];
                DocumentSession.Store (course);
                //return View ["show", course];
                return Response.AsRedirect(string.Format("/courses/{0}", course.Id));
            };

            Get ["/edit/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var course = DocumentSession.Query<Course> ("CoursesById")
                    .Where (n => n.Id == coursenumber).FirstOrDefault ();
                if (course == null)
                    return new NotFoundResponse ();
                return View ["edit", course];
            };

            Post ["/edit/{Id}"] = x => {
                var course = this.Bind<Course> ();
                var result = new CourseValidator ().Validate (course, ruleSet: "Update");
                if (!result.IsValid)
                    return View ["Shared/_errors", result];
                Guid coursenumber = Guid.Parse(x.Id);
                var saved = DocumentSession.Query<Course> ("CoursesById")
                    .Where (n => n.Id == coursenumber).FirstOrDefault ();
                if (saved == null)
                    return new NotFoundResponse ();
                saved.Fill (course);
                return Response.AsRedirect(string.Format("/courses/{0}", course.Id));
            //                return View ["show", course];
            };

            Delete ["/delete/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var course = DocumentSession.Query<Course> ("CoursesById")
                        .Where (n => n.Id == coursenumber)
                        .FirstOrDefault ();
                if (course == null)
                    return new NotFoundResponse ();
                DocumentSession.Delete (course);
                var resp = new JsonResponse<Course> (
                        course,
                        new DefaultJsonSerializer ()
                );
                resp.StatusCode = HttpStatusCode.OK;
                return resp;

            };

            Get ["/delete/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var course = DocumentSession.Query<Course> ("CoursesById")
                    .Where (n => n.Id == coursenumber).FirstOrDefault ();
                if (course == null)
                    return new NotFoundResponse ();
                DocumentSession.Delete (course);
                return Response.AsRedirect("/courses");
            //                return View ["index", DocumentSession.Query<Course> ().ToList ()];
            };
        }
Ejemplo n.º 18
0
 public void TestCleanup()
 {
     _repositoryMock = null;
     _validator      = null;
 }
Ejemplo n.º 19
0
 public void TestInitialize()
 {
     _repositoryMock = new Mock <IRepository>();
     _validator      = new CourseValidator();
 }
Ejemplo n.º 20
0
        /// <summary>
        /// Builder CourseModule Class.
        /// </summary>
        public CourseModule()
            : base("/courses")
        {
            #region Method that returns the index View Course, with the registered courses.
            Get ["/"] = _ => {
                return View ["index", DocumentSession.Query<Course> ()
                    .Customize(q => q.WaitForNonStaleResultsAsOfLastWrite())
                    .ToList ()];
            };
            #endregion

            #region Method that returns a View Show, displaying the course in the form according to the ID.
            Get ["/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var course = DocumentSession.Query<Course> ("CoursesById")
                    .Customize(q => q.WaitForNonStaleResultsAsOfLastWrite())
                    .Where (n => n.Id == coursenumber).FirstOrDefault ();
                if (course == null)
                    return new NotFoundResponse ();
                return View ["show", course];
            };
            #endregion

            #region Method that returns the New View, creating a default course
            Get ["/new"] = x => {
                return View ["new", Course.DefaultCourse()];
            };
            #endregion

            #region Method that creates and validates a new course in accordance with the specifications of the class CourseValidator
            Post ["/new"] = x => {
                var course = this.Bind<Course> ();
                var result = new CourseValidator().Validate (course);
                if (!result.IsValid)
                    return View ["Shared/_errors", result];
                DocumentSession.Store (course);
                return Response.AsRedirect(string.Format("/courses/{0}", course.Id));
            };
            #endregion

            #region Displays data in the form of the Course according to ID
            Get ["/edit/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var course = DocumentSession.Query<Course> ("CoursesById")
                    .Where (n => n.Id == coursenumber).FirstOrDefault ();
                if (course == null)
                    return new NotFoundResponse ();
                return View ["edit", course];
            };
            #endregion

            #region Method editing the course according to ID
            Post ["/edit/{Id}"] = x => {
                var course = this.Bind<Course> ();
                var result = new CourseValidator ().Validate (course, ruleSet: "Update");
                if (!result.IsValid)
                    return View ["Shared/_errors", result];
                Guid coursenumber = Guid.Parse(x.Id);
                var saved = DocumentSession.Query<Course> ("CoursesById")
                    .Where (n => n.Id == coursenumber).FirstOrDefault ();
                if (saved == null)
                    return new NotFoundResponse ();
                saved.Fill (course);
                return Response.AsRedirect(string.Format("/courses/{0}", course.Id));
            };
            #endregion

            #region Method to delete a record according to ID
            Delete ["/delete/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var course = DocumentSession.Query<Course> ("CoursesById")
                        .Where (n => n.Id == coursenumber)
                        .FirstOrDefault ();
                if (course == null)
                    return new NotFoundResponse ();
                DocumentSession.Delete (course);
                var resp = new JsonResponse<Course> (
                        course,
                        new DefaultJsonSerializer ()
                );
                resp.StatusCode = HttpStatusCode.OK;
                return resp;

            };

            Get ["/delete/{Id}"] = x => {
                Guid coursenumber = Guid.Parse(x.Id);
                var course = DocumentSession.Query<Course> ("CoursesById")
                    .Where (n => n.Id == coursenumber).FirstOrDefault ();
                if (course == null)
                    return new NotFoundResponse ();
                DocumentSession.Delete (course);
                return Response.AsRedirect("/courses");
            };
            #endregion
        }
Ejemplo n.º 21
0
 public CourseTests()
 {
     _validator = new CourseValidator();
 }
 public CourseValidatorTests()
 {
     _courseValidator = new CourseValidator();
 }
        public static async Task Run(
            string input,          // Work around https://github.com/Azure/azure-functions-vs-build-sdk/issues/168
            ILogger log,
            [Inject] IConfigurationRoot configuration,
            [Inject] ICourseCollectionService courseCollectionService,
            [Inject] ICosmosDbHelper cosmosDbHelper,
            [Inject] IBlobStorageHelper blobhelper,
            [Inject] IUkrlpApiService ukrlpApiService
            )
        {
            const string apprenticeshipAppName = "Validate.Course";

            var apprenticeshipValidationFileName = $"{apprenticeshipAppName}-{DateTime.Now.ToString("dd-MM-yy HHmm")}";
            var blobContainer = blobhelper.GetBlobContainer(configuration["BlobStorageSettings:Container"]);
            var validator     = new CourseValidator();

            List <CourseValidationResult> validationEResult = new List <CourseValidationResult>();

            var stopWatch = new Stopwatch();

            stopWatch.Start();

            var resultData = await courseCollectionService.GetAllCoursesAsync();

            foreach (var item in resultData)
            {
                //item.ContactEmail = "testing";
                //item.Url = "testing";
                //item.ContactWebsite = "testing";
                //item.ContactTelephone = "101101abc";
                //item.ApprenticeshipTitle = item.ApprenticeshipTitle + " @";

                var validationResult = validator.Validate(item);

                if (!validationResult.IsValid)
                {
                    foreach (var error in validationResult.Errors)
                    {
                        validationEResult.Add(new CourseValidationResult()
                        {
                            CourseId      = item.CourseId,
                            ProviderUkprn = item.ProviderUKPRN,
                            FieldName     = error.PropertyName,
                            ErrorMessage  = error.ErrorMessage
                        });
                    }
                }
            }

            var resultsObjBytes = GetResultAsByteArray(validationEResult);

            await WriteResultsToBlobStorage(resultsObjBytes);

            stopWatch.Stop();

            byte[] GetResultAsByteArray(IList <CourseValidationResult> message)
            {
                using (var memoryStream = new System.IO.MemoryStream())
                {
                    using (var streamWriter = new System.IO.StreamWriter(memoryStream))
                        using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
                        {
                            csvWriter.WriteRecords <CourseValidationResult>(message);
                        }
                    return(memoryStream.ToArray());
                }
            }

            async Task WriteResultsToBlobStorage(byte[] data)
            {
                await blobhelper.UploadFile(blobContainer, apprenticeshipValidationFileName, data);
            }
        }