Exemple #1
0
        protected void showTable(Panel pnlName, TrainingProvider trainingProvider)
        {
            var           id         = objcryptoJS.AES_encrypt(trainingProvider.Id.ToString(), AppConstants.secretKey, AppConstants.initVec);
            StringBuilder strContent = new StringBuilder("<tr>");

            strContent.Append("<td width='15%' nowrap><a style='text-decoration: underline;' href='MDE_TPAppView.aspx?tpApps=active&cgi=" + System.Web.HttpUtility.UrlEncode(id) + "' >");
            strContent.Append(trainingProvider.TP_Name);
            strContent.Append("</a></td>");
            strContent.Append("<td width='15%' nowrap>");
            strContent.Append(trainingProvider.TPContactFirstName + " " + trainingProvider.TPContactLastName);
            strContent.Append("</td>");
            strContent.Append("<td width='10%' nowrap>");
            strContent.Append(trainingProvider.TP_Telephone);
            strContent.Append("</td>");
            if (pnlName.ID.ToString() == "pnlMyContApps")
            {
                strContent.Append("<td width='10%' nowrap>");
                strContent.Append(GlobalMethods.AppStatus(Convert.ToInt32(trainingProvider.IsActive)));
                strContent.Append("</td>");
            }
            strContent.Append("<td width='10%'nowrap>");
            strContent.Append(trainingProvider.CreatedDate.ToShortDateString());
            strContent.Append("</td>");
            //***************************************
            strContent.Append("<td width='5%' nowrap>");
            strContent.Append("<a class='btn btn-xs btn-success' href='MDE_TPAppView.aspx?tpApps=active&cgi=" + System.Web.HttpUtility.UrlEncode(id) + "'>View</a>");
            strContent.Append("</td>");

            pnlName.Controls.Add(new LiteralControl(strContent.ToString()));
        }
Exemple #2
0
        public async Task <OrchestratorResponse <PostSelectTrainingProviderResult> > PostSelectTrainingProviderAsync(SelectTrainingProviderEditModel m, VacancyUser user)
        {
            var vacancy = await Utility.GetAuthorisedVacancyForEditAsync(_client, _vacancyClient, m, RouteNames.TrainingProvider_Select_Post);

            if (m.IsTrainingProviderSelected == false)
            {
                if (vacancy.TrainingProvider != null)
                {
                    vacancy.TrainingProvider = null;
                    await _vacancyClient.UpdateDraftVacancyAsync(vacancy, user);
                }

                return(new OrchestratorResponse <PostSelectTrainingProviderResult>(new PostSelectTrainingProviderResult()));
            }

            var providerSummary = await GetProviderFromModelAsync(m);

            TrainingProvider provider = null;

            if (providerSummary != null)
            {
                provider = await _trainingProviderService.GetProviderAsync(providerSummary.Ukprn);
            }

            vacancy.TrainingProvider = provider;

            return(await ValidateAndExecute(
                       vacancy,
                       v => _vacancyClient.Validate(v, ValidationRules),
                       v => Task.FromResult(new PostSelectTrainingProviderResult
            {
                FoundTrainingProviderUkprn = v.TrainingProvider?.Ukprn
            })
                       ));
        }
        public async Task Then_If_Provider_Owned_And_Employer_Has_To_Review_Then_Review_Event_Is_Submitted(
            Vacancy vacancy,
            CreateVacancyCommand command,
            TrainingProvider provider,
            [Frozen] Mock <IEmployerVacancyClient> employerVacancyClient,
            [Frozen] Mock <IRecruitVacancyClient> recruitVacancyClient,
            [Frozen] Mock <IMessaging> messaging,
            [Frozen] Mock <ITrainingProviderService> trainingProviderService,
            [Frozen] Mock <IProviderRelationshipsService> providerRelationshipsService,
            CreateVacancyCommandHandler handler)
        {
            command.ValidateOnly = false;
            providerRelationshipsService.Setup(x => x.HasProviderGotEmployersPermissionAsync(
                                                   provider.Ukprn.Value, command.Vacancy.EmployerAccountId,
                                                   command.Vacancy.AccountLegalEntityPublicHashedId, OperationType.RecruitmentRequiresReview))
            .ReturnsAsync(true);
            command.VacancyUserDetails.Email = string.Empty;
            trainingProviderService.Setup(x => x.GetProviderAsync(command.VacancyUserDetails.Ukprn.Value))
            .ReturnsAsync(provider);
            recruitVacancyClient.Setup(x => x.Validate(It.IsAny <Vacancy>(), VacancyRuleSet.All))
            .Returns(new EntityValidationResult());
            recruitVacancyClient.Setup(x => x.GetVacancyAsync(command.Vacancy.Id)).ReturnsAsync(vacancy);

            await handler.Handle(command, CancellationToken.None);

            messaging.Verify(x => x.PublishEvent(It.Is <VacancyReviewedEvent>(c =>
                                                                              c.VacancyId.Equals(command.Vacancy.Id) &&
                                                                              c.VacancyReference.Equals(vacancy.VacancyReference) &&
                                                                              c.Ukprn.Equals(provider.Ukprn)
                                                                              )));
        }
Exemple #4
0
        // DELETE: api/Topic/5
        public HttpResponseMessage Delete(string id)
        {
            var provider = new TrainingProvider(DbInfo);
            var deleted  = provider.DeleteTraining(id);

            return(Request.CreateResponse(HttpStatusCode.OK, deleted));
        }
        /// <exception cref="ArgumentNullException"><paramref name="trainingProvider"/> is <see langword="null" />.</exception>
        public async Task <CallResult> ReassignCourseSpecializationsAsync(TrainingProvider trainingProvider, bool useArchiveData = false)
        {
            if (trainingProvider == null)
            {
                throw new ArgumentNullException("trainingProvider");
            }

            if (!await _semaphore.WaitAsync(WaitTimeout))
            {
                return(CallResult.Failed(Resources.UpdateService_CannotUpdateBecauseDatabaseIsInUpdateState));
            }

            try
            {
                var pathsContainer = new ServerMediaPathsContainer(_serverImagesPath, new[] { trainingProvider });

                using (var catalog = _activatorProxy.CreateInstance <ITrainingCatalog>(trainingProvider.AssemblyType))
                {
                    // ReSharper disable once ExceptionNotDocumented
                    catalog.Initialize(trainingProvider.Name, trainingProvider.Id, trainingProvider.SiteUrl,
                                       trainingProvider.SourceUrl, trainingProvider.SourceLocation, pathsContainer, _archiveDirectoryPath);
                    using (var context = _contextFactory.CreateDbContext())
                    {
                        await catalog.ReassignCourseSpecializationsAsync(context, useArchiveData);
                    }
                }
            }
            finally
            {
                _semaphore.Release();
            }

            return(CallResult.Success);
        }
        public async Task Then_If_The_Command_Is_Valid_And_The_RegisteredName_Is_Used_Then_Employer_Profile_Updated(
            Vacancy vacancy,
            CreateVacancyCommand command,
            TrainingProvider provider,
            EmployerProfile employerProfile,
            [Frozen] Mock <IEmployerVacancyClient> employerVacancyClient,
            [Frozen] Mock <IRecruitVacancyClient> recruitVacancyClient,
            [Frozen] Mock <IMessaging> messaging,
            [Frozen] Mock <ITrainingProviderService> trainingProviderService,
            CreateVacancyCommandHandler handler)
        {
            command.ValidateOnly = false;
            command.Vacancy.EmployerNameOption = EmployerNameOption.TradingName;
            trainingProviderService.Setup(x => x.GetProviderAsync(command.VacancyUserDetails.Ukprn.Value))
            .ReturnsAsync(provider);
            recruitVacancyClient.Setup(x => x.Validate(It.IsAny <Vacancy>(), VacancyRuleSet.All))
            .Returns(new EntityValidationResult());
            recruitVacancyClient.Setup(x => x.GetVacancyAsync(command.Vacancy.Id)).ReturnsAsync(vacancy);
            recruitVacancyClient
            .Setup(x => x.GetEmployerProfileAsync(command.Vacancy.EmployerAccountId,
                                                  command.Vacancy.AccountLegalEntityPublicHashedId)).ReturnsAsync(employerProfile);

            await handler.Handle(command, CancellationToken.None);

            recruitVacancyClient.Verify(x => x.UpdateEmployerProfileAsync(It.Is <EmployerProfile>(c =>
                                                                                                  c.TradingName.Equals(command.Vacancy.EmployerName)
                                                                                                  ), It.IsAny <VacancyUser>()), Times.Once);
        }
        public async Task And_ValidateOnly_True_And_Submitted_By_Employer_Then_Returns_After_Validation(
            CreateVacancyCommand command,
            TrainingProvider provider,
            Vacancy vacancy,
            DateTime timeNow,
            [Frozen] Mock <ITimeProvider> timeProvider,
            [Frozen] Mock <IProviderVacancyClient> providerVacancyClient,
            [Frozen] Mock <IEmployerVacancyClient> employerVacancyClient,
            [Frozen] Mock <IRecruitVacancyClient> recruitVacancyClient,
            [Frozen] Mock <IVacancyRepository> vacancyRepository,
            [Frozen] Mock <ITrainingProviderService> trainingProviderService,
            [Frozen] Mock <IProviderRelationshipsService> providerRelationshipsService,
            CreateVacancyCommandHandler handler)
        {
            command.ValidateOnly = true;
            vacancy.Id           = command.Vacancy.Id;
            vacancy.ProgrammeId  = command.Vacancy.ProgrammeId;
            trainingProviderService.Setup(x => x.GetProviderAsync(command.VacancyUserDetails.Ukprn.Value))
            .ReturnsAsync(provider);
            recruitVacancyClient.Setup(x => x.Validate(It.IsAny <Vacancy>(), VacancyRuleSet.All))
            .Returns(new EntityValidationResult());

            var actual = await handler.Handle(command, CancellationToken.None);

            actual.ResultCode.Should().Be(ResponseCode.Created);
            actual.Data.Should().Be(1000000001);
            employerVacancyClient.Verify(x => x.CreateEmployerApiVacancy(
                                             It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <VacancyUser>(), It.IsAny <TrainingProvider>(), It.IsAny <string>()),
                                         Times.Never);
            vacancyRepository.Verify(x => x.UpdateAsync(It.IsAny <Vacancy>()),
                                     Times.Never);
        }
Exemple #8
0
        protected void showTable(Panel pnlName, TrainingProvider tp)
        {
            var           id         = objcryptoJS.AES_encrypt(tp.Id.ToString(), AppConstants.secretKey, AppConstants.initVec);
            StringBuilder strContent = new StringBuilder("<tr>");

            strContent.Append("<td width='15%' nowrap><a style='text-decoration: underline;' href='MDE_TPAppView.aspx?TPApps=active&cgi=" + System.Web.HttpUtility.UrlEncode(id) + "' >");
            //strContent.Append(tp.InspectorFirstName + " " + tp.InspectorLastName);
            strContent.Append("</a></td>");
            strContent.Append("<td width='15%' nowrap>");
            //strContent.Append(tp.ACRDCat.CatTitle);
            strContent.Append("</td>");
            strContent.Append("<td width='10%'nowrap>");
            //strContent.Append(tp.InspectorContactFirstName + " " + tp.InspectorContactLastName);
            strContent.Append("</td>");
            strContent.Append("<td width='10%' nowrap>");
            //strContent.Append(tp.InspectorContractor_Phone);
            strContent.Append("</td>");
            strContent.Append("<td width='10%'nowrap>");
            strContent.Append(tp.CreatedDate.ToShortDateString());
            strContent.Append("</td>");
            //***************************************
            strContent.Append("<td width='5%' nowrap>");
            strContent.Append("<a class='btn btn-xs btn-success' href='MDE_TPAppView.aspx?TPApps=active&cgi=" + System.Web.HttpUtility.UrlEncode(id) + "'>View</a>");
            strContent.Append("</td>");

            pnlName.Controls.Add(new LiteralControl(strContent.ToString()));
        }
 private ConsentForProviderBlockingViewModel ConvertToConsentViewModel(TrainingProvider provider, int permissionCount)
 {
     return(new ConsentForProviderBlockingViewModel
     {
         Name = provider.Name,
         PermissionCount = permissionCount
     });
 }
Exemple #10
0
        public HttpResponseMessage Get(string id)
        {
            var certification = new TrainingProvider(DbInfo).GetTraining(int.Parse(id));
            var exists        = certification != null;
            var status        = exists ? HttpStatusCode.OK : HttpStatusCode.NotFound;

            return(Request.CreateResponse(status, certification));
        }
 private ConfirmTrainingProviderUnblockingEditModel ConvertToConfirmViewModel(TrainingProvider provider)
 {
     return(new ConfirmTrainingProviderUnblockingEditModel
     {
         Ukprn = provider.Ukprn.GetValueOrDefault(),
         ProviderName = provider.Name
     });
 }
 private ConfirmTrainingProviderBlockingViewModel ConvertToConfirmViewModel(TrainingProvider provider, int permissionCount)
 {
     return(new ConfirmTrainingProviderBlockingViewModel
     {
         Ukprn = provider.Ukprn.GetValueOrDefault(),
         Name = provider.Name,
         Address = provider.Address.ToAddressString(),
         PermissionCount = permissionCount
     });
 }
        internal async Task UpdateTrainingCatalogAsync(UpdateDbContext context, TrainingProvider trainingProvider,
                                                       string description, ServerMediaPathsContainer pathsContainer, bool useArchiveData = false, bool logUpdateToDb = true)
        {
            var updateEvent = new UpdateEvent(trainingProvider.Id, description, _dateTimeProxy.UtcNow);

            context.UpdateEvents.Add(updateEvent);

            await context.SaveChangesAsync();

            using (var catalog = _activatorProxy.CreateInstance <ITrainingCatalog>(trainingProvider.AssemblyType))
            {
                catalog.Initialize(trainingProvider.Name, trainingProvider.Id, trainingProvider.SiteUrl,
                                   trainingProvider.SourceUrl, trainingProvider.SourceLocation, pathsContainer, _archiveDirectoryPath);
                try
                {
                    await catalog.UpdateAsync(updateEvent, context, useArchiveData, logUpdateToDb);

                    updateEvent.EndedOn = _dateTimeProxy.UtcNow;
                    if (context.AuthorsResolves.Local.Any())
                    {
                        updateEvent.UpdateResult = UpdateResult.NeedManualResolve;
                    }
                    else
                    {
                        updateEvent.UpdateResult = UpdateResult.Success;
                    }

                    await context.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    updateEvent.EndedOn      = _dateTimeProxy.UtcNow;
                    updateEvent.UpdateResult = UpdateResult.Error;

                    var aggregateException = ex as AggregateException;
                    var errorData          = aggregateException != null
                  ? aggregateException.Flatten().ToString()
                  : ex.ToString();

                    updateEvent.ErrorData = errorData;

                    updateEvent.AuthorsUpdates    = null;
                    updateEvent.CategoriesUpdates = null;
                    updateEvent.CoursesUpdates    = null;

                    context.SetStateToDetached(updateEvent);

                    using (var ctx = _contextFactory.CreateDbContext())
                    {
                        ctx.SetStateToModified(updateEvent);
                        ctx.SaveChanges();
                    }
                }
            }
        }
        public async Task Then_If_The_Command_Is_Valid_The_Vacancy_Is_Created_And_Submitted_For_Provider(
            CreateVacancyCommand command,
            TrainingProvider provider,
            Vacancy vacancy,
            DateTime timeNow,
            [Frozen] Mock <ITimeProvider> timeProvider,
            [Frozen] Mock <IProviderVacancyClient> providerVacancyClient,
            [Frozen] Mock <IRecruitVacancyClient> recruitVacancyClient,
            [Frozen] Mock <IVacancyRepository> vacancyRepository,
            [Frozen] Mock <ITrainingProviderService> trainingProviderService,
            [Frozen] Mock <IProviderRelationshipsService> providerRelationshipsService,
            CreateVacancyCommandHandler handler)
        {
            command.ValidateOnly             = false;
            command.VacancyUserDetails.Email = null;
            vacancy.Id          = command.Vacancy.Id;
            vacancy.ProgrammeId = command.Vacancy.ProgrammeId;
            trainingProviderService.Setup(x => x.GetProviderAsync(command.VacancyUserDetails.Ukprn.Value))
            .ReturnsAsync(provider);
            recruitVacancyClient.Setup(x => x.Validate(It.IsAny <Vacancy>(), VacancyRuleSet.All))
            .Returns(new EntityValidationResult());
            recruitVacancyClient.Setup(x => x.GetVacancyAsync(command.Vacancy.Id)).ReturnsAsync(vacancy);
            timeProvider.Setup(x => x.Now).Returns(timeNow);
            providerRelationshipsService.Setup(x => x.HasProviderGotEmployersPermissionAsync(
                                                   provider.Ukprn.Value, command.Vacancy.EmployerAccountId,
                                                   command.Vacancy.AccountLegalEntityPublicHashedId, OperationType.RecruitmentRequiresReview))
            .ReturnsAsync(false);

            var actual = await handler.Handle(command, CancellationToken.None);

            actual.ResultCode.Should().Be(ResponseCode.Created);
            actual.Data.Should().Be(vacancy.VacancyReference);
            providerVacancyClient.Verify(x => x.CreateProviderApiVacancy(command.Vacancy.Id, command.Vacancy.Title,
                                                                         command.Vacancy.EmployerAccountId, command.VacancyUserDetails), Times.Once);
            vacancyRepository.Verify(x => x.UpdateAsync(It.Is <Vacancy>(c =>
                                                                        c.Id.Equals(command.Vacancy.Id) &&
                                                                        c.Status == VacancyStatus.Submitted &&
                                                                        c.VacancyReference == vacancy.VacancyReference &&
                                                                        c.CreatedByUser == vacancy.CreatedByUser &&
                                                                        c.Title == command.Vacancy.Title &&
                                                                        c.CreatedByUser == vacancy.CreatedByUser &&
                                                                        c.CreatedDate == vacancy.CreatedDate &&
                                                                        c.OwnerType == vacancy.OwnerType &&
                                                                        c.SourceOrigin == vacancy.SourceOrigin &&
                                                                        c.SourceType == vacancy.SourceType &&
                                                                        c.ProgrammeId == command.Vacancy.ProgrammeId &&
                                                                        c.SubmittedByUser == command.VacancyUserDetails &&
                                                                        c.LastUpdatedByUser == command.VacancyUserDetails &&
                                                                        c.SubmittedDate == timeNow &&
                                                                        c.LastUpdatedDate == timeNow &&
                                                                        c.TrainingProvider == provider
                                                                        )), Times.Once);
        }
Exemple #15
0
 public static async Task <CallResult> ReassignCourseSpecializations(TrainingProvider trainingProvider)
 {
     try
     {
         var updateService = new UpdateService(AppConstants.ServerPaths.MediaDirectory, AppConstants.ServerPaths.ArchiveDirectory);
         return(await updateService.ReassignCourseSpecializationsAsync(trainingProvider));
     }
     catch (Exception ex)
     {
         return(ProcessError(ex));
     }
 }
Exemple #16
0
 public HttpResponseMessage GetReports(string configuration_id)
 {
     try
     {
         var reports = new TrainingProvider(DbInfo).GetReports(configuration_id);
         return(Request.CreateResponse(HttpStatusCode.OK, reports));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.OK, ex.Message));
     }
 }
Exemple #17
0
 public HttpResponseMessage GetTrainings(string id)
 {
     try
     {
         var trainings = new TrainingProvider(DbInfo).GetTrainings(int.Parse(id));
         return(Request.CreateResponse(HttpStatusCode.OK, trainings));
     }
     catch (Exception ex)
     {
         return(Request.CreateResponse(HttpStatusCode.BadRequest, ex.StackTrace));
     }
 }
        public void TraineeshipProviderInfoSection()
        {
            //Arrange
            var viewModel = new VacancyViewModelBuilder().BuildValid(VacancyStatus.Draft, VacancyType.Traineeship);
            var details   = new TrainingProvider();

            //Act
            var view = details.RenderAsHtml(viewModel);

            //Assert
            view.GetElementbyId("provider-info").Should().BeNull();
        }
 private async Task CreateVacancy(CreateVacancyCommand request, TrainingProvider trainingProvider)
 {
     if (!string.IsNullOrEmpty(request.VacancyUserDetails.Email))
     {
         request.VacancyUserDetails.Ukprn = null;
         await _employerVacancyClient.CreateEmployerApiVacancy(request.Vacancy.Id, request.Vacancy.Title,
                                                               request.Vacancy.EmployerAccountId,
                                                               request.VacancyUserDetails, trainingProvider, request.Vacancy.ProgrammeId);
     }
     else
     {
         await _providerVacancyClient.CreateProviderApiVacancy(request.Vacancy.Id, request.Vacancy.Title,
                                                               request.Vacancy.EmployerAccountId,
                                                               request.VacancyUserDetails);
     }
 }
        public async Task GetProviderAsync_ShouldAttemptToFindTrainingProvider()
        {
            const long ukprn = 88888888;

            var loggerMock          = new Mock <ILogger <TrainingProviderService> >();
            var referenceDataReader = new Mock <IReferenceDataReader>();
            var cache            = new Mock <ICache>();
            var timeProvider     = new Mock <ITimeProvider>();
            var trainingProvider = new TrainingProvider
            {
                Ukprn   = ukprn,
                Name    = "name",
                Address = new TrainingProviderAddress
                {
                    AddressLine1 = "address line 1",
                    AddressLine2 = "address line 2",
                    AddressLine3 = "address line 3",
                    AddressLine4 = "address line 4",
                    Postcode     = "post code"
                }
            };
            var providers = new TrainingProviders
            {
                Data = new List <TrainingProvider>
                {
                    trainingProvider
                }
            };

            cache.Setup(x => x.CacheAsideAsync(CacheKeys.TrainingProviders, It.IsAny <DateTime>(),
                                               It.IsAny <Func <Task <TrainingProviders> > >()))
            .ReturnsAsync(providers);

            var sut = new TrainingProviderService(loggerMock.Object, referenceDataReader.Object, cache.Object, timeProvider.Object);

            var provider = await sut.GetProviderAsync(ukprn);


            provider.Name.Should().Be("name");
            provider.Ukprn.Should().Be(ukprn);
            provider.Address.AddressLine1.Should().Be("address line 1");
            provider.Address.AddressLine2.Should().Be("address line 2");
            provider.Address.AddressLine3.Should().Be("address line 3");
            provider.Address.AddressLine4.Should().Be("address line 4");
            provider.Address.Postcode.Should().Be("post code");
        }
        public async Task <OrchestratorResponse <Guid> > PostTitleEditModelAsync(TitleEditModel m, VacancyUser user)
        {
            TrainingProvider         provider  = null;
            IApprenticeshipProgramme programme = null;

            if (!m.VacancyId.HasValue) // Create if it's a new vacancy
            {
                var newVacancy = new Vacancy
                {
                    Title = m.Title
                };
                return(await ValidateAndExecute(
                           newVacancy,
                           v => _vacancyClient.Validate(v, ValidationRules),
                           async v =>
                {
                    if (m.ReferredFromSavedFavourites)
                    {
                        provider = await GetProvider(m.ReferredUkprn);
                        programme = await GetProgramme(m.ReferredProgrammeId);
                    }
                    return await _client.CreateVacancyAsync(m.Title, m.EmployerAccountId, user, provider, programme?.Id);
                }));
            }

            var vacancy = await _utility.GetAuthorisedVacancyForEditAsync(new VacancyRouteModel { EmployerAccountId = m.EmployerAccountId, VacancyId = m.VacancyId.Value }, RouteNames.Title_Post);

            SetVacancyWithEmployerReviewFieldIndicators(
                vacancy.Title,
                FieldIdResolver.ToFieldId(v => v.Title),
                vacancy,
                (v) =>
            {
                return(v.Title = m.Title);
            });

            return(await ValidateAndExecute(
                       vacancy,
                       v => _vacancyClient.Validate(v, ValidationRules),
                       async v =>
            {
                await _vacancyClient.UpdateDraftVacancyAsync(vacancy, user);
                return v.Id;
            }
                       ));
        }
Exemple #22
0
        public async Task Should_LogErrorToDb_When_UpdateTrainingCatalogThrowAggregateException()
        {
            // Arrange
            var trainingProvider    = new TrainingProvider();
            var description         = "test update";
            var mediaPathsContainer = new UpdateService.ServerMediaPathsContainer();

            var updateDbContext = Mock.Of <UpdateDbContext>(x => x.UpdateEvents.Add(It.IsAny <UpdateEvent>()) == new UpdateEvent());

            Mock.Get(updateDbContext).Setup(x => x.SetStateToDetached(It.IsAny <UpdateEvent>()));

            var mockContextFromFactory = new Mock <UpdateDbContext>();

            mockContextFromFactory.Setup(x => x.SetStateToModified(It.IsAny <UpdateEvent>()));

            var dbContextFactory = Mock.Of <IDbContextFactory <UpdateDbContext> >(x => x.CreateDbContext() == mockContextFromFactory.Object);


            var mockTrainingCatalog = new Mock <ITrainingCatalog>();

            mockTrainingCatalog.Setup(x => x.UpdateAsync(It.IsAny <UpdateEvent>(), It.IsAny <UpdateDbContext>(),
                                                         It.IsAny <bool>(), It.IsAny <bool>())).Throws <AggregateException>();

            var mockActivator = new Mock <IActivatorProxy>();

            mockActivator.Setup(x => x.CreateInstance <ITrainingCatalog>(It.IsAny <string>()))
            .Returns(mockTrainingCatalog.Object);

            var sut = new UpdateService(string.Empty, ArchiveDirectoryPath, dbContextFactory, DateTimeProxy.Instance, mockActivator.Object);

            // Act
            await sut.UpdateTrainingCatalogAsync(updateDbContext, trainingProvider, description, mediaPathsContainer);

            // Assert
            Mock.Get(updateDbContext).Verify(x => x.SaveChangesAsync(), Times.Once);

            mockTrainingCatalog.Verify(x => x.UpdateAsync(It.IsAny <UpdateEvent>(), It.IsAny <UpdateDbContext>(),
                                                          It.IsAny <bool>(), It.IsAny <bool>()), Times.Once);
            mockTrainingCatalog.Verify(x => x.Dispose(), Times.Once);

            Mock.Get(dbContextFactory).Verify(x => x.CreateDbContext(), Times.Once);

            mockContextFromFactory.Verify(x => x.SetStateToModified(It.IsAny <UpdateEvent>()), Times.Once());
            mockContextFromFactory.Verify(x => x.SaveChanges(), Times.Once);
        }
Exemple #23
0
        // POST: api/Training
        public HttpResponseMessage Post(Training training)
        {
            try
            {
                var provider = new TrainingProvider(DbInfo);
                var isSaved  = provider.Save(training);
                if (isSaved)
                {
                    return(Request.CreateResponse(HttpStatusCode.OK, provider.LastEntry(training.Key)));
                }

                return(Request.CreateResponse(HttpStatusCode.OK, isSaved));
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message));
            }
        }
Exemple #24
0
        public async Task CreateEmployerApiVacancy(Guid id, string title, string employerAccountId, VacancyUser user,
                                                   TrainingProvider provider, string programmeId)
        {
            var command = new CreateEmployerOwnedVacancyCommand
            {
                VacancyId         = id,
                User              = user,
                UserType          = UserType.Employer,
                Title             = title,
                EmployerAccountId = employerAccountId,
                Origin            = SourceOrigin.Api,
                ProgrammeId       = programmeId,
                TrainingProvider  = provider
            };

            await _messaging.SendCommandAsync(command);

            await AssignVacancyNumber(id);
        }
            public TrainingProviderOrchestratorTestsFixture()
            {
                MockClient = new Mock <IEmployerVacancyClient>();
                MockRecruitVacancyClient            = new Mock <IRecruitVacancyClient>();
                MockTrainingProviderSummaryProvider = new Mock <ITrainingProviderSummaryProvider>();
                MockTrainingProviderService         = new Mock <ITrainingProviderService>();

                User = VacancyOrchestratorTestData.GetVacancyUser();

                TrainingProviderOne = new TrainingProvider {
                    Ukprn = 88888888
                };
                TrainingProviderTwo = new TrainingProvider {
                    Ukprn = 88888889
                };
                TrainingProviderSummaryOne = new TrainingProviderSummary {
                    ProviderName = "First Training Provider", Ukprn = TrainingProviderOne.Ukprn.Value
                };
                TrainingProviderSummaryTwo = new TrainingProviderSummary {
                    ProviderName = "Second Training Provider", Ukprn = TrainingProviderTwo.Ukprn.Value
                };
            }
        public async Task Then_If_The_Command_Is_Valid_A_Vacancy_Created_Event_Is_Submitted(
            Vacancy vacancy,
            CreateVacancyCommand command,
            TrainingProvider provider,
            [Frozen] Mock <IEmployerVacancyClient> employerVacancyClient,
            [Frozen] Mock <IRecruitVacancyClient> recruitVacancyClient,
            [Frozen] Mock <IMessaging> messaging,
            [Frozen] Mock <ITrainingProviderService> trainingProviderService,
            CreateVacancyCommandHandler handler)
        {
            command.ValidateOnly = false;
            trainingProviderService.Setup(x => x.GetProviderAsync(command.VacancyUserDetails.Ukprn.Value))
            .ReturnsAsync(provider);
            recruitVacancyClient.Setup(x => x.Validate(It.IsAny <Vacancy>(), VacancyRuleSet.All))
            .Returns(new EntityValidationResult());
            recruitVacancyClient.Setup(x => x.GetVacancyAsync(command.Vacancy.Id)).ReturnsAsync(vacancy);

            await handler.Handle(command, CancellationToken.None);

            messaging.Verify(x => x.PublishEvent(It.Is <VacancySubmittedEvent>(c =>
                                                                               c.VacancyId.Equals(command.Vacancy.Id) &&
                                                                               c.VacancyReference.Equals(vacancy.VacancyReference)
                                                                               )));
        }
Exemple #27
0
        public async Task Should_UpdateTrainingCatalog()
        {
            // Arrange
            var trainingProvider    = new TrainingProvider();
            var description         = "test update";
            var mediaPathsContainer = new UpdateService.ServerMediaPathsContainer();

            var updateDbContext = Mock.Of <UpdateDbContext>(x => x.UpdateEvents.Add(It.IsAny <UpdateEvent>()) == new UpdateEvent() &&
                                                            x.AuthorsResolves.Local == new ObservableCollection <AuthorResolve>());
            var mockContext = Mock.Get(updateDbContext);

            var mockTrainingCatalog = new Mock <ITrainingCatalog>();
            var mockActivator       = new Mock <IActivatorProxy>();

            mockActivator.Setup(x => x.CreateInstance <ITrainingCatalog>(It.IsAny <string>()))
            .Returns(mockTrainingCatalog.Object);

            var sut = new UpdateService(string.Empty, ArchiveDirectoryPath, new DbContextFactory <UpdateDbContext>(), DateTimeProxy.Instance, mockActivator.Object);

            // Act
            await sut.UpdateTrainingCatalogAsync(mockContext.Object, trainingProvider, description, mediaPathsContainer);

            // Assert
            mockContext.Verify(x => x.UpdateEvents.Add(It.IsAny <UpdateEvent>()), Times.Once);
            mockContext.Verify(x => x.SaveChangesAsync(), Times.Exactly(2));

            mockActivator.Verify(x => x.CreateInstance <ITrainingCatalog>(It.IsAny <string>()), Times.Once);

            mockTrainingCatalog.Verify(x => x.Initialize(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <string>(),
                                                         It.IsAny <string>(), It.IsAny <LocationType>(), It.IsAny <IMediaPath>(), It.IsAny <string>()), Times.Once());

            mockTrainingCatalog.Verify(x => x.UpdateAsync(It.IsAny <UpdateEvent>(), It.IsAny <UpdateDbContext>(),
                                                          It.IsAny <bool>(), It.IsAny <bool>()), Times.Once);

            mockTrainingCatalog.Verify(x => x.Dispose(), Times.Once);
        }
      public async Task Should_UpdateTrainingCatalog()
      {
         // Arrange
         var trainingProvider = new TrainingProvider();
         var description = "test update";
         var mediaPathsContainer = new UpdateService.ServerMediaPathsContainer();

         var updateDbContext = Mock.Of<UpdateDbContext>(x => x.UpdateEvents.Add(It.IsAny<UpdateEvent>()) == new UpdateEvent() &&
            x.AuthorsResolves.Local == new ObservableCollection<AuthorResolve>());
         var mockContext = Mock.Get(updateDbContext);

         var mockTrainingCatalog = new Mock<ITrainingCatalog>();
         var mockActivator = new Mock<IActivatorProxy>();

         mockActivator.Setup(x => x.CreateInstance<ITrainingCatalog>(It.IsAny<string>()))
            .Returns(mockTrainingCatalog.Object);

         var sut = new UpdateService(string.Empty, ArchiveDirectoryPath, new DbContextFactory<UpdateDbContext>(), DateTimeProxy.Instance, mockActivator.Object);

         // Act
         await sut.UpdateTrainingCatalogAsync(mockContext.Object, trainingProvider, description, mediaPathsContainer);

         // Assert
         mockContext.Verify(x => x.UpdateEvents.Add(It.IsAny<UpdateEvent>()), Times.Once);
         mockContext.Verify(x => x.SaveChangesAsync(), Times.Exactly(2));

         mockActivator.Verify(x => x.CreateInstance<ITrainingCatalog>(It.IsAny<string>()), Times.Once);

         mockTrainingCatalog.Verify(x => x.Initialize(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>(),
            It.IsAny<string>(), It.IsAny<LocationType>(),It.IsAny<IMediaPath>(), It.IsAny<string>()), Times.Once());

         mockTrainingCatalog.Verify(x => x.UpdateAsync(It.IsAny<UpdateEvent>(), It.IsAny<UpdateDbContext>(),
            It.IsAny<bool>(), It.IsAny<bool>()), Times.Once);

         mockTrainingCatalog.Verify(x => x.Dispose(), Times.Once);
      }
        public async Task <Guid> CreateVacancyAsync(string title, string employerAccountId, VacancyUser user, TrainingProvider provider = null, string programmeId = null)
        {
            var vacancyId = GenerateVacancyId();

            var command = new CreateEmployerOwnedVacancyCommand
            {
                VacancyId         = vacancyId,
                User              = user,
                UserType          = UserType.Employer,
                Title             = title,
                EmployerAccountId = employerAccountId,
                Origin            = SourceOrigin.EmployerWeb
            };

            if (provider != null)
            {
                command.TrainingProvider = provider;
            }

            if (programmeId != null)
            {
                command.ProgrammeId = programmeId;
            }

            await _messaging.SendCommandAsync(command);

            return(vacancyId);
        }
        protected void AddTManual_Click(object sender, EventArgs e)
        {
            Security objSecurity                  = new Security();
            var      vtxtName                     = txtName.Text;
            var      vtxtSDATNum                  = txtSDATNum.Text;
            var      vtxtAddress_1                = txtAddress_1.Text;
            var      vtxtCity_1                   = txtCity_1.Text;
            var      vtxtState_1                  = txtState_1.Text;
            var      vtxtZipCode_1                = txtZipCode_1.Text;
            var      vtxtAddress_2                = txtAddress_2.Text;
            var      vtxtCity_2                   = txtCity_2.Text;
            var      vtxtState_2                  = txtState_2.Text;
            var      vtxtZipcode_2                = txtZipcode_2.Text;
            var      vtxtPhone                    = txtPhone.Text;
            var      vtxtFax                      = txtFax.Text;
            var      vtxtEmailAddress             = txtEmailAddress.Text;
            var      vtxtEIN                      = txtEIN.Text;
            var      vtxtACCID                    = txtACCID.Text;
            DateTime vAccreditationExpirationDate = default(DateTime);

            if (!string.IsNullOrWhiteSpace(txtAccreditationExpirationDate.Text))
            {
                DateTime.TryParse(txtAccreditationExpirationDate.Text, out vAccreditationExpirationDate);
            }
            var vchkChargeFee          = chkChargeFee.Checked ? 1 : 0;
            var vchkTaxExempt          = chkTaxExempt.Checked ? 1 : 0;
            var vtxtTaxExempt          = txtTaxExempt.Text;
            var vchkTPwebsiteYES       = chkTPwebsiteYES.Checked ? 1 : 0;
            var vtxtTPwebsiteURL       = txtTPwebsiteURL.Text;
            var vchkTPwebsiteNO        = chkTPwebsiteNO.Checked ? 1 : 0;
            var vtxtLocation_Address_1 = txtLocation_Address_1.Text;
            var vtxtLocation_City_1    = txtLocation_City_1.Text;
            var vtxtLocation_State_1   = txtLocation_State_1.Text;
            var vtxtLocation_ZipCode_1 = txtLocation_ZipCode_1.Text;
            var vtxtLocation_Address_2 = txtLocation_Address_2.Text;
            var vtxtLocation_City_2    = txtLocation_City_2.Text;
            var vtxtLocation_State_2   = txtLocation_State_2.Text;
            var vtxtLocation_ZipCode_2 = txtLocation_ZipCode_2.Text;
            var vtxtLocation_Address_3 = txtLocation_Address_3.Text;
            var vtxtLocation_City_3    = txtLocation_City_3.Text;
            var vtxtLocation_State_3   = txtLocation_State_3.Text;
            var vtxtLocation_ZipCode_3 = txtLocation_ZipCode_3.Text;
            var vtxtLocation_Address_4 = txtLocation_Address_4.Text;
            var vtxtLocation_City_4    = txtLocation_City_4.Text;
            var vtxtLocation_State_4   = txtLocation_State_4.Text;
            var vtxtLocation_ZipCode_4 = txtLocation_ZipCode_4.Text;
            var vtxtLocation_Address_5 = txtLocation_Address_5.Text;
            var vtxtLocation_City_5    = txtLocation_City_5.Text;
            var vtxtLocation_State_5   = txtLocation_State_5.Text;
            var vtxtLocation_ZipCode_5 = txtLocation_ZipCode_5.Text;
            var vtxtLocation_Address_6 = txtLocation_Address_6.Text;
            var vtxtLocation_City_6    = txtLocation_City_6.Text;
            var vtxtLocation_State_6   = txtLocation_State_6.Text;
            var vtxtLocation_ZipCode_6 = txtLocation_ZipCode_6.Text;
            var vchkCORiskAssessor     = chkCORiskAssessor.Checked ? 1 : 0;
            var vchkCOProjectDesigner  = chkCOProjectDesigner.Checked ? 1 : 0;
            var vchkCOInspectorTech    = chkCOInspectorTech.Checked ? 1 : 0;
            var vchkCOAbatWorkEnglish  = chkCOAbatWorkEnglish.Checked ? 1 : 0;
            var vchkCOVisualInspector  = chkCOVisualInspector.Checked ? 1 : 0;
            var vchkCOAbatWorkSpanish  = chkCOAbatWorkSpanish.Checked ? 1 : 0;
            var vchkCOMainRepaintSup   = chkCOMainRepaintSup.Checked ? 1 : 0;
            var vchkCOStructSteelSup   = chkCOStructSteelSup.Checked ? 1 : 0;
            var vchkCORemovalSup       = chkCORemovalSup.Checked ? 1 : 0;
            var vchkStructSteelWork    = chkStructSteelWork.Checked ? 1 : 0;
            var vtxtInstructorFN_1     = txtInstructorFN_1.Text;
            var vtxtInstructorLN_1     = txtInstructorLN_1.Text;
            var vtxtInstructorFN_2     = txtInstructorFN_2.Text;
            var vtxtInstructorLN_2     = txtInstructorLN_2.Text;
            var vtxtInstructorFN_3     = txtInstructorFN_3.Text;
            var vtxtInstructorLN_3     = txtInstructorLN_3.Text;
            var vtxtInstructorFN_4     = txtInstructorFN_4.Text;
            var vtxtInstructorLN_4     = txtInstructorLN_4.Text;
            var vtxtInstructorFN_5     = txtInstructorFN_5.Text;
            var vtxtInstructorLN_5     = txtInstructorLN_5.Text;
            var vtxtInstructorFN_6     = txtInstructorFN_6.Text;
            var vtxtInstructorLN_6     = txtInstructorLN_6.Text;
            var vtxtInstructorFN_7     = txtInstructorFN_7.Text;
            var vtxtInstructorLN_7     = txtInstructorLN_7.Text;
            var vtxtInstructorFN_8     = txtInstructorFN_8.Text;
            var vtxtInstructorLN_8     = txtInstructorLN_8.Text;
            var vtxtAuthRepContFName   = txtAuthRepContFName.Text;
            var vtxtAuthRepContLName   = txtAuthRepContLName.Text;
            var vtxtAuthRepContTitle   = txtAuthRepContTitle.Text;
            var vchkIAgree             = chkIAgree.Checked ? 1 : 0;
            var vdropPublicList        = int.Parse(dropPublicList.SelectedItem.Value);
            var vdropIsRenewal         = int.Parse(dropIsRenewal.SelectedItem.Value);

            var tp = TrainingProvider.Create(vtxtName, vtxtSDATNum, vtxtAddress_1, vtxtCity_1, vtxtState_1, vtxtZipCode_1, vtxtAddress_2, vtxtCity_2, vtxtState_2, vtxtZipcode_2,
                                             vdropPublicList, vtxtPhone, vtxtFax, vtxtEmailAddress, vtxtEIN, vdropIsRenewal, vtxtACCID, vAccreditationExpirationDate, vchkChargeFee, vchkTaxExempt,
                                             vtxtTaxExempt, vchkTPwebsiteYES, vtxtTPwebsiteURL, vchkTPwebsiteNO, vchkCORiskAssessor,
                                             vchkCOProjectDesigner, vchkCOInspectorTech, vchkCOAbatWorkEnglish, vchkCOVisualInspector, vchkCOAbatWorkSpanish, vchkCOMainRepaintSup, vchkCOStructSteelSup,
                                             vchkCORemovalSup, vchkStructSteelWork, vtxtAuthRepContFName, vtxtAuthRepContLName, vtxtAuthRepContTitle, vchkIAgree);

            _tPRepository.Add(tp);
            _uow.Commit();
            _tPRepository.AddLocation(TP_Location.Create(tp.Id, vtxtLocation_Address_1, vtxtLocation_City_1, vtxtLocation_State_1, vtxtLocation_ZipCode_1));
            _tPRepository.AddLocation(TP_Location.Create(tp.Id, vtxtLocation_Address_2, vtxtLocation_City_2, vtxtLocation_State_2, vtxtLocation_ZipCode_2));
            _tPRepository.AddLocation(TP_Location.Create(tp.Id, vtxtLocation_Address_3, vtxtLocation_City_3, vtxtLocation_State_3, vtxtLocation_ZipCode_3));
            _tPRepository.AddLocation(TP_Location.Create(tp.Id, vtxtLocation_Address_4, vtxtLocation_City_4, vtxtLocation_State_4, vtxtLocation_ZipCode_4));
            _tPRepository.AddLocation(TP_Location.Create(tp.Id, vtxtLocation_Address_5, vtxtLocation_City_5, vtxtLocation_State_5, vtxtLocation_ZipCode_5));
            _tPRepository.AddLocation(TP_Location.Create(tp.Id, vtxtLocation_Address_6, vtxtLocation_City_6, vtxtLocation_State_6, vtxtLocation_ZipCode_6));

            _tPRepository.AddInstrutor(TP_Instructors.Create(tp.Id, vtxtInstructorFN_1, vtxtInstructorLN_1));
            _tPRepository.AddInstrutor(TP_Instructors.Create(tp.Id, vtxtInstructorFN_2, vtxtInstructorLN_2));
            _tPRepository.AddInstrutor(TP_Instructors.Create(tp.Id, vtxtInstructorFN_3, vtxtInstructorLN_3));
            _tPRepository.AddInstrutor(TP_Instructors.Create(tp.Id, vtxtInstructorFN_4, vtxtInstructorLN_4));
            _tPRepository.AddInstrutor(TP_Instructors.Create(tp.Id, vtxtInstructorFN_5, vtxtInstructorLN_5));
            _tPRepository.AddInstrutor(TP_Instructors.Create(tp.Id, vtxtInstructorFN_6, vtxtInstructorLN_6));
            _tPRepository.AddInstrutor(TP_Instructors.Create(tp.Id, vtxtInstructorFN_7, vtxtInstructorLN_7));
            _tPRepository.AddInstrutor(TP_Instructors.Create(tp.Id, vtxtInstructorFN_8, vtxtInstructorLN_8));
            _uow.Commit();

            string strBackToForms = objcryptoJS.AES_encrypt("10", AppConstants.secretKey, AppConstants.initVec).ToString();

            ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "script", "CallNotify('Your Application has been submitted successfully!', '', 'success', 'RoleDesc.aspx?Dash=active&cgi=" + System.Web.HttpUtility.UrlEncode(strBackToForms) + "');", true);
        }
      public async Task Should_LogErrorToDb_When_UpdateTrainingCatalogThrowAggregateException()
      {
         // Arrange
         var trainingProvider = new TrainingProvider();
         var description = "test update";
         var mediaPathsContainer = new UpdateService.ServerMediaPathsContainer();

         var updateDbContext = Mock.Of<UpdateDbContext>(x => x.UpdateEvents.Add(It.IsAny<UpdateEvent>()) == new UpdateEvent());
         Mock.Get(updateDbContext).Setup(x => x.SetStateToDetached(It.IsAny<UpdateEvent>()));

         var mockContextFromFactory = new Mock<UpdateDbContext>();
         mockContextFromFactory.Setup(x => x.SetStateToModified(It.IsAny<UpdateEvent>()));

         var dbContextFactory = Mock.Of<IDbContextFactory<UpdateDbContext>>(x => x.CreateDbContext() == mockContextFromFactory.Object);
         

         var mockTrainingCatalog = new Mock<ITrainingCatalog>();
         mockTrainingCatalog.Setup(x => x.UpdateAsync(It.IsAny<UpdateEvent>(), It.IsAny<UpdateDbContext>(),
            It.IsAny<bool>(), It.IsAny<bool>())).Throws<AggregateException>();

         var mockActivator = new Mock<IActivatorProxy>();
         mockActivator.Setup(x => x.CreateInstance<ITrainingCatalog>(It.IsAny<string>()))
            .Returns(mockTrainingCatalog.Object);

         var sut = new UpdateService(string.Empty, ArchiveDirectoryPath, dbContextFactory, DateTimeProxy.Instance, mockActivator.Object);

         // Act
         await sut.UpdateTrainingCatalogAsync(updateDbContext, trainingProvider, description, mediaPathsContainer);

         // Assert
         Mock.Get(updateDbContext).Verify(x => x.SaveChangesAsync(), Times.Once);
         
         mockTrainingCatalog.Verify(x => x.UpdateAsync(It.IsAny<UpdateEvent>(), It.IsAny<UpdateDbContext>(),
            It.IsAny<bool>(), It.IsAny<bool>()), Times.Once);
         mockTrainingCatalog.Verify(x => x.Dispose(), Times.Once);

         Mock.Get(dbContextFactory).Verify(x => x.CreateDbContext(), Times.Once);

         mockContextFromFactory.Verify(x => x.SetStateToModified(It.IsAny<UpdateEvent>()), Times.Once());
         mockContextFromFactory.Verify(x => x.SaveChanges(), Times.Once);
      }
Exemple #32
0
 void ITPRepository.Update(TrainingProvider trainingProvider)
 {
     _context.Update(trainingProvider);
 }
      /// <exception cref="ArgumentNullException"><paramref name="trainingProvider"/> is <see langword="null" />.</exception>
      public async Task<CallResult> ReassignCourseSpecializationsAsync(TrainingProvider trainingProvider, bool useArchiveData = false)
      {
         if (trainingProvider == null)
            throw new ArgumentNullException("trainingProvider");

         if (!await _semaphore.WaitAsync(WaitTimeout))
         {
            return CallResult.Failed(Resources.UpdateService_CannotUpdateBecauseDatabaseIsInUpdateState);
         }

         try
         {
            var pathsContainer = new ServerMediaPathsContainer(_serverImagesPath, new[] { trainingProvider });

            using (var catalog = _activatorProxy.CreateInstance<ITrainingCatalog>(trainingProvider.AssemblyType))
            {
               // ReSharper disable once ExceptionNotDocumented
               catalog.Initialize(trainingProvider.Name, trainingProvider.Id, trainingProvider.SiteUrl,
                  trainingProvider.SourceUrl, trainingProvider.SourceLocation, pathsContainer, _archiveDirectoryPath);
               using (var context = _contextFactory.CreateDbContext())
               {
                  await catalog.ReassignCourseSpecializationsAsync(context, useArchiveData);
               }
            }
         }
         finally
         {
            _semaphore.Release();
         }

         return CallResult.Success;
      }
      internal async Task UpdateTrainingCatalogAsync(UpdateDbContext context, TrainingProvider trainingProvider,
         string description, ServerMediaPathsContainer pathsContainer, bool useArchiveData = false, bool logUpdateToDb = true)
      {
         var updateEvent = new UpdateEvent(trainingProvider.Id, description, _dateTimeProxy.UtcNow);

         context.UpdateEvents.Add(updateEvent);

         await context.SaveChangesAsync();

         using (var catalog = _activatorProxy.CreateInstance<ITrainingCatalog>(trainingProvider.AssemblyType))
         {
            catalog.Initialize(trainingProvider.Name, trainingProvider.Id, trainingProvider.SiteUrl,
               trainingProvider.SourceUrl, trainingProvider.SourceLocation, pathsContainer,_archiveDirectoryPath);
            try
            {
               await catalog.UpdateAsync(updateEvent, context, useArchiveData, logUpdateToDb);

               updateEvent.EndedOn = _dateTimeProxy.UtcNow;
               if (context.AuthorsResolves.Local.Any())
               {
                  updateEvent.UpdateResult = UpdateResult.NeedManualResolve;
               } else
               {
                  updateEvent.UpdateResult = UpdateResult.Success;
               }

               await context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
               updateEvent.EndedOn = _dateTimeProxy.UtcNow;
               updateEvent.UpdateResult = UpdateResult.Error;

               var aggregateException = ex as AggregateException;
               var errorData = aggregateException != null
                  ? aggregateException.Flatten().ToString()
                  : ex.ToString();

               updateEvent.ErrorData = errorData;

               updateEvent.AuthorsUpdates = null;
               updateEvent.CategoriesUpdates = null;
               updateEvent.CoursesUpdates = null;

               context.SetStateToDetached(updateEvent);

               using (var ctx = _contextFactory.CreateDbContext())
               {
                  ctx.SetStateToModified(updateEvent);
                  ctx.SaveChanges();
               }
            }
         }
      }