示例#1
0
        public void CancelRezervationTest()
        {
            using (var context = new CarRentalDbContext(this.dbContextOptions))
            {
                var dbRezervation = context.Rezervations.First(x => !x.IsPickedUp && !x.IsReturned);

                var clientAccountService = new ClientAccountService(context);
                var rezervationService   = new RezervationService(context, clientAccountService);

                var cancelationFeeRate = 2.00m;

                var isCancelled = rezervationService.CancelRezervation(dbRezervation.RezervationId, cancelationFeeRate);

                Assert.IsTrue(isCancelled);

                var carType = CarTypes.GetCarType((CarTypeEnum)dbRezervation.CarType);

                // Test the actual calculations in the car type class.
                var cancellationFee = carType.CancellationFee * cancelationFeeRate;

                dbRezervation = context.Rezervations.Single(x => x.RezervationId == dbRezervation.RezervationId);
                Assert.IsTrue(dbRezervation.IsCancelled);
                Assert.AreEqual(dbRezervation.CancellationFee, cancellationFee);
                Assert.AreEqual(dbRezervation.CancelationFeeRate, cancelationFeeRate);
            }
        }
示例#2
0
        public PurchaseDTO Pay(int clientId, int purchaseId)
        {
            ClientService.CheckCredentials(clientId);
            Purchase purchase = PurchaseService.FindEntity(purchaseId);

            if (purchase.PayingTime != null)
            {
                throw new AppException("Already payed", 400);
            }
            decimal       amount = purchase.Amount;
            ClientAccount source = ClientService.GetAccount(clientId);

            if (amount > source.Balance)
            {
                throw new AppException("Not enough money", 400);
            }
            TraderAccount target = TraderService.GetAccount(purchase.CommercialLink.TraderId);

            PaymentMonitor.Remove(purchaseId);
            source.Balance     -= amount;
            target.Balance     += amount;
            purchase.PayingTime = DateTime.Now;
            ClientAccountService.Update(source);
            TraderAccountService.Update(target);
            purchase = PurchaseService.Update(purchase);
            return(PurchaseService.EntityToDTO(purchase));
        }
示例#3
0
        public void UpdateClientAccountTest()
        {
            using (var context = new CarRentalDbContext(this.dbContextOptions))
            {
                var service = new ClientAccountService(context);
                ClientAccountModificationParams parameters = new ClientAccountModificationParams
                {
                    ClientId = 1,
                    Email    = "*****@*****.**",
                    FullName = "Update Client",
                    Phone    = "+12345",
                };

                var clientAccountModel = service.Update(parameters);

                Assert.AreEqual(parameters.Email, clientAccountModel.Email);
                Assert.AreEqual(parameters.Phone, clientAccountModel.Phone);
                Assert.AreEqual(parameters.FullName, clientAccountModel.FullName);
                Assert.AreEqual(parameters.ClientId, clientAccountModel.ClientId);

                try
                {
                    service.Update(null);
                    Assert.Fail();
                }
                catch (InvalidParameterException)
                {
                }
                catch
                {
                    Assert.Fail();
                }

                try
                {
                    service.Update(new ClientAccountModificationParams()
                    {
                        ClientId = 1000,
                        Email    = "*****@*****.**",
                        FullName = "Update Client",
                        Phone    = "+12345",
                    });
                    Assert.Fail();
                }
                catch (NotFoundException)
                {
                }
                catch
                {
                    Assert.Fail();
                }
            }
        }
示例#4
0
        public void AddClientAccountTest()
        {
            using (var context = new CarRentalDbContext(this.dbContextOptions))
            {
                var service = new ClientAccountService(context);
                ClientAccountCreationParams parameters = new ClientAccountCreationParams
                {
                    Email    = "*****@*****.**",
                    FullName = "Add Client",
                    Phone    = "+12345",
                };

                var clientAccountModel = service.Add(parameters);

                Assert.AreEqual(parameters.Email, clientAccountModel.Email);
                Assert.AreEqual(parameters.Phone, clientAccountModel.Phone);
                Assert.AreEqual(parameters.FullName, clientAccountModel.FullName);
                Assert.IsTrue(clientAccountModel.ClientId > 0);

                try
                {
                    service.Add(null);
                    Assert.Fail();
                }
                catch (InvalidParameterException)
                {
                }
                catch
                {
                    Assert.Fail();
                }

                try
                {
                    service.Add(new ClientAccountCreationParams());
                    Assert.Fail();
                }
                catch (InvalidParameterException)
                {
                }
                catch
                {
                    Assert.Fail();
                }
            }
        }
示例#5
0
        public void ReturnCarTest()
        {
            using (var context = new CarRentalDbContext(this.dbContextOptions))
            {
                var dbRezervation = context.Rezervations.First(x => x.IsPickedUp && !x.IsReturned);

                var clientAccountService = new ClientAccountService(context);
                var rezervationService   = new RezervationService(context, clientAccountService);

                var isReturned = rezervationService.ReturnCar(dbRezervation.RezervationId);

                Assert.IsTrue(isReturned);

                dbRezervation = context.Rezervations.Single(x => x.RezervationId == dbRezervation.RezervationId);
                Assert.IsTrue(dbRezervation.IsReturned);
            }
        }
示例#6
0
        public void PickUpCarTest()
        {
            using (var context = new CarRentalDbContext(this.dbContextOptions))
            {
                var dbRezervation = context.Rezervations.First();
                Assert.IsFalse(dbRezervation.IsPickedUp);

                var clientAccountService = new ClientAccountService(context);
                var rezervationService   = new RezervationService(context, clientAccountService);

                var isPickedUp = rezervationService.PickUpCar(dbRezervation.RezervationId);

                Assert.IsTrue(isPickedUp);

                dbRezervation = context.Rezervations.First();
                Assert.IsTrue(dbRezervation.IsPickedUp);
            }
        }
        public override void RegisterServices(ContainerBuilder builder)
        {
            var context = new DbContext();

            var accountAssetRepository  = new MockAccountAssetRepository(context);
            var assetHolderRepository   = new MockAssetHolderRepository(context);
            var clientAccountRepository = new MockClientAccountRepository(context);
            var clientRepository        = new MockClientRepository(context);

            var accountAssetService  = new AccountAssetService(accountAssetRepository);
            var assetHolderService   = new AssetHolderService(assetHolderRepository);
            var clientAccountService = new ClientAccountService(clientAccountRepository);
            var clientService        = new ClientService(clientRepository);

            builder.RegisterInstance(accountAssetService).As <IAccountAssetService>().InstancePerDependency();
            builder.RegisterInstance(assetHolderService).As <IAssetHolderService>().InstancePerDependency();
            builder.RegisterInstance(clientAccountService).As <IClientAccountService>().InstancePerDependency();
            builder.RegisterInstance(clientService).As <IClientService>().InstancePerDependency();
        }
示例#8
0
        public void GetClientAccountBalaceTest()
        {
            using (var context = new CarRentalDbContext(this.dbContextOptions))
            {
                var clientAccountService = new ClientAccountService(context);
                var rezervationService   = new RezervationService(context, clientAccountService);

                var clientAccountBalance = clientAccountService.GetClientAccountBalance(1);

                Assert.AreEqual(clientAccountBalance.TotalRentalFee, 2304.00m);
                Assert.AreEqual(clientAccountBalance.TotalFees, 2304.00m);
                Assert.AreEqual(clientAccountBalance.TotalCancellationFee, 0.00m);

                clientAccountBalance = clientAccountService.GetClientAccountBalance(2);

                Assert.AreEqual(clientAccountBalance.TotalRentalFee, 0.00m);
                Assert.AreEqual(clientAccountBalance.TotalCancellationFee, 50.00m);
                Assert.AreEqual(clientAccountBalance.TotalFees, 50.00m);
            }
        }
示例#9
0
        public void GetClientAccountTest()
        {
            using (var context = new CarRentalDbContext(this.dbContextOptions))
            {
                var clientAccount      = context.ClientAccounts.First();
                var service            = new ClientAccountService(context);
                var clientAccountModel = service.Get(clientAccount.ClientId);

                Assert.AreEqual(clientAccount.ClientId, clientAccountModel.ClientId);
                Assert.AreEqual(clientAccount.Email, clientAccountModel.Email);
                Assert.AreEqual(clientAccount.Phone, clientAccountModel.Phone);
                Assert.AreEqual(clientAccount.FullName, clientAccountModel.FullName);

                try
                {
                    service.Get(0);
                    Assert.Fail();
                }
                catch (InvalidParameterException)
                {
                }
                catch
                {
                    Assert.Fail();
                }

                try
                {
                    service.Get(1000);
                    Assert.Fail();
                }
                catch (NotFoundException)
                {
                }
                catch
                {
                    Assert.Fail();
                }
            }
        }
示例#10
0
        public void CreateRezervationTest()
        {
            var createRezervationParameters = new RezervationCreationParameters
            {
                PickUpDate     = DateTime.Today.AddDays(1),             // set to Today for simplicity.
                ReturnDate     = DateTime.Today.AddDays(5),
                CarPlateNumber = "CA1234AC",
                CarType        = CarTypeEnum.Family,
                ClientAccount  = new ClientAccountCreationParams
                {
                    Email    = "*****@*****.**",
                    FullName = "Client_Rez_1",
                    Phone    = "+12345",
                },
            };

            using (var context = new CarRentalDbContext(this.dbContextOptions))
            {
                var clientAccountService = new ClientAccountService(context);
                var rezervationService   = new RezervationService(context, clientAccountService);

                var rezervationModel = rezervationService.CreateBooking(createRezervationParameters);

                // Sanity check
                Assert.IsTrue(rezervationModel.RezervationId > 0);
                Assert.AreEqual(rezervationModel.PickUpDate, createRezervationParameters.PickUpDate);
                Assert.AreEqual(rezervationModel.ReturnDate, createRezervationParameters.ReturnDate);
                Assert.AreEqual(rezervationModel.CarPlateNumber, createRezervationParameters.CarPlateNumber);
                Assert.AreEqual(rezervationModel.CarType, createRezervationParameters.CarType);
                Assert.AreEqual(rezervationModel.IsCancelled, false);
                Assert.AreEqual(rezervationModel.IsPickedUp, false);
                Assert.AreEqual(rezervationModel.IsReturned, false);

                // Fee calculation.
                var carType = CarTypes.GetCarType(createRezervationParameters.CarType);

                // Test the actual calculations in the car type class.
                var rentalFee  = carType.RentalRateFee * (decimal)(createRezervationParameters.ReturnDate - createRezervationParameters.PickUpDate).TotalHours;
                var depositFee = rentalFee * (carType.DepositFeePercentage / 100);

                Assert.AreEqual(rezervationModel.RentaltFee, rentalFee);
                Assert.AreEqual(rezervationModel.DepositFee, depositFee);
                Assert.IsNull(rezervationModel.CancelationFeeRate);

                var createRezervationParametersExistingClient = new RezervationCreationParameters
                {
                    PickUpDate     = DateTime.Today.AddDays(1),                 // set to Today for simplicity.
                    ReturnDate     = DateTime.Today.AddDays(5),
                    CarPlateNumber = "CA1234AC",
                    CarType        = CarTypeEnum.Family,
                    ClientId       = context.ClientAccounts.First().ClientId,
                };
                rezervationModel = rezervationService.CreateBooking(createRezervationParametersExistingClient);
                Assert.IsTrue(rezervationModel.RezervationId > 0);

                try
                {
                    var createRezervationParametersNoClient = new RezervationCreationParameters
                    {
                        PickUpDate     = DateTime.Today.AddDays(1),                     // set to Today for simplicity.
                        ReturnDate     = DateTime.Today.AddDays(5),
                        CarPlateNumber = "CA1234AC",
                        CarType        = CarTypeEnum.Family,
                    };
                    rezervationModel = rezervationService.CreateBooking(createRezervationParametersNoClient);
                    Assert.Fail();
                }
                catch (InvalidParameterException)
                {
                }
                catch
                {
                    Assert.Fail();
                }
            }
        }
示例#11
0
        public void FindRezervationsTest()
        {
            using (var context = new CarRentalDbContext(this.dbContextOptions))
            {
                var dbRezervations       = context.Rezervations.ToList();
                var clientAccountService = new ClientAccountService(context);
                var rezervationService   = new RezervationService(context, clientAccountService);

                var parameters = new RezervationBrowsingParams
                {
                    ClientEmail    = "*****@*****.**",
                    ClientFullName = "Client Name 1",
                    ClientPhone    = "+11111",
                    PickUpDateFrom = DateTime.Today.AddDays(1),
                    PickUpDateTo   = DateTime.Today.AddDays(2),
                    IsBooked       = true,
                };

                var rezervations = rezervationService.FindRezervations(parameters);
                Assert.IsTrue(rezervations.Count == 1);

                parameters = new RezervationBrowsingParams
                {
                    ClientEmail    = "*****@*****.**",
                    ClientFullName = "Client Name 1",
                    ClientPhone    = "+11111",
                    PickUpDateFrom = DateTime.Today.AddDays(1),
                    PickUpDateTo   = DateTime.Today.AddDays(2),
                    IsPickedUp     = true,
                };

                rezervations = rezervationService.FindRezervations(parameters);
                Assert.IsTrue(rezervations.Count == 2);

                parameters = new RezervationBrowsingParams
                {
                    IsCancelled = true,
                };

                rezervations = rezervationService.FindRezervations(parameters);
                Assert.IsTrue(rezervations.Count == 1);

                parameters = new RezervationBrowsingParams
                {
                    IsReturned = true,
                };

                rezervations = rezervationService.FindRezervations(parameters);
                Assert.IsTrue(rezervations.Count == 2);

                parameters = new RezervationBrowsingParams
                {
                    MaxItems   = 2,
                    StartIndex = 1,
                };

                rezervations = rezervationService.FindRezervations(parameters);
                Assert.IsTrue(rezervations.Count == 2);

                try
                {
                    rezervationService.FindRezervations(null);
                    Assert.Fail();
                }
                catch (InvalidParameterException)
                {
                }
                catch
                {
                    Assert.Fail();
                }
            }
        }