示例#1
0
        [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);
        }
示例#2
0
        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);
        }