Exemplo n.º 1
0
            public InjectionTestCase(Guid applyingContactId,
                                     Guid organisationId, string endPointAssessorOrganisationId, int standardCode, DateTime effectiveFrom, string deliveryAreas,
                                     bool isOrganisationStandardTaken, string epaoStandardId, string warningMessage)
            {
                var warningMessages = new List <string>();

                if (!string.IsNullOrEmpty(warningMessage))
                {
                    warningMessages.Add(warningMessage);
                }

                IsOrganisationStandardTaken = isOrganisationStandardTaken;

                var response = new CreateOrganisationStandardFromApplyResponse
                {
                    WarningMessages = warningMessages,
                    EpaoStandardId  = epaoStandardId
                };

                Command = new CreateOrganisationStandardCommand
                {
                    OrganisationId = organisationId,
                    EndPointAssessorOrganisationId = endPointAssessorOrganisationId,
                    StandardCode      = standardCode,
                    EffectiveFrom     = DateTime.Parse(effectiveFrom.ToString()),
                    DeliveryAreas     = deliveryAreas?.Split(",").ToList(),
                    ApplyingContactId = applyingContactId,
                };
                ExpectedResponse = response;
            }
        private async Task <List <int> > MapCommandToDeliveryAreas(CreateOrganisationStandardCommand command)
        {
            if (command.DeliveryAreas != null)
            {
                var areas = await _apiClient.GetDeliveryAreas();

                return(areas.Where(a => command.DeliveryAreas.Contains(a.Area)).Select(a => a.Id).ToList());
            }

            return(new List <int>());
        }
        public void WhenGatheringAnswersForAnOrganisationStandard(StandardCommandTest commandTestSetup)
        {
            var expectedCommand = new CreateOrganisationStandardCommand
            {
                OrganisationId = commandTestSetup.OrganisationId,
                EndPointAssessorOrganisationId = commandTestSetup.OrganisationName,
                StandardCode      = commandTestSetup.StandardCode,
                EffectiveFrom     = commandTestSetup.EffectiveFrom,
                DeliveryAreas     = commandTestSetup.DeliveryAreas,
                ApplyingContactId = commandTestSetup.CreatedBy,
            };

            var applicationData = new Dictionary <string, object>
            {
                ["effective_from"] = commandTestSetup.EffectiveFrom,
                ["delivery_areas"] = commandTestSetup.DeliveryAreasString
            };

            var applicationOrganisation = new Organisation
            {
                Id = commandTestSetup.OrganisationId,
                EndPointAssessorName           = commandTestSetup.OrganisationName,
                EndPointAssessorOrganisationId = commandTestSetup.OrganisationName
            };

            var application = new ApplicationResponse
            {
                Id             = _applicationId,
                ApplicationId  = _applicationId,
                CreatedBy      = commandTestSetup.CreatedBy.ToString(),
                OrganisationId = applicationOrganisation.Id,
                StandardCode   = commandTestSetup.StandardCode
            };

            var applicationContact = new Contact {
                Id = commandTestSetup.CreatedBy, SignInId = Guid.Empty, FamilyName = "", GivenNames = "", Email = ""
            };

            _mockApplicationApiClient.Setup(x => x.GetApplication(application.Id)).ReturnsAsync(application);
            _mockQnaApiClient.Setup(x => x.GetApplicationDataDictionary(application.ApplicationId)).ReturnsAsync(applicationData);
            _mockApiClient.Setup(x => x.GetOrganisation(application.OrganisationId)).ReturnsAsync(applicationOrganisation);
            _mockApiClient.Setup(x => x.GetOrganisationContacts(application.OrganisationId)).ReturnsAsync(new List <Contact> {
                applicationContact
            });

            var actualCommand = _answerService.GatherAnswersForOrganisationStandardForApplication(_applicationId).Result;

            Assert.AreEqual(JsonConvert.SerializeObject(expectedCommand), JsonConvert.SerializeObject(actualCommand));
        }
Exemplo n.º 4
0
        public async Task <CreateOrganisationStandardCommand> GatherAnswersForOrganisationStandardForApplication(Guid applicationId)
        {
            var application = await _applyApiClient.GetApplication(applicationId);

            var applicationData = await _qnaApiClient.GetApplicationDataDictionary(application?.ApplicationId ?? Guid.Empty);

            var organisation = await _apiApiClient.GetOrganisation(application?.OrganisationId ?? Guid.Empty);

            var organisationContacts = await _apiApiClient.GetOrganisationContacts(organisation?.Id ?? Guid.Empty);

            var applyingContact = organisationContacts?.FirstOrDefault(c => c.Id.ToString().Equals(application?.CreatedBy, StringComparison.InvariantCultureIgnoreCase));

            if (application is null || applicationData is null || organisation is null || applyingContact is null)
            {
                return(new CreateOrganisationStandardCommand());
            }

            var effectiveFrom = DateTime.UtcNow.Date;

            if (DateTime.TryParse(GetAnswer(applicationData, "effective_from"), out var effectiveFromDate))
            {
                effectiveFrom = effectiveFromDate.Date;
            }

            var deliveryAreas = GetAnswer(applicationData, "delivery_areas");

            var command = new CreateOrganisationStandardCommand
                          (
                organisation.Id,
                organisation.EndPointAssessorOrganisationId,
                application.StandardCode ?? 0,
                application.ApplyData?.Apply?.StandardReference,
                application.ApplyData?.Apply?.Versions,
                effectiveFrom,
                deliveryAreas?.Split(',').ToList(),
                applyingContact.Id,
                application.StandardApplicationType);

            return(command);
        }
        private async Task <CreateEpaOrganisationStandardRequest> MapCommandToOrganisationStandardRequest(CreateOrganisationStandardCommand command)
        {
            var organisationId = _cleanser.CleanseStringForSpecialCharacters(command.EndPointAssessorOrganisationId);

            return(new CreateEpaOrganisationStandardRequest
            {
                OrganisationId = organisationId,
                StandardCode = command.StandardCode,
                StandardReference = command.StandardReference,
                StandardVersions = command.StandardVersions,
                DateStandardApprovedOnRegister = command.DateStandardApprovedOnRegister,
                EffectiveFrom = command.EffectiveFrom,
                ContactId = command.ApplyingContactId.ToString(),
                DeliveryAreas = await MapCommandToDeliveryAreas(command),
                DeliveryAreasComments = string.Empty,
                StandardApplicationType = command.StandardApplicationType
            });
        }
        public async Task <CreateOrganisationStandardFromApplyResponse> InjectApplyOrganisationStandardDetailsIntoRegister(CreateOrganisationStandardCommand command)
        {
            var response = new CreateOrganisationStandardFromApplyResponse {
                WarningMessages = new List <string>()
            };

            var warningMessages = new List <string>();

            // Organisation checks ////////////////////////////////
            RaiseWarningIfNoEpaoId(command.EndPointAssessorOrganisationId, warningMessages);
            RaiseWarningIfEpaoIdIsInvalid(command.EndPointAssessorOrganisationId, warningMessages);

            // Standard checks ///////////////////////////////////
            RaiseWarningIfStandardCodeIsInvalid(command.StandardCode, warningMessages);

            var standard = await MapCommandToOrganisationStandardRequest(command);

            // If we passed basic pre-checks; then validate fully
            if (warningMessages.Count == 0)
            {
                var validationResponse = await _assessorValidationService.ValidateNewOrganisationStandardRequest(standard);

                if (!validationResponse.IsValid)
                {
                    var validationResponseErrors = validationResponse.Errors.Select(err => err.ErrorMessage);
                    warningMessages.AddRange(validationResponseErrors);
                    _logger.LogInformation($"Inject standard failed on Validation Service. OrganisationId: {command.OrganisationId} - Warnings:  {string.Join(",", validationResponseErrors)}");
                }
            }
            else
            {
                _logger.LogInformation($"Inject standard failed at pre-check. OrganisationId: {command.OrganisationId} - Warnings:  {string.Join(",", warningMessages)}");
            }

            // If everything has checked out; approve the standard
            if (warningMessages.Count == 0)
            {
                _logger.LogInformation("Injecting new standard into register");
                response.EpaoStandardId = await _apiClient.CreateEpaOrganisationStandard(standard);
            }
            else
            {
                _logger.LogWarning($"Cannot inject standard details into register at this time. OrganisationId: {command.OrganisationId} - Warnings:  {string.Join(", ", warningMessages)}");
            }

            response.WarningMessages = warningMessages;

            return(response);
        }