コード例 #1
0
        public void ReviewingTransitionStates(string testcaseName, LoanApplicationStatus startingStatus,
                                              LoanApplicationState toState, LoanApplicationState expectedState, LoanApplicationStatus expectedStatus)
        {
            var loanApplicationInfo = TransitionToReviewingState(borrowerRegistration);
            var loanApplicationGuid = loanApplicationInfo.LoanApplicationGuid.ToString();

            // If we're already are at InReviewNeedDecision, then we don't need to do any further transitioning for our stating status.
            if (startingStatus != LoanApplicationStatus.NewAppNeedInitialReview)
            {
                if (!ReviewStatusTransitions(loanApplicationInfo.LoanApplicationGuid, startingStatus))
                {
                    Assert.Fail($"Unable to transition to the desired loan status of {startingStatus.ToString()}...stopping test.");
                }
            }
            log.Info($"We're in the expected status of {startingStatus.ToString()}.  Transitioning to {expectedState}...");

            var stateUpdateResponse = new ResponseObject <EmptyResult>();

            switch (toState)
            {
            case LoanApplicationState.Accepting:
            case LoanApplicationState.Finalizing:
                stateUpdateResponse = loanApplicationClient.SetLoanAppToAccept(loanApplicationGuid);
                break;

            case LoanApplicationState.Expired:
                stateUpdateResponse = loanApplicationClient.SetLoanAppToExpire(loanApplicationGuid);
                break;

            case LoanApplicationState.Declined:
                stateUpdateResponse = loanApplicationStateClient.ChangeStateToDecline(loanApplicationGuid);
                break;

            case LoanApplicationState.Withdrawn:
                stateUpdateResponse = loanApplicationStateClient.ChangeStateToWithdraw(loanApplicationGuid);
                break;

            default:
                Assert.Fail($"{toState.ToString()} is in invalid argument for this test...failing.");
                break;
            }

            Assert.That(stateUpdateResponse.statusCode == HttpStatusCode.OK ||
                        (stateUpdateResponse.statusCode == HttpStatusCode.NoContent),
                        $"We weren't able to successfully run the workflow transition request successfully.  Status code {stateUpdateResponse.statusCode}");
            log.Info($"Checking to see that our loan application in the expected Declined/Declined state/status.");

            coreLoanApplicationStatusClient
            .UpdateStatusByLoanApplication(loanApplicationInfo.LoanApplicationGuid.ToString());
            var statusResponse = coreLoanApplicationStatusClient
                                 .GetStatusByLoanApplication(loanApplicationInfo.LoanApplicationGuid.ToString());

            Assert.That(statusResponse.statusCode == HttpStatusCode.OK, $"We weren't able to get the status of our loanapplication successfully.  Status Code {statusResponse.statusCode.ToString()}");
            Assert.NotNull(statusResponse.content, "We received no content for our status request.");

            ValidateApplicationState(statusResponse.content, expectedState, expectedStatus);
            log.Info($"Validated the successful transition from {startingStatus} to {expectedState}/{expectedStatus} for loan application guid:  {loanApplicationInfo.LoanApplicationGuid}");
        }
コード例 #2
0
ファイル: LoanApplication.cs プロジェクト: SuperCuke/Ozzy
 public void Reject()
 {
     if (Status != LoanApplicationStatus.New)
     {
         throw new InvalidOperationException("wrong application status");
     }
     Status = LoanApplicationStatus.Rejected;
     this.RaiseEvent(new LoanApplicationRejected
     {
         ApplicationId = Id
     });
 }
コード例 #3
0
ファイル: LoanApplication.cs プロジェクト: SuperCuke/Ozzy
        public LoanApplication(string name, string from, string amount, string description) : base(Guid.NewGuid())
        {
            Name        = name;
            From        = from;
            Amount      = amount;
            Description = description;
            Status      = LoanApplicationStatus.New;

            this.RaiseEvent(new LoanApplicationReceived
            {
                ApplicationId = Id,
                Name          = Name,
                From          = From,
                Amount        = Amount,
                Description   = Description
            });
        }
コード例 #4
0
        public async Task <int> UpdateApplicationAsync(LoanApplicationModel loanApplication)
        {
            LoanApplicationStatus appStatus = (LoanApplicationStatus)loanApplication.Status;

            if (appStatus == LoanApplicationStatus.Approved || appStatus == LoanApplicationStatus.Denied)
            {
                return(-1);
            }

            var applicationToUpdate = _mapper.Map <LoanApplication>(loanApplication);
            var updatableProps      = new[] { nameof(LoanApplication.Currency),
                                              nameof(LoanApplication.LoanAmount),
                                              nameof(LoanApplication.Period),
                                              nameof(LoanApplication.Type), };
            bool updated = await _repository.UpdateAsync(applicationToUpdate, updatableProps);

            return(updated ? 1 : 0);
        }
コード例 #5
0
        private LoanApplication(
            string number,
            LoanApplicationStatus status,
            Customer customer,
            Property property,
            Loan loan,
            ScoringResult score,
            Registration registration,
            Decision decision)
        {
            if (string.IsNullOrWhiteSpace(number))
            {
                throw new ArgumentException("Number cannot be null or empty");
            }
            if (customer == null)
            {
                throw new ArgumentException("Customer cannot be null");
            }
            if (property == null)
            {
                throw new ArgumentException("Property cannot be null");
            }
            if (loan == null)
            {
                throw new ArgumentException("Loan cannot be null");
            }
            if (registration == null)
            {
                throw new ArgumentException("Registration cannot be null");
            }

            Id           = new LoanApplicationId(Guid.NewGuid());
            Number       = number;
            Status       = status;
            Score        = score;
            Customer     = customer;
            Property     = property;
            Loan         = loan;
            Registration = registration;
            Decision     = decision;
        }
コード例 #6
0
        public sealed override void ApplyEvent(DomainEvent domainEvent)
        {
            Version++;

            switch (domainEvent)
            {
            case LoanApplicationRegistered applicationRegistered:
                Status          = LoanApplicationStatus.Registered;
                RequestedAmount = applicationRegistered.RequestedAmount;
                break;

            case VisitingAddressRegistered visitingAddressRegistered:
                VisitingAddress = new Address(
                    visitingAddressRegistered.Street,
                    visitingAddressRegistered.Street2,
                    visitingAddressRegistered.PostalCode,
                    visitingAddressRegistered.City,
                    visitingAddressRegistered.Country,
                    visitingAddressRegistered.CareOf);
                break;

            case InvoiceAddressRegistered invoiceAddressRegistered:
                InvoiceAddress = new Address(
                    invoiceAddressRegistered.Street,
                    invoiceAddressRegistered.Street2,
                    invoiceAddressRegistered.PostalCode,
                    invoiceAddressRegistered.City,
                    invoiceAddressRegistered.Country,
                    invoiceAddressRegistered.CareOf);
                break;

            case ApplicationApproved _:
                Status = LoanApplicationStatus.Approved;
                break;

            case ApplicationDenied _:
                Status = LoanApplicationStatus.Denied;
                break;
            }
        }
コード例 #7
0
        public void ReviewingTransitionStatuses(string testcaseName, LoanApplicationStatus startingStatus, LoanApplicationWorkflowAction action, LoanApplicationState expectedState, LoanApplicationStatus expectedStatus, string agentName, AgentRole agentRole)
        {
            var loanApplicationInfo = TransitionToReviewingState(borrowerRegistration);

            // If we're already are at InReviewNeedDecision, then we don't need to do any further transitioning for our stating status.
            if (startingStatus != LoanApplicationStatus.NewAppNeedInitialReview)
            {
                if (!ReviewStatusTransitions(loanApplicationInfo.LoanApplicationGuid, startingStatus))
                {
                    Assert.Fail($"Unable to transition to the desired loan status of {startingStatus.ToString()}...stopping test.");
                }
            }
            log.Info($"We're in the expected status of {startingStatus.ToString()}.  Transitioning to {expectedStatus.ToString()}.");

            //If we provide an agentname, that means we need to add a new agent with the given role to the BCD
            if (!String.IsNullOrEmpty(agentName))
            {
                AssignAgentToLoanApplication((Guid)loanApplicationInfo.LoanApplicationGuid, AgentRole.UWM, "clpuwm");
            }

            var workflowResponse = loanApplicationClient.WorkflowAction(loanApplicationInfo.LoanApplicationGuid.ToString(), action);

            Assert.That(workflowResponse.statusCode == HttpStatusCode.OK, $"We weren't able to successfully run the workflow transition request successfully.  Status code {workflowResponse.statusCode}");
            log.Info($"Checking to see that our loan application in the expected {expectedState}/{expectedStatus} state/status.");

            coreLoanApplicationStatusClient
            .UpdateStatusByLoanApplication(loanApplicationInfo.LoanApplicationGuid.ToString());

            var statusResponse = coreLoanApplicationStatusClient
                                 .GetStatusByLoanApplication(loanApplicationInfo
                                                             .LoanApplicationGuid.ToString());

            Assert.That(statusResponse.statusCode == HttpStatusCode.OK, $"We weren't able to get the status of our loanapplication successfully.  Status Code {statusResponse.statusCode.ToString()}");
            Assert.NotNull(statusResponse.content, "We received no content for our status request.");
            ValidateApplicationState(statusResponse.content, expectedState, expectedStatus);
            log.Info($"Validated the successful transition from {startingStatus} to {expectedStatus} loan application guid:  {loanApplicationInfo.LoanApplicationGuid}");
        }
コード例 #8
0
 public LoanApplicationAssert IsInStatus(LoanApplicationStatus expectedStaus)
 {
     Assert.Equal(expectedStaus, loanApplication.Status);
     return(this);
 }
コード例 #9
0
        public static bool ReviewStatusTransitions(Guid?loanAppInfoGuid, LoanApplicationStatus targetStatus)
        {
            var client = new LoanApplicationClient();

            switch (targetStatus)
            {
            case (LoanApplicationStatus.InReviewNeedDecision):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                break;

            case (LoanApplicationStatus.EscalatedNeedFAReview):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.FA, "clpfa");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.EscalateToFA);
                break;

            case (LoanApplicationStatus.EscalatedNeedFAManagerReview):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.FA, "clpfa");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.EscalateToFA);
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.FAM, "clpfam");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.EscalateToManager);
                break;

            case (LoanApplicationStatus.EscalatedNeedUWManagerReview):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UWM, "clpuwm");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.EscalateToManager);
                break;

            case (LoanApplicationStatus.EditRequestNeedUWReview):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                UpdateLoanApplicationPassStips(loanAppInfoGuid.ToString());
                DispositionOfUploadedFiles(loanAppInfoGuid.ToString(), "Approve");
                SignPromissoryAndFTIL(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Counter);
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Approve);
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                break;

            case (LoanApplicationStatus.ReturnedfromVerbalNeedUWReview):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.FA, "clpfa");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                UpdateLoanApplicationPassStips(loanAppInfoGuid.ToString());
                DispositionOfUploadedFiles(loanAppInfoGuid.ToString());
                SignPromissoryAndFTIL(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Counter);
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Approve);
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Escalate);
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                break;

            case (LoanApplicationStatus.ReturnedfromFundingNeedUWManagerReview):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UWM, "clpuwm");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                UpdateLoanApplicationPassStips(loanAppInfoGuid.ToString());
                DispositionOfUploadedFiles(loanAppInfoGuid.ToString());
                SignPromissoryAndFTIL(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Counter);
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Approve);
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.VerbalQueue);
                VerbalVerification(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.PassVerbal);
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.ReturnToUW);
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.EscalateToManager);
                break;

            case (LoanApplicationStatus.ApprovedPendingNote):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.FA, "clpfa");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                UpdateLoanApplicationPassStips(loanAppInfoGuid.ToString());
                DispositionOfUploadedFiles(loanAppInfoGuid.ToString());
                SignPromissoryAndFTIL(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Approve);
                break;

            case (LoanApplicationStatus.NoteSignedNeedVerbal):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.FA, "clpfa");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                UpdateLoanApplicationPassStips(loanAppInfoGuid.ToString());
                DispositionOfUploadedFiles(loanAppInfoGuid.ToString());
                SignPromissoryAndFTIL(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Counter);
                SignLoanPacket(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.VerbalQueue);
                break;

            case (LoanApplicationStatus.VerbalVerifiedNeedFunding):
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.UW, "clpuw");
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.FA, "clpfa");
                AssignAgentToLoanApplication((Guid)loanAppInfoGuid, AgentRole.FAM, "clpfam");
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.SendToUW);
                UpdateLoanApplicationPassStips(loanAppInfoGuid.ToString());
                DispositionOfUploadedFiles(loanAppInfoGuid.ToString());
                SignPromissoryAndFTIL(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.Counter);
                SignLoanPacket(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.VerbalQueue);
                VerbalVerification(loanAppInfoGuid.ToString());
                client.WorkflowAction(loanAppInfoGuid.ToString(), LoanApplicationWorkflowAction.PassVerbal);
                break;

            default:
                log.Error($"Functionality for LoanApplicationStatus {targetStatus.ToString()} is Not Available for this method");
                return(false);
            }

            var statusClient = new LoanApplicationStatusClient();

            statusClient.UpdateStatusByLoanApplication(loanAppInfoGuid.ToString());
            var statusResponse = statusClient.GetStatusByLoanApplication(loanAppInfoGuid.ToString());

            if (statusResponse.statusCode != HttpStatusCode.OK || statusResponse.content == null)
            {
                log.Error($"Error in checking the response of our status request (null content or invalid statuscode).");
                return(false);
            }
            else
            {
                if (statusResponse.content.LoanApplicationStatus == targetStatus)
                {
                    return(true);
                }
                else
                {
                    log.Error($"Wrong status generated for our request to transition to {targetStatus.ToString()} we received {statusResponse.content.LoanApplicationStatus.ToString()}.");
                    return(false);
                }
            }
        }