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); } }
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)); }
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(); } } }
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(); } } }
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); } }
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(); }
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); } }
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(); } } }
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(); } } }
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(); } } }