public int Handle(ISellerApplication application) { if (application == null) { throw new ArgumentNullException(nameof(application)); } if (application.Product is BusinessLoans product) { var result = _businessLoansService.SubmitApplicationFor(new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, new LoansRequest { InterestRatePerAnnum = product.InterestRatePerAnnum, LoanAmount = product.LoanAmount }); return((result.Success) ? result.ApplicationId ?? -1 : -1); } throw new InvalidOperationException(); }
public void SubmitApplicationFor_BusinessLoans_CallsBusinessLoansService() { // **Arrange** BusinessLoan product = _fixture.Build <BusinessLoan>().Create(); SellerCompanyData companyData = _fixture.Build <SellerCompanyData>().Create(); SellerApplication <BusinessLoan> application = _fixture.Build <SellerApplication <BusinessLoan> >() .With(a => a.Product, product) .With(a => a.CompanyData, companyData) .Create(); loans.SubmitApplicationFor( Arg.Is <CompanyDataRequest>(x => x.DirectorName == companyData.DirectorName && x.CompanyNumber == companyData.Number && x.CompanyName == companyData.Name && x.CompanyFounded == companyData.Founded), Arg.Is <LoansRequest>(y => y.InterestRatePerAnnum == product.InterestRatePerAnnum && y.LoanAmount == product.LoanAmount)) .Returns(new TestApplicationResult(10, true, new List <string>())); // **Act** int result = _service.SubmitApplicationFor(application); // **Assert** loans.Received(1).SubmitApplicationFor(Arg.Is <CompanyDataRequest>(x => x.DirectorName == companyData.DirectorName && x.CompanyNumber == companyData.Number && x.CompanyName == companyData.Name && x.CompanyFounded == companyData.Founded), Arg.Is <LoansRequest>(y => y.InterestRatePerAnnum == product.InterestRatePerAnnum && y.LoanAmount == product.LoanAmount)); Assert.Equal(10, result); }
public int SubmitApplicationFor(ISellerApplication application) { // Missing input is not null validation here since in my opinion // it has to be delegated to a framework like FluentValidation // and be applied in Startup class so that we could do it automatically // Cons: Validator has to be created for each Request to be validated if (!(application.Product is BusinessLoans loans)) { throw new InvalidOperationException( $"{nameof(BusinessLoansApplicationHandler)} " + $"handles {nameof(BusinessLoans)} product only, " + $"but {application.Product.GetType().Name} was passed"); } var result = _businessLoansService.SubmitApplicationFor(new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, new LoansRequest { InterestRatePerAnnum = loans.InterestRatePerAnnum, LoanAmount = loans.LoanAmount }); // I don't like the concept of returning numeric result. It is not informative and should be made object return((result.Success) ? result.ApplicationId ?? -1 : -1); }
public void Init() { _selectInvoiceService = A.Fake <ISelectInvoiceService>(); _confidentialInvoiceService = A.Fake <IConfidentialInvoiceService>(); _businessLoansService = A.Fake <IBusinessLoansService>(); _productApplicationService = new ProductApplicationService( _selectInvoiceService, _confidentialInvoiceService, _businessLoansService); A.CallTo(() => _selectInvoiceService.SubmitApplicationFor( A <string> ._, A <decimal> ._, A <decimal> ._)).Returns(codeOfSuccessfulAnswerFromService); A.CallTo( () => _confidentialInvoiceService.SubmitApplicationFor( A <CompanyDataRequest> ._, A <decimal> ._, A <decimal> ._, A <decimal> ._)).Returns(CreateSuccessApplicationResult()); A.CallTo( () => _businessLoansService.SubmitApplicationFor( A <CompanyDataRequest> ._, A <LoansRequest> ._)) .Returns(CreateSuccessApplicationResult()); }
private int SubmitForBusinessLoans(ISellerApplication application) { var result = _businessLoansService.SubmitApplicationFor( CompanyDataRequestFactory.Create(application.CompanyData), LoansRequestFactory.Create(application.Product as BusinessLoans)); return(result.ApplicationId ?? FailedStatus); }
public async Task <ServiceResult> RunAsync(ISellerApplication application) { var loans = application.Product as BusinessLoans; var result = /*await*/ service.SubmitApplicationFor( application.CompanyData.ToRequest(), loans.ToRequest()); return(new ServiceResult(result.Success ? ProceedStatus.Ready : ProceedStatus.Error, result)); }
/// <summary> /// Handle applications for business loans. /// </summary> /// <param name="application">Applicaiton.</param> /// <returns>Result id of the applicaiton or a fails status.</returns> public int SubmitApplicationFor(ISellerApplication <BusinessLoan> application) { IApplicationResult result = _businessLoansService .SubmitApplicationFor( MappingHelper.SellerCompanyDataToCompanyDataRequest(application.CompanyData), MappingHelper.ToLoanRequest(application.Product)); return(ReturnResult(result)); }
private int SubmitApplicationForBusinessLoans(ISellerApplication application, BusinessLoans loans) { var result = _businessLoansService.SubmitApplicationFor( _sellerApplicationMapper.MapToCompanyDataRequest(application), _businessLoanMapper.MapToLoanRequest(loans) ); return(_applicationResultMapper.MapToResultCode(result)); }
public override IApplicationServiceWorker Submit() { var product = (BusinessLoans)Application.Product; ApplicationResult = _businessLoansService.SubmitApplicationFor( CompanyDataRequestMapping.MapFromSellerCompanyData(Application.CompanyData), LoansRequestMapping.MapFromLoansProduct(product)); return(this); }
/// <summary> /// Submitting application for Business Loans. /// </summary> /// <param name="application"></param> /// <returns></returns> public IApplicationResult SubmitApplicationForBusinessLoans(BusinessLoansApplication application) { return(_businessLoansService.SubmitApplicationFor( SetCompanyDataRequest(application), new LoansRequest { InterestRatePerAnnum = application.BusinessLoans.InterestRatePerAnnum, LoanAmount = application.BusinessLoans.LoanAmount })); }
public int SubmitApplication(ISellerApplication application) { var loans = ValidateArgument <BusinessLoans>(application); var result = _businessLoansService.SubmitApplicationFor(_companyDataMapper.MapToRequest(application.CompanyData), new LoansRequest { InterestRatePerAnnum = loans.InterestRatePerAnnum, LoanAmount = loans.LoanAmount }); return(GetResult(result)); }
private int CallBusinessLoansService(ISellerCompanyData companyData, BusinessLoans loans) { var companyDataRequest = GetCompanyDataRequest(companyData); var result = _businessLoansService.SubmitApplicationFor( companyDataRequest, new LoansRequest { InterestRatePerAnnum = loans.InterestRatePerAnnum, LoanAmount = loans.LoanAmount }); return(ProcessApplicationResult(result)); }
protected override IApplicationResult SubmitWithResult(ISellerApplication application) { if (!(application.Product is BusinessLoans loans)) { throw new InvalidOperationException(GetErrorMessage(typeof(BusinessLoans), application.Product.GetType())); } return(_businessLoansService.SubmitApplicationFor(application.CompanyData.ToCompanyDataRequest(), new LoansRequest { InterestRatePerAnnum = loans.InterestRatePerAnnum, LoanAmount = loans.LoanAmount })); }
/// <summary> /// /// </summary> /// <param name="companyData"></param> /// <returns></returns> public int SubmitApplication(ISellerCompanyData companyData) { using (IKernel kernel = new StandardKernel(new NinjectBindings())) { IMapper mapper = kernel.Get <IMapper>(); var companyDataRequest = mapper.Map <ISellerCompanyData, CompanyDataRequest>(companyData); var loansRequest = mapper.Map <IBusinessLoansProduct, LoansRequest>(_businessLoansProduct); var result = _businessLoansService.SubmitApplicationFor(companyDataRequest, loansRequest); return((result.Success) ? result.ApplicationId ?? -1 : -1); } }
public ServiceResult SubmitApplicationFor(ISellerApplication application) { var result = _businessLoansService.SubmitApplicationFor(new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, new LoansRequest { InterestRatePerAnnum = Product.InterestRatePerAnnum, LoanAmount = Product.LoanAmount }); return(new ServiceResult(result)); }
public void SubmitApplicationFor_ShouldCallBusinessLoansService_WhenGetBusinessLoansProduct() { var sellerApplication = new SellerApplication { Product = _fixture.Build <BusinessLoans>().Create(), CompanyData = CreateCompanyData() }; _productApplicationService.SubmitApplicationFor(sellerApplication); A.CallTo( () => _businessLoansService.SubmitApplicationFor( A <CompanyDataRequest> ._, A <LoansRequest> ._)) .MustHaveHappened(); }
public int SubmitApplication(ISellerApplication application) { var result = _businessLoansService.SubmitApplicationFor(new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, new LoansRequest { InterestRatePerAnnum = _interestRatePerAnnum, LoanAmount = _loanAmount }); return((result.Success) ? result.ApplicationId ?? -1 : -1); }
public int Execute(ISellerApplication application) { var loans = application.Product as BusinessLoans; if (application.CompanyData == null || loans != null) { return(Globals.NulResult); } var result = _businessLoansService.SubmitApplicationFor( application.CompanyData.FromCompanyData(), new LoansRequest { InterestRatePerAnnum = loans.InterestRatePerAnnum, LoanAmount = loans.LoanAmount }); return(result.Success ? result.ApplicationId ?? -1 : -1); }
private int SubmitBusinessLoanRequest(ISellerCompanyData companyData, BusinessLoans loan) { var companyDataRequest = CreateCompanyDataRequest(companyData); var loanApplication = new LoansRequest { InterestRatePerAnnum = loan.InterestRatePerAnnum, LoanAmount = loan.LoanAmount }; var result = _businessLoansService.SubmitApplicationFor(companyDataRequest, loanApplication); if (!result.Success) { return(-1); } return(result.ApplicationId ?? -1); }
public int ProcessProduct() { var loans = application.Product as BusinessLoans; var result = service.SubmitApplicationFor( new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, new LoansRequest { InterestRatePerAnnum = loans.InterestRatePerAnnum, LoanAmount = loans.LoanAmount } ); return((result.Success) ? result.ApplicationId ?? -1 : -1); }
public bool IsSubmittedApplicationForBusinessLoansSuccess( BusinessLoans product, ISellerApplication application) { if (application?.CompanyData == null || application.Product == null || product == null) { return(false); } var result = _businessLoansService.SubmitApplicationFor(new CompanyDataRequestModel { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, new LoansRequestModel { InterestRatePerAnnum = product.InterestRatePerAnnum, LoanAmount = product.LoanAmount }); return(result.Success && result.ApplicationId.HasValue); }
public int SubmitApplicationFor(ISellerApplication application) { if (application.Product is SelectiveInvoiceDiscount sid) { return(_selectInvoiceService.SubmitApplicationFor(application.CompanyData.Number.ToString(), sid.InvoiceAmount, sid.AdvancePercentage)); } if (application.Product is ConfidentialInvoiceDiscount cid) { var result = _confidentialInvoiceWebService.SubmitApplicationFor( new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate); return((result.Success) ? result.ApplicationId ?? -1 : -1); } if (application.Product is BusinessLoans loans) { var result = _businessLoansService.SubmitApplicationFor(new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, new LoansRequest { InterestRatePerAnnum = loans.InterestRatePerAnnum, LoanAmount = loans.LoanAmount }); return((result.Success) ? result.ApplicationId ?? -1 : -1); } throw new InvalidOperationException(); }
public int SubmitApplicationFor(ISellerApplication application) { //2. No null checks for application and the product/company data within being null. if (application == null || application.Product == null || application.CompanyData == null) { throw new ArgumentNullException(); } try { var applicationSuccess = 0; if (application.Product is SelectiveInvoiceDiscount sid) { applicationSuccess = _selectInvoiceService.SubmitApplicationFor(application.CompanyData.Number.ToString(), sid.InvoiceAmount, sid.AdvancePercentage); //3. disposing objects when done using them sid = null; return(applicationSuccess); } if (application.Product is ConfidentialInvoiceDiscount cid) { var result = _confidentialInvoiceWebService.SubmitApplicationFor( new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate); //4. The outcome from the services IApplicationResult should be checked for Null before accessing any properties. applicationSuccess = result != null ? (result.Success) ? result.ApplicationId ?? -1 : -1 : -1; //3. disposing objects when done using them cid = null; return(applicationSuccess); } if (application.Product is BusinessLoans loans) { var result = _businessLoansService.SubmitApplicationFor(new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, new LoansRequest { InterestRatePerAnnum = loans.InterestRatePerAnnum, LoanAmount = loans.LoanAmount }); //4. The outcome from the services IApplicationResult should be checked for Null before accessing any properties. applicationSuccess = result != null ? (result.Success) ? result.ApplicationId ?? -1 : -1 : -1; //3. disposing objects when done using them loans = null; return(applicationSuccess); } } catch { //1. exception handling to gracefully handle any errors from the services being called. //2. also takes care of the scenario where the service variable is null throw new Exception("Error while submitting the application"); } throw new InvalidOperationException(); }