Example #1
0
        public async Task <IActionResult> Start(CertificateStartViewModel vm)
        {
            _sessionService.Remove("CertificateSession");
            var ukprn    = _contextAccessor.HttpContext.User.FindFirst("http://schemas.portal.com/ukprn")?.Value;
            var username = _contextAccessor.HttpContext.User
                           .FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn")?.Value;

            _logger.LogInformation(
                $"Start of Certificate Start for ULN {vm.Uln} and Standard Code: {vm.StdCode} by user {username}");

            var cert = await _certificateApiClient.Start(new StartCertificateRequest()
            {
                UkPrn        = int.Parse(ukprn),
                StandardCode = vm.StdCode,
                Uln          = vm.Uln,
                Username     = username
            });

            var organisation = await _organisationsApiClient.Get(ukprn);

            var options = (await _certificateApiClient.GetOptions(cert.StandardCode)).Select(o => o.OptionName).ToList();

            _sessionService.Set("CertificateSession", new CertificateSession()
            {
                CertificateId = cert.Id,
                Uln           = vm.Uln,
                StandardCode  = vm.StdCode,
                Options       = options
            });

            _logger.LogInformation(
                $"New Certificate received for ULN {vm.Uln} and Standard Code: {vm.StdCode} with ID {cert.Id}");

            return(RedirectToAction("Declare", "CertificateDeclaration"));
        }
        public async Task <IActionResult> Start(CertificateStartViewModel vm)
        {
            _sessionService.Remove(nameof(CertificateSession));

            var ukprn    = _contextAccessor.HttpContext.User.FindFirst("http://schemas.portal.com/ukprn")?.Value;
            var username = _contextAccessor.HttpContext.User.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn")?.Value;

            List <string>          options      = new List <string>();
            var                    singleOption = string.Empty;
            List <StandardVersion> versions     = new List <StandardVersion>();

            var startCertificateRequest = new StartCertificateRequest()
            {
                UkPrn        = int.Parse(ukprn),
                StandardCode = vm.StdCode,
                Uln          = vm.Uln,
                Username     = username
            };

            async Task RetrieveAndPopulateStandardOptions(string standardUId)
            {
                var optionsResult = await _standardVersionClient.GetStandardOptions(standardUId);

                if (optionsResult != null && optionsResult.HasOptions())
                {
                    if (optionsResult.OnlyOneOption())
                    {
                        singleOption = optionsResult.CourseOption.Single();
                        startCertificateRequest.CourseOption = singleOption;
                    }

                    options = optionsResult.CourseOption.ToList();
                }
            }

            var learner = await _learnerApiClient.GetLearnerRecord(vm.StdCode, vm.Uln);

            var versionsResult = await _standardVersionClient.GetStandardVersionsByLarsCode(vm.StdCode);

            if (learner.VersionConfirmed && !string.IsNullOrEmpty(learner.Version))
            {
                var version = versionsResult.First(v => v.Version == learner.Version);

                startCertificateRequest.StandardUId = version.StandardUId;
                versions.Add(version);

                if (!string.IsNullOrEmpty(learner.CourseOption))
                {
                    options.Add(learner.CourseOption);
                    startCertificateRequest.CourseOption = learner.CourseOption;
                }
                else
                {
                    await RetrieveAndPopulateStandardOptions(version.StandardUId);
                }
            }
            else
            {
                versions = versionsResult.ToList();

                if (versionsResult.Count() == 1)
                {
                    startCertificateRequest.StandardUId = versionsResult.First().StandardUId;

                    await RetrieveAndPopulateStandardOptions(versionsResult.First().StandardUId);
                }
            }

            _logger.LogInformation($"Start of Certificate Start for ULN {vm.Uln} and Standard Code: {vm.StdCode} by user {username}");

            var cert = await _certificateApiClient.Start(startCertificateRequest);

            var certificateSession = new CertificateSession()
            {
                CertificateId = cert.Id,
                Uln           = vm.Uln,
                StandardCode  = vm.StdCode,
                StandardUId   = startCertificateRequest.StandardUId,
                Versions      = Mapper.Map <List <StandardVersionViewModel> >(versions),
                Options       = options
            };

            _sessionService.Set(nameof(CertificateSession), certificateSession);
            _logger.LogInformation($"New Certificate received for ULN {vm.Uln} and Standard Code: {vm.StdCode} with ID {cert.Id}");

            if (versions.Count() > 1)
            {
                return(RedirectToAction("Version", "CertificateVersion"));
            }
            else if (!string.IsNullOrWhiteSpace(singleOption))
            {
                return(RedirectToAction("Declare", "CertificateDeclaration"));
            }
            else if (options.Count > 1)
            {
                return(RedirectToAction("Option", "CertificateOption"));
            }

            return(RedirectToAction("Declare", "CertificateDeclaration"));
        }
Example #3
0
        public async Task WhenStartingANewCertificate_WithoutApprovalsData_WithSingleVersionNoOptions_GoesToDeclaration(CertificateStartViewModel model, ApprovalsLearnerResult learner, StandardVersion standard)
        {
            CertificateSession setSession = new CertificateSession();

            learner.Version      = null;
            learner.CourseOption = null;

            _mockStandardVersionClient.Setup(s => s.GetStandardVersionsByLarsCode(model.StdCode)).ReturnsAsync(new List <StandardVersion> {
                standard
            });
            _mockStandardVersionClient.Setup(s => s.GetStandardOptions(standard.StandardUId)).ReturnsAsync(new StandardOptions());
            _mockLearnerApiClient.Setup(c => c.GetLearnerRecord(model.StdCode, model.Uln)).ReturnsAsync(learner);


            _mockSessionService.Setup(c => c.Set(nameof(CertificateSession), It.IsAny <object>()))
            .Callback <string, object>((key, session) =>
            {
                if (key == nameof(CertificateSession) && session is CertificateSession)
                {
                    setSession = (CertificateSession)session;
                }
            });

            var result = await _certificateController.Start(model) as RedirectToActionResult;

            _mockCertificateApiClient.Verify(s => s.Start(It.Is <StartCertificateRequest>(
                                                              m => m.StandardCode == model.StdCode && m.Uln == model.Uln &&
                                                              m.Username == Username && m.UkPrn == Ukprn)));

            setSession.CertificateId.Should().Be(CertificateId);
            setSession.Uln.Should().Be(model.Uln);
            setSession.StandardCode.Should().Be(model.StdCode);
            setSession.Options.Should().BeEmpty();
            setSession.Versions.Should().BeEquivalentTo(new List <StandardVersionViewModel> {
                Mapper.Map <StandardVersionViewModel>(standard)
            });

            result.ControllerName.Should().Be("CertificateDeclaration");
            result.ActionName.Should().Be("Declare");
        }
Example #4
0
        public async Task WhenStartingANewCertificate_WithVersionSetFromApprovals_OptionRequiredButNotSet_GoesToOptionsPage(CertificateStartViewModel model, ApprovalsLearnerResult learner, StandardVersion version, StandardOptions options)
        {
            CertificateSession setSession = new CertificateSession();

            version.LarsCode         = model.StdCode;
            learner.Version          = version.Version;
            learner.VersionConfirmed = true;
            learner.CourseOption     = string.Empty;

            _mockLearnerApiClient.Setup(c => c.GetLearnerRecord(It.IsAny <int>(), It.IsAny <long>()))
            .ReturnsAsync(learner);

            _mockStandardVersionClient.Setup(c => c.GetStandardVersionsByLarsCode(It.IsAny <int>()))
            .ReturnsAsync(new List <StandardVersion> {
                version
            });

            _mockStandardVersionClient.Setup(s => s.GetStandardOptions(version.StandardUId))
            .ReturnsAsync(options);

            _mockSessionService.Setup(c => c.Set(nameof(CertificateSession), It.IsAny <object>()))
            .Callback <string, object>((key, session) =>
            {
                if (key == nameof(CertificateSession) && session is CertificateSession)
                {
                    setSession = (CertificateSession)session;
                }
            });

            var result = await _certificateController.Start(model) as RedirectToActionResult;

            _mockCertificateApiClient.Verify(s => s.Start(It.Is <StartCertificateRequest>(
                                                              m => m.StandardCode == model.StdCode &&
                                                              m.Uln == model.Uln &&
                                                              m.Username == Username &&
                                                              m.UkPrn == Ukprn &&
                                                              m.StandardUId == version.StandardUId &&
                                                              m.CourseOption == null)));

            setSession.CertificateId.Should().Be(CertificateId);
            setSession.Uln.Should().Be(model.Uln);
            setSession.StandardCode.Should().Be(model.StdCode);
            setSession.Options.Should().BeEquivalentTo(options.CourseOption.ToList());
            setSession.Versions.Count().Should().Be(1);
            setSession.Versions.Single().StandardUId.Should().Be(version.StandardUId);

            result.ControllerName.Should().Be("CertificateOption");
            result.ActionName.Should().Be("Option");
        }
Example #5
0
        public async Task WhenStartingANewCertificate_WithVersionSetFromApprovalsButNotConfirmed_GoesToVersionPage(CertificateStartViewModel model, ApprovalsLearnerResult learner, IEnumerable <StandardVersion> standards)
        {
            CertificateSession setSession = new CertificateSession();

            learner.Version          = standards.First().Version;
            learner.CourseOption     = null;
            learner.VersionConfirmed = false;

            _mockLearnerApiClient.Setup(c => c.GetLearnerRecord(It.IsAny <int>(), It.IsAny <long>()))
            .ReturnsAsync(learner);

            _mockStandardVersionClient.Setup(c => c.GetStandardVersionsByLarsCode(It.IsAny <int>())).ReturnsAsync(standards);

            _mockSessionService.Setup(c => c.Set(nameof(CertificateSession), It.IsAny <object>()))
            .Callback <string, object>((key, session) =>
            {
                if (key == nameof(CertificateSession) && session is CertificateSession)
                {
                    setSession = (CertificateSession)session;
                }
            });

            var result = await _certificateController.Start(model) as RedirectToActionResult;

            _mockCertificateApiClient.Verify(s => s.Start(It.Is <StartCertificateRequest>(
                                                              m => m.StandardCode == model.StdCode &&
                                                              m.Uln == model.Uln &&
                                                              m.Username == Username &&
                                                              m.UkPrn == Ukprn)));

            setSession.CertificateId.Should().Be(CertificateId);
            setSession.Uln.Should().Be(model.Uln);
            setSession.StandardCode.Should().Be(model.StdCode);
            setSession.Options.Should().BeEmpty();
            setSession.Versions.Should().BeEquivalentTo(Mapper.Map <List <StandardVersionViewModel> >(standards));

            result.ControllerName.Should().Be("CertificateVersion");
            result.ActionName.Should().Be("Version");
        }