示例#1
0
        public void CalculateCostsMovie_ValidMembership_returnsValue()
        {
            var calculatedCosts = new CalculateCosts();

            //Arrange
            var result = calculatedCosts.CalculateCostsMovie(
                new MembershipType {
                Description = "Quarterly", DiscountPct = 20, Months = 3
            },
                new Movie {
                Price = 1, Title = "Test movie"
            });

            var expected  = Decimal.Round((Decimal)0.8, 2);
            var resultDec = Decimal.Round((Decimal)result, 2);

            try
            {
                Assert.AreEqual(expected, resultDec);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
        public IHttpActionResult CreateRentals(RentalDto rentalDto)
        {
            var customer = _context.Customers.SingleOrDefault(c => c.Id == rentalDto.CustomerId);

            if (customer == null)
            {
                return(BadRequest("There are not customers for the provided Id"));
            }

            if (rentalDto.MovieIds.Count == 0)
            {
                return(BadRequest("The provided list of movies is empty"));
            }

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

            if (movies.Count != rentalDto.MovieIds.Count)
            {
                BadRequest("Some movie Id's provided are incorrect or there are not movies for that movie id");
            }

            var membershipType = _context.MembershipTypes.Single(m => m.Id == customer.MembershipTypeId);

            if (membershipType == null)
            {
                BadRequest("The membership type is incorrect for the customer provided");
            }

            var calculations = new CalculateCosts();

            foreach (var movie in movies)
            {
                if (movie.AvailableForRental == 0)
                {
                    return(BadRequest("The movie is not available for renting"));
                }

                movie.AvailableForRental--;
                var rental = new Rental
                {
                    Movie              = movie,
                    Customer           = customer,
                    RentedDate         = DateTime.Now,
                    TotalAfterDiscount = calculations.CalculateCostsMovie(membershipType, movie)
                };
                _context.Rentals.Add(rental);
                _context.SaveChanges();
            }

            return(Ok());
        }
        public async Task <Rental> StopRental(int id)
        {
            Rental r = rentalDBContext.Rentals.Find(id);

            r.RentalEnd = System.DateTime.Now.AddMinutes(130);
            r.Customer  = await rentalDBContext.Customers.FindAsync(r.CustomerId);

            r.Bike = await rentalDBContext.Bikes.FindAsync(r.BikeId);

            r.TotalCosts = CalculateCosts.CalculateTotalCost(r);
            await rentalDBContext.SaveChangesAsync();

            return(r);
        }
示例#4
0
        public void CalculateFree()
        {
            Bike bike = new Bike();

            bike.RentalPriceForFirstHour      = 3;
            bike.RentalPriceForAdditionalHour = 5;
            bike.ID = 1;
            Customer customer = new Customer();

            customer.ID = 1;
            Rental r = new Rental();

            r.RentalBegin = new DateTime(2018, 02, 14, 8, 15, 0);
            r.RentalEnd   = new DateTime(2018, 02, 14, 8, 25, 0);
            r.ID          = 1;
            r.Customer    = customer;
            r.CustomerId  = customer.ID;
            r.Bike        = bike;
            r.BikeId      = bike.ID;
            r.TotalCosts  = CalculateCosts.CalculateTotalCost(r);
            Assert.Equal(0, r.TotalCosts, 1);
        }