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}"); }
public void Reject() { if (Status != LoanApplicationStatus.New) { throw new InvalidOperationException("wrong application status"); } Status = LoanApplicationStatus.Rejected; this.RaiseEvent(new LoanApplicationRejected { ApplicationId = Id }); }
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 }); }
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); }
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; }
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; } }
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}"); }
public LoanApplicationAssert IsInStatus(LoanApplicationStatus expectedStaus) { Assert.Equal(expectedStaus, loanApplication.Status); return(this); }
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); } } }