public When_Qualification_SaveQualification_Has_No_Selected_Routes()
        {
            var qualificationService         = Substitute.For <IQualificationService>();
            var providerVenueService         = Substitute.For <IProviderVenueService>();
            var providerQualificationService = Substitute.For <IProviderQualificationService>();
            var routePathService             = Substitute.For <IRoutePathService>();

            var qualificationController = new QualificationController(providerVenueService, qualificationService,
                                                                      providerQualificationService, routePathService);
            var controllerWithClaims = new ClaimsBuilder <QualificationController>(qualificationController)
                                       .AddUserName("username")
                                       .AddEmail("*****@*****.**")
                                       .Build();

            var viewModel = new SaveQualificationViewModel
            {
                QualificationId = 1,
                Title           = "Qualification title",
                ShortTitle      = new string("Short Title"),
                Source          = "Test",
                Routes          = new List <RouteSummaryViewModel>
                {
                    new RouteSummaryViewModel
                    {
                        Id         = 1,
                        Name       = "Route 1",
                        IsSelected = false
                    }
                }
            };

            _result = controllerWithClaims.SaveQualificationAsync(viewModel).GetAwaiter().GetResult();
        }
Beispiel #2
0
        public async Task UpdateQualificationAsync(SaveQualificationViewModel viewModel)
        {
            var qualification = await _qualificationRepository.GetSingleOrDefaultAsync(v => v.Id == viewModel.QualificationId);

            qualification = _mapper.Map(viewModel, qualification);
            await _qualificationRepository.UpdateAsync(qualification);

            var existingMappings = _qualificationRouteMappingRepository
                                   .GetManyAsync(r => r.QualificationId == viewModel.QualificationId)
                                   .ToList();

            var comparer    = new QualificationRouteMappingEqualityComparer();
            var newMappings = _mapper.Map <IList <QualificationRouteMapping> >(viewModel);

            var toBeAdded = newMappings.Except(existingMappings, comparer).ToList();

            var same        = existingMappings.Intersect(newMappings, comparer).ToList();
            var toBeDeleted = existingMappings.Except(same).ToList();

            QualificationRouteMapping Find(QualificationRouteMapping qrpm) =>
            existingMappings.First(r => r.Id == qrpm.Id);

            var deleteMappings = toBeDeleted.Select(Find).ToList();
            await _qualificationRouteMappingRepository.DeleteManyAsync(deleteMappings);

            foreach (var toBeAddedItem in toBeAdded)
            {
                await _qualificationRouteMappingRepository.CreateAsync(toBeAddedItem);
            }
        }
        public async Task <IActionResult> SaveQualificationAsync(SaveQualificationViewModel viewModel)
        {
            Validate(viewModel);

            if (!ModelState.IsValid)
            {
                var errorList = ModelState.Where(e => e.Value.Errors.Any()).ToDictionary(
                    kvp => kvp.Key,
                    kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()
                    );

                var errors = JsonConvert.SerializeObject(errorList);

                return(Json(new { success = false, response = errors }));
            }

            await _qualificationService.UpdateQualificationAsync(viewModel);

            return(Json(new { success = true, response = string.Empty }));
        }
        public When_Qualification_SaveQualification_Is_Called()
        {
            var providerVenueService         = Substitute.For <IProviderVenueService>();
            var providerQualificationService = Substitute.For <IProviderQualificationService>();

            var routePathService = Substitute.For <IRoutePathService>();

            var routes = new List <SelectListItem>
            {
                new SelectListItem {
                    Text = "1", Value = "Route 1"
                },
                new SelectListItem {
                    Text = "2", Value = "Route 2"
                }
            };

            var routeDictionary = new Dictionary <int, string>
            {
                { 1, "Route 1" },
                { 2, "Route 2" }
            };

            routePathService.GetRouteSelectListItemsAsync().Returns(routes);
            routePathService.GetRouteDictionaryAsync().Returns(routeDictionary);

            _qualificationService = Substitute.For <IQualificationService>();
            _qualificationService.GetQualificationByIdAsync(1)
            .Returns(new QualificationSearchResultViewModel
            {
                QualificationId = 1,
                Title           = "Qualification title",
                ShortTitle      = new string('X', 100),
                RouteIds        = new List <int> {
                    1
                }
            });

            var qualificationController = new QualificationController(providerVenueService, _qualificationService,
                                                                      providerQualificationService, routePathService);
            var controllerWithClaims = new ClaimsBuilder <QualificationController>(qualificationController)
                                       .AddUserName("username")
                                       .AddEmail("*****@*****.**")
                                       .Build();

            var viewModel = new SaveQualificationViewModel
            {
                QualificationId = 1,
                Title           = "Qualification title",
                ShortTitle      = new string('X', 100),
                Source          = "Test",
                Routes          = new List <RouteSummaryViewModel>
                {
                    new RouteSummaryViewModel
                    {
                        Id         = 1,
                        Name       = "Route 1",
                        IsSelected = true
                    }
                }
            };

            _result = controllerWithClaims.SaveQualificationAsync(viewModel).GetAwaiter().GetResult();
        }
Beispiel #5
0
        public When_QualificationService_Is_Called_To_UpdateQualification()
        {
            var httpContextAccessor = Substitute.For <IHttpContextAccessor>();

            httpContextAccessor.HttpContext.Returns(new DefaultHttpContext
            {
                User = new ClaimsPrincipal(new ClaimsIdentity(new[]
                {
                    new Claim(ClaimTypes.GivenName, "adminUserName")
                }))
            });

            var dateTimeProvider = Substitute.For <IDateTimeProvider>();

            dateTimeProvider.UtcNow().Returns(new DateTime(2019, 1, 1));

            var config = new MapperConfiguration(c =>
            {
                c.AddMaps(typeof(QualificationMapper).Assembly);
                c.ConstructServicesUsing(type =>
                                         type.Name.Contains("LoggedInUserEmailResolver") ?
                                         new LoggedInUserEmailResolver <SaveQualificationViewModel, Domain.Models.Qualification>(httpContextAccessor) :
                                         type.Name.Contains("LoggedInUserNameResolver") ?
                                         (object)new LoggedInUserNameResolver <SaveQualificationViewModel, Domain.Models.Qualification>(httpContextAccessor) :
                                         type.Name.Contains("UtcNowResolver") ?
                                         new UtcNowResolver <SaveQualificationViewModel, Domain.Models.Qualification>(dateTimeProvider) :
                                         null);
            });
            var mapper = new Mapper(config);

            var learningAimReferenceRepository = Substitute.For <IRepository <LearningAimReference> >();

            _qualificationRepository = Substitute.For <IRepository <Domain.Models.Qualification> >();
            _qualificationRepository
            .GetSingleOrDefaultAsync(Arg.Any <Expression <Func <Domain.Models.Qualification, bool> > >())
            .Returns(new ValidQualificationBuilder().Build());

            _qualificationRouteMappingRepository = Substitute.For <IRepository <QualificationRouteMapping> >();
            _qualificationRouteMappingRepository
            .GetManyAsync(Arg.Any <Expression <Func <QualificationRouteMapping, bool> > >())
            .Returns(new List <QualificationRouteMapping>
            {
                new QualificationRouteMapping
                {
                    Id = 101,
                    QualificationId = 1,
                    RouteId         = 1
                },
                new QualificationRouteMapping
                {
                    Id = 102,
                    QualificationId = 1,
                    RouteId         = 2
                }
            }.AsQueryable());

            var qualificationService = new QualificationService(mapper, _qualificationRepository, _qualificationRouteMappingRepository, learningAimReferenceRepository);

            //Set up routes 1 and 2 in the database,
            //then 2 and 3 selected in the view model.
            //Should end up with mapping for route 1 deleted
            //and route 3 added

            var viewModel = new SaveQualificationViewModel
            {
                QualificationId = 1,
                Title           = "Title",
                ShortTitle      = "Modified Short Title",
                Source          = "Test",
                Routes          = new List <RouteSummaryViewModel>
                {
                    new RouteSummaryViewModel
                    {
                        Id         = 1,
                        Name       = "Route 1",
                        IsSelected = false
                    },
                    new RouteSummaryViewModel
                    {
                        Id         = 2,
                        Name       = "Route 2",
                        IsSelected = true
                    },
                    new RouteSummaryViewModel
                    {
                        Id         = 3,
                        Name       = "Route 1",
                        IsSelected = true
                    }
                }
            };

            qualificationService.UpdateQualificationAsync(viewModel).GetAwaiter().GetResult();
        }