[Fact] // async Task<string> CreateAsync(string recipientId, OwnerTransactionRequestsCreateInputServiceModel model) public async void CreateAsync_WithGivenRecipientIdAndRequestModel_ShouldCreateTransactionRequest() { // Arrange var id = 1; var country = CountryCreator.Create(); var city = CityCreator.Create(country.Id); var tenant = UserCreator.Create("Shunko", "Svinski", "shunkata", "*****@*****.**"); var owner = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**"); var home = HomeCreator.CreateOwnerHome(owner.Id, city.Id); var contract = ContractCreator.CreateRentalContract(id); var rental = RentalCreator.Create(id, country, city, tenant, home, contract); await this.Context.Countries.AddAsync(country); await this.Context.Cities.AddAsync(city); await this.Context.Users.AddRangeAsync(owner, tenant); await this.Context.Homes.AddAsync(home); await this.Context.Contracts.AddAsync(contract); await this.Context.Rentals.AddRangeAsync(rental); await this.Context.SaveChangesAsync(); var recipientId = Guid.NewGuid().ToString(); var model = new OwnerTransactionRequestsCreateInputServiceModel { Id = Guid.NewGuid().ToString(), Reason = Guid.NewGuid().ToString(), RecurringSchedule = RecurringScheduleType.Monthly, IsRecurring = true, RentalId = id, }; var service = new OwnerTransactionRequestService(this.Context); // Act var result = await service.CreateAsync(owner.Id, model); var expected = await this.Context.TransactionRequests .Where(x => x.RecipientId == owner.Id) .FirstOrDefaultAsync(); // Assert result.Should().BeOfType <string>(); result.Should().Equals(expected.Id); }
public async Task <IActionResult> CreateFromAsync(OwnerTransactionRequestsCreateInputModel model) { var userId = this.userManager.GetUserId(this.User); if (this.ModelState.IsValid) { var modelForDb = new OwnerTransactionRequestsCreateInputServiceModel { Reason = model.Reason, RecurringSchedule = model.RecurringSchedule, IsRecurring = model.IsRecurring, RentalId = model.RentalId, }; var isCreatedId = await this.transactionRequestService.CreateAsync(userId, modelForDb); if (isCreatedId == null) { var rentals = await this.rentalService.GetTransactionRentalsAsync(userId); var viewModel = new OwnerTransactionRequestsCreateInputModel { RentalsList = rentals, }; 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); 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> CreateAsync( string recipientId, OwnerTransactionRequestsCreateInputServiceModel model) { var rental = await this.context.Rentals .Include(r => r.Tenant) .Include(r => r.Home) .Where(r => r.Id == model.RentalId) .FirstOrDefaultAsync(); var senderId = rental.TenantId; var amount = rental.Home.Price; // at this stage of the app development, there is only one recurring payment- for the tenant of the home var transactionRequestFromDb = rental.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, RentalId = model.RentalId, 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); }