public async void Post_Update()
        {
            var mocks          = new Mocks();
            var submittedModel = new RentalModel {
                Id = 1
            };

            mocks._repository.Setup(m => m.GetAsync(1, null)).Returns(
                Task.FromResult <RentalModel>(
                    new RentalModel {
                Id = 1
            }
                    )
                );

            mocks._repository.Setup(m => m.Update(submittedModel));

            var _controller = NewRentalController(mocks);

            var result = await _controller.Post(null, new RentalModel { Id = 1 });

            Assert.IsType <OkObjectResult>(result);

            var value = (result as OkObjectResult).Value as RentalModel;

            Assert.Equal(1, value.Id);
        }
        public IHttpActionResult CreateNewRentals(NewRentalDto newRental)
        {
            var customer = _context.Customers.Single(
                c => c.Id == newRental.CustomerId);

            var games = _context.Games.Where(
                g => newRental.GameIds.Contains(g.Id)).ToList();

            foreach (var game in games)
            {
                if (game.NumberAvailable == 0)
                {
                    return(BadRequest("Game is not available"));
                }

                game.NumberAvailable--;

                var rental = new RentalModel
                {
                    Customer   = customer,
                    Game       = game,
                    DateRented = DateTime.Now
                };

                _context.Rentals.Add(rental);
            }

            _context.SaveChanges();

            return(Ok());
        }
        public async Task <IActionResult> Put(RentalModel rental)
        {
            try
            {
                _logger.LogInformation($"Updating a rental @ {rental}...");
                var selectedRental = await _unitOfWork.Rental.SelectAsync(rental.Id);

                if (selectedRental == null)
                {
                    throw new KeyNotFoundException("The given id was not found.");
                }
                else
                {
                    _unitOfWork.Rental.Update(selectedRental);
                    await _unitOfWork.CommitAsync();

                    _logger.LogInformation($"Successfully updated a rental @ {selectedRental}.");
                    return(Accepted(selectedRental));
                }
            }
            catch (NullReferenceException e)
            {
                _logger.LogInformation($"Failed to update a rental @ {rental}. Caught: {e}.");
                return(NotFound(rental));
            }
            catch (KeyNotFoundException e)
            {
                _logger.LogInformation($"Could not find rental @ id = {rental.Id}. Caught: {e.Message}");
                return(NotFound(rental.Id));
            }
        }
Example #4
0
        public async Task <IActionResult> Put(RentalModel rental)
        {
            _unitOfWork.Rental.Update(rental);
            await _unitOfWork.CommitAsync();

            return(Accepted(rental));
        }
Example #5
0
        internal async Task <RentalModel> getOpenByVehicleNumber(int vehicleID)
        {
            RentalModel model = new RentalModel();
            await Task.Run(() =>
            {
                Rental rental = new Rental();
                rental        = DBase.Rentals.FirstOrDefault(rent => rent.Vehicle_ID == vehicleID && rent.Returned_Date == null);

                try
                {
                    if (rental != null)
                    {
                        model = ConverRentalToModel(rental);
                    }
                    else
                    {
                        model = null;
                    }
                }
                catch (Exception a)
                {
                    throw a;
                }
            });

            if (model != null)
            {
                return(model);
            }
            else
            {
                return(null);
            }
        }
Example #6
0
        internal int?CalculateTotalSum(Vehicle_Types vehicle, RentalModel rental)
        {
            var car = vehicle;
            int total;

            double daysRented = rental.Returned_Date.Value.Subtract(rental.Start_Date).TotalDays;

            double daysIntended = rental.Return_Date.Subtract(rental.Start_Date).TotalDays;


            if (daysRented > 0)
            {
                int days = (int)daysIntended - (int)daysRented;
                if ((int)daysIntended >= (int)daysRented)
                {
                    total = (int)daysRented * car.Daily_Rate;
                }
                else
                {
                    total = (int)(((daysRented - daysIntended) * (car.Penalty_Rate + car.Daily_Rate)) + (daysRented * car.Daily_Rate));
                }
            }
            else
            {
                total = 0;
            }

            return(total);
        }
Example #7
0
        public void Test_Create_RentalModel(RentalModel rental)
        {
            var validationContext = new ValidationContext(rental);
            var actual            = Validator.TryValidateObject(rental, validationContext, null, true);

            Assert.True(actual);
        }
        public async Task <IActionResult> Put(RentalModel rental)
        {
            try
            {
                _logger.LogInformation($"Updating a rental @ {rental}...");
                var selectedRental = (await _unitOfWork.Rental.SelectAsync(e => e.EntityId == rental.EntityId)).FirstOrDefault();

                _unitOfWork.Rental.Update(selectedRental);
                await _unitOfWork.CommitAsync();

                _logger.LogInformation($"Successfully updated a rental @ {selectedRental}.");

                return(Accepted(selectedRental));
            }
            catch (NullReferenceException e)
            {
                _logger.LogInformation(e, "Caught: {e}. Given rental parameter was null.", e);
                return(NotFound(rental));
            }
            catch (KeyNotFoundException e)
            {
                _logger.LogInformation(e, "Caught: {e.Message}. Id = {rental.Id}", e, rental);
                return(NotFound(rental.EntityId));
            }
        }
Example #9
0
        internal async Task <Tuple <Status, List <RentalModel>, string> > GetUsersRentals(int userId)
        {
            List <RentalModel>   returnList   = new List <RentalModel>();
            IEnumerable <Rental> usersRentals = DBase.Rentals.Where(rent => rent.User_ID == userId);

            if (usersRentals != null)
            {
                foreach (Rental rental in usersRentals)
                {
                    RentalModel model = new RentalModel();
                    model = ConverRentalToModel(rental);
                    if (rental.Returned_Date != null)
                    {
                        model.Total_Price = CalculateTotalSum(await DBase.Vehicle_Types.FindAsync(rental.Vehicle.Vehicle_Type_ID), model);
                    }
                    else
                    {
                        model.Total_Price = CalculateCurrentTotalSum(await DBase.Vehicle_Types.FindAsync(rental.Vehicle.Vehicle_Type_ID), model);// model.Vehicle_ID
                    }
                    returnList.Add(model);
                }
                return(new Tuple <Status, List <RentalModel>, string>(Status.Success, returnList, "Rental List"));
            }
            else
            {
                return(new Tuple <Status, List <RentalModel>, string>(Status.Success, null, "No Rentals Found For This User"));
            }
        }
        public async void Test_Seed_HasRentals()
        {
            var dbOptions = await NewDb();

            var rental = new RentalModel()
            {
                Id = 1
            };

            using (var ctx = new LodgingContext(dbOptions))
            {
                await ctx.Database.EnsureCreatedAsync();

                await ctx.Rentals.AddAsync(rental);

                await ctx.SaveChangesAsync();

                // Setup for seeding the database
                Seed.SeedDatabase(ctx);
            }

            using (var ctx = new LodgingContext(dbOptions))
            {
                // Add Asserts here.
                Assert.False(ctx.Lodgings.Count() > 0);
                Assert.True(ctx.Rentals.Count() > 0);
                Assert.False(ctx.Reviews.Count() > 0);
            }
        }
Example #11
0
        public void ShouldMapRentalModelToDbRental()
        {
            var rentalModel = new RentalModel()
            {
                Customer = new UserModel()
                {
                    Id        = 1,
                    FirstName = "FirstName"
                },
                Game = new GameModel()
                {
                    Id   = 2,
                    Name = "Game"
                }
            };

            var config = new MapperConfiguration(c => c.AddProfile(new MapperProfile()));
            var mapper = config.CreateMapper();

            var rental = mapper.Map <RentalModel, Rental>(rentalModel);

            Assert.Equal(rentalModel.Customer.Id, rental.UserId);
            Assert.Equal(rentalModel.Game.Id, rental.GameId);
            Assert.Null(rental.User);
            Assert.Null(rental.Game);
        }
Example #12
0
        public async Task <IHttpActionResult> Rent(RentalModel _rental)
        {
            string userContext = RequestContext.Principal.Identity.GetUserId();
            int    ID          = int.Parse(userContext);

            if (userContext != null)
            {
                Rental returnRental = new Rental();

                Tuple <string, Vehicle> vehicleAndDate = store.getVehicle(_rental);

                if (vehicleAndDate.Item2.Available)
                {
                    returnRental = await store.rentVehicle(ID, _rental, vehicleAndDate.Item2);

                    return(Ok(returnRental));
                }
                else
                {
                    if (vehicleAndDate == null)
                    {
                        return(Content(HttpStatusCode.Forbidden, "Vehicle is not available"));
                    }
                    else
                    {
                        return(Content(HttpStatusCode.Forbidden, vehicleAndDate.Item1));
                    }
                }
            }
            else
            {
                return(BadRequest("Unknown User"));
            }
        }
Example #13
0
        internal int?CalculateCurrentTotalSum(Vehicle_Types vehicle, RentalModel rental)
        {
            var car = vehicle;
            int total;

            int daysInRental = (int)rental.Return_Date.Subtract(rental.Start_Date).TotalDays;
            int daysRented   = (int)DateTime.Now.Subtract(rental.Start_Date).TotalDays;


            if (daysRented > 0)
            {
                if (daysRented > daysInRental)
                {
                    total = ((daysRented - daysInRental) * (car.Penalty_Rate + car.Daily_Rate)) + (daysInRental * car.Daily_Rate);
                }
                else
                {
                    total = daysRented * car.Daily_Rate;
                }
            }
            else
            {
                total = 0;
            }

            return(total);
        }
        public async Task <IActionResult> Post(RentalModel rental)
        {
            if (rental == null)
            {
                return(BadRequest());
            }

            var ExistingEntry = await _unitOfWork.Rental.GetAsync(rental.Id);

            if (ExistingEntry == null)
            {
                var obj = await _unitOfWork.Rental.InsertAsync(rental);

                await _unitOfWork.CommitAsync();

                return(Ok(obj));
            }
            else
            {
                _unitOfWork.Rental.Update(rental);

                await _unitOfWork.CommitAsync();

                return(Ok(rental));
            }
        }
Example #15
0
        public IHttpActionResult CreateRentals(NewRentalDto newRental)
        {
            var customer = _context.Customers.Single(c => c.Id == newRental.CustomerId);

            var movies = _context.Movies.Where(m => newRental.MovieIds.Contains(m.Id)).ToList();

            foreach (var movie in movies)
            {
                if (movie.NumberAvailable == 0)
                {
                    return(BadRequest("Movie is not available at the moment."));
                }

                else
                {
                    movie.NumberAvailable--;
                }

                var rental = new RentalModel
                {
                    Customer   = customer,
                    Movie      = movie,
                    DateRented = DateTime.Now
                };

                _context.Rentals.Add(rental);
            }

            _context.SaveChanges();

            return(Ok());
        }
        // GET: Rental
        public ActionResult List()
        {
            DataTable          dtList             = objRentalEquipmentDAL.GetRentalEquipmentList();
            List <RentalModel> objListRentalModel = new List <RentalModel>();

            if (dtList != null)
            {
                foreach (DataRow item in dtList.Rows)
                {
                    RentalModel objRentalModel = new RentalModel();
                    objRentalModel.RentalID      = Convert.ToInt16(item["RentalID"].ToString());
                    objRentalModel.EquipmentType = item["EquipmentType"].ToString();
                    objRentalModel.FromDate      = DateTime.ParseExact(Convert.ToDateTime(item["FromDate"].ToString()).ToShortDateString(), "M/d/yyyy", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy");
                    objRentalModel.ToDate        = DateTime.ParseExact(Convert.ToDateTime(item["ToDate"].ToString()).ToShortDateString(), "M/d/yyyy", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy");
                    objRentalModel.ContactNumber = item["ContactNumber"].ToString();
                    objRentalModel.EmailID       = item["EmailID"].ToString();
                    objRentalModel.Price         = item["Price"].ToString();
                    objRentalModel.Location      = item["Location"].ToString();
                    if (Convert.ToString(item["Comments"]) != "")
                    {
                        objRentalModel.Comments = item["Comments"].ToString();
                    }

                    objListRentalModel.Add(objRentalModel);
                }
            }
            return(View(objListRentalModel));
        }
Example #17
0
        public async Task <ActionResult> Post(RentalModel model)
        {
            if (!ModelState.IsValid)
            {
                return(this.BadRequest(this.GetErrorJsonFromModelState()));
            }


            var dto = new RentalDto
            {
                BookId     = model.BookId,
                CustomerId = model.CustomerId,
                RentDate   = DateTime.UtcNow,
                ReturnDate = model.ReturnDate,
            };

            this.PopulateAuditFieldsOnCreate(dto);

            var response = await this._rentalService.InsertAsync(new GenericRequest <RentalDto>
            {
                Data = dto
            });

            if (response.IsError())
            {
                return(this.BadRequest(this.GetErrorJson(response)));
            }

            return(this.Ok(this.GetSuccessJson(response, response.Data)));
        }
Example #18
0
        public async Task <IActionResult> PostAsync(RentalModel rental)
        {
            await _unitOfWork.Rental.InsertAsync(rental);

            await _unitOfWork.CommitAsync();

            return(Created(Url.RouteUrl(rental.Id), rental.Id));
        }
Example #19
0
        public ActionResult PostRental(PostRental postrental)
        {
            var rental = new RentalModel(postrental);

            _dbContext.RentalsCollection.InsertOne(rental);

            return(RedirectToAction("Index"));
        }
Example #20
0
        public async Task <IActionResult> Post(RentalModel rental)
        {
            await _unitOfWork.Rental.InsertAsync(rental);

            await _unitOfWork.CommitAsync();

            return(Accepted(rental));
        }
Example #21
0
        public async void Test_Repository_DeleteAsync(LodgingModel lodging, RentalModel rental, ReviewModel review)
        {
            await _connection.OpenAsync();

            try
            {
                using (var ctx = new LodgingContext(_options))
                {
                    await ctx.Database.EnsureCreatedAsync();

                    await ctx.Lodgings.AddAsync(lodging);

                    await ctx.Rentals.AddAsync(rental);

                    await ctx.Reviews.AddAsync(review);

                    await ctx.SaveChangesAsync();
                }

                using (var ctx = new LodgingContext(_options))
                {
                    var lodgings = new Repository <LodgingModel>(ctx);

                    await lodgings.DeleteAsync(1);

                    await ctx.SaveChangesAsync();

                    Assert.Empty(await ctx.Lodgings.ToListAsync());
                }

                using (var ctx = new LodgingContext(_options))
                {
                    var rentals = new Repository <RentalModel>(ctx);

                    await rentals.DeleteAsync(1);

                    await ctx.SaveChangesAsync();

                    Assert.Empty(await ctx.Rentals.ToListAsync());
                }

                using (var ctx = new LodgingContext(_options))
                {
                    var reviews = new Repository <ReviewModel>(ctx);

                    await reviews.DeleteAsync(1);

                    await ctx.SaveChangesAsync();

                    Assert.Empty(await ctx.Reviews.ToListAsync());
                }
            }
            finally
            {
                await _connection.CloseAsync();
            }
        }
Example #22
0
        public async void Test_Repository_Update(BookingModel booking, StayModel stay)
        {
            await _connection.OpenAsync();

            try
            {
                using (var ctx = new BookingContext(_options))
                {
                    await ctx.Database.EnsureCreatedAsync();

                    await ctx.Bookings.AddAsync(booking);

                    await ctx.Stays.AddAsync(stay);

                    await ctx.SaveChangesAsync();
                }

                using (var ctx = new BookingContext(_options))
                {
                    var rentals = new List <RentalModel>();
                    var rental  = new RentalModel {
                        Id = 1
                    };
                    rentals.Add(rental);
                    booking.Rentals = rentals;
                    var bookings = new Repository <BookingModel>(ctx);
                    var expected = await ctx.Bookings.FirstAsync();

                    expected.Status = "updated";
                    bookings.Update(expected);
                    await ctx.SaveChangesAsync();

                    var actual = await ctx.Bookings.FirstAsync();

                    Assert.Equal(expected, actual);
                }


                using (var ctx = new BookingContext(_options))
                {
                    var stays    = new Repository <StayModel>(ctx);
                    var expected = await ctx.Stays.FirstAsync();

                    expected.DateModified = DateTime.Now;
                    stays.Update(expected);
                    await ctx.SaveChangesAsync();

                    var actual = await ctx.Stays.FirstAsync();

                    Assert.Equal(expected, actual);
                }
            }
            finally
            {
                _connection.Close();
            }
        }
Example #23
0
        public int AddRental(RentalModel newRental)
        {
            var rental = this.mapper.Map <RentalModel, Rental>(newRental);

            this.efContext.Rentals.Add(rental);

            var totalStateEntriesWritten = this.efContext.SaveChanges();

            return(totalStateEntriesWritten);
        }
        public async Task <IActionResult> Post(RentalModel rental)
        {
            _logger.LogInformation($"Creating a new rental @ {rental}...");
            await _unitOfWork.Rental.InsertAsync(rental);

            await _unitOfWork.CommitAsync();

            _logger.LogInformation($"Successfully created a new rental @ {rental}.");
            return(Accepted(rental));
        }
Example #25
0
        public int UpdateRental(RentalModel rentalModel)
        {
            var dbRental = this.efContext.Rentals.Single(rental => rental.Id == rentalModel.Id);

            dbRental = this.mapper.Map <RentalModel, Rental>(rentalModel, dbRental);

            var totalStateEntriesWritten = this.efContext.SaveChanges();

            return(totalStateEntriesWritten);
        }
Example #26
0
        public async void Test_Controller_Put()
        {
            RentalModel rentalmodel = await _unitOfWork.Rental.SelectAsync(2);

            var resultPass = await _controller.Put(rentalmodel);

            var resultFail = await _controller.Put(null);

            Assert.NotNull(resultPass);
            Assert.NotNull(resultFail);
        }
        public async void Test_Repository_Update(LodgingModel lodging, RentalModel rental, ReviewModel review)
        {
            using (var ctx = new LodgingContext(Options))
            {
                ctx.Rentals.RemoveRange(ctx.Rentals);
                ctx.Lodgings.RemoveRange(ctx.Lodgings);
                await ctx.Lodgings.AddAsync(lodging);

                await ctx.Rentals.AddAsync(rental);

                await ctx.Reviews.AddAsync(review);

                await ctx.SaveChangesAsync();
            }

            using (var ctx = new LodgingContext(Options))
            {
                var lodgings        = new Repository <LodgingModel>(ctx);
                var lodgingToUpdate = await ctx.Lodgings.FirstAsync();

                lodgingToUpdate.Name = "Name";
                lodgings.Update(lodgingToUpdate);

                var result = ctx.Lodgings.Find(lodging.Id);
                Assert.Equal(lodgingToUpdate.Name, result.Name);
                Assert.Equal(EntityState.Modified, ctx.Entry(result).State);
            }

            using (var ctx = new LodgingContext(Options))
            {
                var rentals        = new Repository <RentalModel>(ctx);
                var rentalToUpdate = await ctx.Rentals.FirstAsync();

                rentalToUpdate.LotNumber = "4";
                rentals.Update(rentalToUpdate);

                var result = ctx.Rentals.Find(rental.Id);
                Assert.Equal(rentalToUpdate.LotNumber, result.LotNumber);
                Assert.Equal(EntityState.Modified, ctx.Entry(result).State);
            }

            using (var ctx = new LodgingContext(Options))
            {
                var reviews        = new Repository <ReviewModel>(ctx);
                var reviewToUpdate = await ctx.Reviews.FirstAsync();

                reviewToUpdate.Comment = "Comment";
                reviews.Update(reviewToUpdate);

                var result = ctx.Reviews.Find(review.Id);
                Assert.Equal(reviewToUpdate.Comment, result.Comment);
                Assert.Equal(EntityState.Modified, ctx.Entry(result).State);
            }
        }
Example #28
0
        public async void TestRepositoryDeleteAsync(LodgingModel lodging, RentalModel rental, ReviewModel review, ImageModel image)
        {
            using (var ctx = new LodgingContext(Options))
            {
                ctx.Rentals.RemoveRange(ctx.Rentals);
                ctx.Lodgings.RemoveRange(ctx.Lodgings);
                ctx.Images.RemoveRange(ctx.Images);

                await ctx.Rentals.AddAsync(rental);

                await ctx.Reviews.AddAsync(review);

                await ctx.Images.AddAsync(image);

                await ctx.Lodgings.AddAsync(lodging);

                await ctx.SaveChangesAsync();
            }

            using (var ctx = new LodgingContext(Options))
            {
                var lodgings = new Repository <LodgingModel>(ctx);

                await lodgings.DeleteAsync(lodging.EntityId);

                Assert.Equal(EntityState.Deleted, ctx.Entry(ctx.Lodgings.Find(lodging.EntityId)).State);
            }

            using (var ctx = new LodgingContext(Options))
            {
                var rentals = new Repository <RentalModel>(ctx);

                await rentals.DeleteAsync(rental.EntityId);

                Assert.Equal(EntityState.Deleted, ctx.Entry(ctx.Rentals.Find(rental.EntityId)).State);
            }

            using (var ctx = new LodgingContext(Options))
            {
                var reviews = new Repository <ReviewModel>(ctx);

                await reviews.DeleteAsync(review.EntityId);

                Assert.Equal(EntityState.Deleted, ctx.Entry(ctx.Reviews.Find(review.EntityId)).State);
            }
            using (var ctx = new LodgingContext(Options))
            {
                var images = new Repository <ImageModel>(ctx);

                await images.DeleteAsync(image.EntityId);

                Assert.Equal(EntityState.Deleted, ctx.Entry(ctx.Images.Find(image.EntityId)).State);
            }
        }
        public IHttpActionResult CreateNewRentals(RentalDto rentalDto)
        {
            if (rentalDto.MovieIds.Count == 0)
            {
                return(BadRequest("No Movie Ids given"));
            }
            var customerId   = rentalDto.CustomerId;
            var customerInDb = _context.Customers.Single(c => c.Id == customerId);

            if (customerInDb == null)
            {
                return(BadRequest("CustomerId is invalid"));
            }
            var movieIds   = rentalDto.MovieIds.ToList();
            var moviesInDb = _context.Movies.Where(m => movieIds.Contains(m.Id)).ToList();

            // these if statement polluted the code, it's call very defensive approach for validation.
            if (moviesInDb.Count != rentalDto.MovieIds.Count)
            {
                return(BadRequest("One or More Movie Ids are Invalid"));
            }
            // var rentalDetail = new RentalDto();
            // var movieIdsList = new List<int>();
            // rentalDetail.CustomerId = rentalDto.CustomerId;
            // rentalDetail.DateRented = rentalDto.DateRented;
            // rentalDetail.DateReturned = rentalDto.DateReturned;
            foreach (var movie in moviesInDb)
            {
                if (movie.NumberAvailable == 0)
                {
                    return(BadRequest("Movie is not available"));
                }
                movie.NumberAvailable--;

                var rental = new RentalModel
                {
                    Customer   = customerInDb,
                    Movie      = movie,
                    DateRented = DateTime.Now
                };
                _context.Rentals.Add(rental);
            }

            _context.SaveChanges();
            // rentalDetail.MovieIds = movieIdsList;

            // var rentals = Mapper.Map<RentalDto, RentalModel >(rentalDetail);
            // _context.Rentals.Add(rentals);
            return(Ok());

            throw new NotImplementedException();
        }
        public async void Delete_UsingInvalidId()
        {
            var         mocks      = new Mocks();
            RentalModel mockResult = null;

            mocks._repository.Setup(m => m.DeleteAsync(1, null)).Returns(Task.FromResult(mockResult));

            var _controller = NewRentalController(mocks);

            var result = await _controller.Delete(null, 1);

            Assert.IsType <NotFoundResult>(result);
        }