SubmitApplicationFor_ShouldCallConfidentialInvoiceService_WhenGetConfidentialInvoiceDiscountProduct() { var sellerApplication = CreateSellerApplicationWithConfidentialInvoiceDiscount(); _productApplicationService.SubmitApplicationFor(sellerApplication); A.CallTo( () => _confidentialInvoiceService.SubmitApplicationFor( A <CompanyDataRequest> ._, A <decimal> ._, A <decimal> ._, A <decimal> ._)) .MustHaveHappened(); }
public void SubmitApplicationFor_ConfidentialInvoiceDiscount_CallsConfidentialInvoiceService() { // **Arrange** ConfidentialInvoiceDiscount cidProduct = _fixture.Build <ConfidentialInvoiceDiscount>().Create(); SellerCompanyData companyData = _fixture.Build <SellerCompanyData>().Create(); SellerApplication <ConfidentialInvoiceDiscount> application = _fixture.Build <SellerApplication <ConfidentialInvoiceDiscount> >() .With(a => a.Product, cidProduct) .With(a => a.CompanyData, companyData) .Create(); cid.SubmitApplicationFor( Arg.Is <CompanyDataRequest>(x => x.DirectorName == companyData.DirectorName && x.CompanyNumber == companyData.Number && x.CompanyName == companyData.Name && x.CompanyFounded == companyData.Founded), cidProduct.TotalLedgerNetworth, cidProduct.AdvancePercentage, cidProduct.VatRate) .Returns(new TestApplicationResult(10, true, new List <string>())); // **Act** int result = _service.SubmitApplicationFor(application); // **Assert** cid.Received(1).SubmitApplicationFor(Arg.Is <CompanyDataRequest>(x => x.DirectorName == companyData.DirectorName && x.CompanyNumber == companyData.Number && x.CompanyName == companyData.Name && x.CompanyFounded == companyData.Founded), cidProduct.TotalLedgerNetworth, cidProduct.AdvancePercentage, cidProduct.VatRate); 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 ConfidentialInvoiceDiscount cid)) { throw new InvalidOperationException( $"{nameof(ConfidentialInvoiceApplicationHandler)} " + $"handles {nameof(ConfidentialInvoiceDiscount)} product only, " + $"but {application.Product.GetType().Name} was passed"); } var result = _confidentialInvoiceService.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); // 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()); }
/// <summary> /// Submitting application for Confidential Invoice Discount. /// </summary> /// <param name="application"></param> /// <returns></returns> public IApplicationResult SubmitApplicationForConfidentialInvoiceDiscount(ConfidentialInvoiceDiscountApplication application) { return(_confidentialInvoiceWebService.SubmitApplicationFor( SetCompanyDataRequest(application), application.ConfidentialInvoiceDiscount.TotalLedgerNetworth, application.ConfidentialInvoiceDiscount.AdvancePercentage, application.ConfidentialInvoiceDiscount.VatRate)); }
/// <summary> /// Handle applications for confidential invoice discounts. /// </summary> /// <param name="application">Applicaiton.</param> /// <returns>Result id of the applicaiton or a fails status.</returns> public int SubmitApplicationFor(ISellerApplication <ConfidentialInvoiceDiscount> application) { IApplicationResult result = _confidentialInvoiceWebService.SubmitApplicationFor( MappingHelper.SellerCompanyDataToCompanyDataRequest(application.CompanyData), application.Product.TotalLedgerNetworth, application.Product.AdvancePercentage, application.Product.VatRate); return(ReturnResult(result)); }
public int SubmitApplication(ISellerApplication application) { var cid = ValidateArgument <ConfidentialInvoiceDiscount>(application); var result = _confidentialInvoiceService.SubmitApplicationFor(_companyDataMapper.MapToRequest(application.CompanyData), cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate); return(GetResult(result)); }
private int SubmitForConfidentialInvoiceDiscount(ISellerApplication application) { var product = application.Product as ConfidentialInvoiceDiscount; var result = _confidentialInvoiceWebService.SubmitApplicationFor( CompanyDataRequestFactory.Create(application.CompanyData), product.TotalLedgerNetworth, product.AdvancePercentage, product.VatRate); return(result.ApplicationId ?? FailedStatus); }
private int SubmitApplicationForConfidentialInvoiceDiscount(ISellerApplication application, ConfidentialInvoiceDiscount cid) { var result = _confidentialInvoiceWebService.SubmitApplicationFor( _sellerApplicationMapper.MapToCompanyDataRequest(application), cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate ); return(_applicationResultMapper.MapToResultCode(result)); }
public async Task <ServiceResult> RunAsync(ISellerApplication application) { var cid = application.Product as ConfidentialInvoiceDiscount; var result = /*await*/ service.SubmitApplicationFor( application.CompanyData.ToRequest(), cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate); return(new ServiceResult(result.Success ? ProceedStatus.Ready : ProceedStatus.Error, result)); }
private int CallConfidentialInvoiceWebService(ISellerCompanyData companyData, ConfidentialInvoiceDiscount cid) { var companyDataRequest = GetCompanyDataRequest(companyData); var result = _confidentialInvoiceWebService.SubmitApplicationFor( companyDataRequest, cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate); return(ProcessApplicationResult(result)); }
public override IApplicationServiceWorker Submit() { var product = (ConfidentialInvoiceDiscount)Application.Product; ApplicationResult = _confidentialInvoiceService.SubmitApplicationFor( CompanyDataRequestMapping.MapFromSellerCompanyData(Application.CompanyData), product.TotalLedgerNetworth, product.AdvancePercentage, product.VatRate); return(this); }
public int SubmitApplication(ISellerApplication application) { var result = _confidentialInvoiceWebService.SubmitApplicationFor( new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, _totalLedgerNetworth, _advancePercentage, _vatRate); return((result.Success) ? result.ApplicationId ?? -1 : -1); }
/// <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 result = _confidentialInvoiceService.SubmitApplicationFor(companyDataRequest, _confidentialInvoiceDiscountProduct.TotalLedgerNetworth, _confidentialInvoiceDiscountProduct.AdvancePercentage, _confidentialInvoiceDiscountProduct.VatRate); return((result.Success) ? result.ApplicationId ?? -1 : -1); } }
/// <inheritdoc /> public int SubmitForConfidentialInvoiceDiscount(ISellerCompanyData companyData, ConfidentialInvoiceDiscount cid) { var result = _confidentialInvoiceWebService.SubmitApplicationFor( new CompanyDataRequest { CompanyFounded = companyData.Founded, CompanyNumber = companyData.Number, CompanyName = companyData.Name, DirectorName = companyData.DirectorName }, cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate); return((result.Success) ? result.ApplicationId ?? -1 : -1); }
/// <summary> /// Returning ServiceResult instead of int -> no backwards compatibility, doing that on purpose. It's something (more information) for something (backwards compatibility) :) /// </summary> /// <param name="application"></param> /// <returns></returns> public ServiceResult SubmitApplicationFor(ISellerApplication application) { var result = _confidentialInvoiceWebService.SubmitApplicationFor( new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, Product.TotalLedgerNetworth, Product.AdvancePercentage, Product.VatRate); return(new ServiceResult(result)); }
protected override IApplicationResult SubmitWithResult(ISellerApplication application) { if (!(application.Product is ConfidentialInvoiceDiscount cid)) { throw new InvalidOperationException(GetErrorMessage(typeof(ConfidentialInvoiceDiscount), application.Product.GetType())); } return(_confidentialInvoiceWebService.SubmitApplicationFor( application.CompanyData.ToCompanyDataRequest(), cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate)); }
private int SubmitCompanyDataRequest(ISellerCompanyData application, ConfidentialInvoiceDiscount cid) { var companyDataRequest = CreateCompanyDataRequest(application); var result = _confidentialInvoiceWebService.SubmitApplicationFor( companyDataRequest, cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate); if (!result.Success) { return(-1); } return(result.ApplicationId ?? -1); }
public int Execute(ISellerApplication application) { var product = application.Product as ConfidentialInvoiceDiscount; var result = _confidentialInvoiceWebService.SubmitApplicationFor( new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, product.TotalLedgerNetworth, product.AdvancePercentage, product.VatRate); return((result.Success) ? result.ApplicationId ?? -1 : -1); }
public int Execute(ISellerApplication application) { var cid = application.Product as ConfidentialInvoiceDiscount; if (application.CompanyData == null || cid == null) { return(Globals.NulResult); } var result = _confidentialInvoiceWebService.SubmitApplicationFor( application.CompanyData.FromCompanyData(), cid.TotalLedgerNetworth, cid.AdvancePercentage, cid.VatRate); return(result.Success ? result.ApplicationId ?? -1 : -1); }
public int ProcessProduct() { var product = (ConfidentialInvoiceDiscount)application.Product; var result = service.SubmitApplicationFor( new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, product.TotalLedgerNetworth, product.AdvancePercentage, vatRate ); return((result.Success) ? result.ApplicationId ?? -1 : -1); }
public bool IsSubmittedApplicationForConfidentialInvoiceDiscountSuccess( ConfidentialInvoiceDiscountRequestModel product, ISellerApplication application) { if (application.CompanyData == null || product == null) { return(false); } var result = _confidentialInvoiceWebService.SubmitApplicationFor( new CompanyDataRequestModel { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, product); 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 Handle(ISellerApplication application) { if (application == null) { throw new ArgumentNullException(nameof(application)); } if (application.Product is ConfidentialInvoiceDiscount product) { var result = _confidentialInvoiceWebService.SubmitApplicationFor( new CompanyDataRequest { CompanyFounded = application.CompanyData.Founded, CompanyNumber = application.CompanyData.Number, CompanyName = application.CompanyData.Name, DirectorName = application.CompanyData.DirectorName }, product.TotalLedgerNetworth, product.AdvancePercentage, product.VatRate); 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(); }