public async Task <IActionResult> CreateToAsync(OwnerTransactionPaymentsCreateInputModel model) { var userId = this.userManager.GetUserId(this.User); if (this.ModelState.IsValid) { var modelForDb = new OwnerTransactionToRequestsCreateInputServiceModel { Reason = model.Reason, Amount = model.Amount, RecurringSchedule = model.RecurringSchedule, IsRecurring = model.IsRecurring, HomeId = model.HomeId, }; var isCreatedId = await this.transactionRequestService.CreateToAsync(userId, modelForDb); if (isCreatedId == null) { var managedHomes = await this.listingService.GetManagedHomesAsync(userId); var viewModel = new OwnerTransactionPaymentsCreateInputModel { ManagedHomesList = managedHomes, }; return(this.View(viewModel)); } // TEST the service. Put Breakpoint on Line BELLOW and when hit, press F11 // await this.paymentService.AddPaymentRequestToUserAsync( // userId, // isCreatedId); var schedule = model.RecurringSchedule; var cronType = this.GetCronFromRecurringType(schedule); // pending payment will appear in the payments dashboard of the user RecurringJob.AddOrUpdate( isCreatedId, () => this.paymentService.AddPaymentRequestToUserAsync( userId, isCreatedId), cronType); return(this.RedirectToAction("Index", "TransactionRequests", new { area = ManagementArea }) .WithSuccess(string.Empty, RecordCreatedSuccessfully)); } return(this.View(model)); }
public async Task <string> CreateToAsync(string senderId, OwnerTransactionToRequestsCreateInputServiceModel model) { var home = await this.context.Homes .Include(h => h.Manager) .Where(h => h.Id == model.HomeId) .FirstOrDefaultAsync(); var recipientId = home.ManagerId; var amount = model.Amount; // at this stage of the app development, there is only one recurring payment- for the manager of the home var transactionRequestFromDb = home.TransactionRequests.FirstOrDefault(t => t.IsRecurring == true); if (transactionRequestFromDb != null) { return(null); } var transactionRequest = new TransactionRequest { Reason = model.Reason, Amount = amount, RecurringSchedule = model.RecurringSchedule, Status = TransactionRequestStatus.Scheduled, IsRecurring = model.IsRecurring, HomeId = home.Id, SenderId = senderId, RecipientId = recipientId, }; await this.context.TransactionRequests.AddAsync(transactionRequest); var result = await this.context.SaveChangesAsync(); if (result == 0) { return(null); } var id = transactionRequest.Id; return(id); }
[Fact] // async Task<string> CreateToAsync(string senderId, OwnerTransactionToRequestsCreateInputServiceModel model) public async void CreateToAsync_WithGivenSenderIdAndRequestModel_ShouldCreateTransactionRequest() { // Arrange var country = CountryCreator.Create(); var city = CityCreator.Create(country.Id); var owner = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**"); var home = HomeCreator.CreateManagedHome(owner.Id, city.Id); await this.Context.Countries.AddAsync(country); await this.Context.Cities.AddAsync(city); await this.Context.Users.AddAsync(owner); await this.Context.Homes.AddAsync(home); await this.Context.SaveChangesAsync(); var recipientId = Guid.NewGuid().ToString(); var model = new OwnerTransactionToRequestsCreateInputServiceModel { Id = Guid.NewGuid().ToString(), Reason = Guid.NewGuid().ToString(), RecurringSchedule = RecurringScheduleType.Monthly, IsRecurring = true, HomeId = home.Id, }; var service = new OwnerTransactionRequestService(this.Context); // Act var result = await service.CreateToAsync(owner.Id, model); var expected = await this.Context.TransactionRequests .Where(x => x.RecipientId == home.ManagerId) .FirstOrDefaultAsync(); // Assert result.Should().BeOfType <string>(); result.Should().Equals(expected.Id); }