Example #1
0
        public async Task ItCalculatesTheCorrectOwingAmount(DateTimeOffset issuedOn, TimeSpan rateDuration, decimal rateValue, decimal expectedTotal)
        {
            // arrange
            var config = new ParkingLotConfig {
                MaxParkingSpaces = 3
            };
            var ticketService = new TicketService(_context, config);
            var rateLevel     = new RateLevel
            {
                Name      = rateDuration.ToString(),
                Duration  = rateDuration,
                RateValue = rateValue
            };

            var ticket = new Ticket
            {
                Customer  = "Test Customer",
                RateLevel = rateLevel,
                IssuedOn  = issuedOn
            };

            await _context.AddAsync(ticket);

            await _context.SaveChangesAsync();

            // act
            var amountOwing = ticketService.GetAmountOwed(ticket);

            // assert
            Assert.Equal(expectedTotal, amountOwing);
        }
Example #2
0
        public async Task ItIssuesATicketIfThereIsASpace()
        {
            // arrange
            var config = new ParkingLotConfig {
                MaxParkingSpaces = 3
            };
            var ticketService = new TicketService(_context, config);
            var rateLevel     = new RateLevel
            {
                Name      = "Test Rate",
                RateValue = 1.25M
            };

            var tickets = new[]
            {
                new Ticket {
                    Customer = "Test Customer 1", RateLevel = rateLevel
                },
                new Ticket {
                    Customer = "Test Customer 2", RateLevel = rateLevel
                }
            };

            await _context.Tickets.AddRangeAsync(tickets);

            await _context.SaveChangesAsync();

            // act
            var newTicket = await ticketService.IssueNewTicket("cust", rateLevel.Id);

            // assert
            Assert.NotNull(newTicket);
            Assert.Equal("cust", newTicket.Customer);
        }
Example #3
0
        public async Task ItRefusesEntryIfTheLotIsFull()
        {
            // arrange
            var config = new ParkingLotConfig {
                MaxParkingSpaces = 3
            };
            var ticketService = new TicketService(_context, config);
            var rateLevel     = new RateLevel
            {
                Name      = "Test Rate",
                RateValue = 1.25M
            };

            var tickets = new[]
            {
                new Ticket {
                    Customer = "Test Customer 1", RateLevel = rateLevel
                },
                new Ticket {
                    Customer = "Test Customer 2", RateLevel = rateLevel
                },
                new Ticket {
                    Customer = "Test Customer 3", RateLevel = rateLevel
                }
            };

            await _context.Tickets.AddRangeAsync(tickets);

            await _context.SaveChangesAsync();

            // act/assert
            await Assert.ThrowsAsync <LotFullException>(async() => await ticketService.IssueNewTicket("Test Customer 4", 1));
        }
        public static List <RoomTypeSettings> GetOccResultInCorrectForm(List <RoomTypeSettings> roomTypeSettingsList)
        {
            var occupancyResult             = GetAllOccupancyIntervals(roomTypeSettingsList);
            var roomTypeSettingsListCorrect = new List <RoomTypeSettings>();

            foreach (var roomTypeSettings in roomTypeSettingsList)
            {
                var newRoomType = new RoomTypeSettings
                {
                    RoomTypeName = roomTypeSettings.RoomTypeName, RateLevels = new List <RateLevel>()
                };

                var ad = 0;
                foreach (var typeBorder in occupancyResult)
                {
                    var occRateLevelToCorrect = roomTypeSettings.RateLevels[ad];

                    if (typeBorder.OccupancyTo <= occRateLevelToCorrect.OccupancyTo)
                    {
                        var correctOccupancy = new RateLevel
                        {
                            OccupancyFrom      = typeBorder.OccupancyFrom,
                            OccupancyTo        = typeBorder.OccupancyTo,
                            OccupancyRateLevel = occRateLevelToCorrect.OccupancyRateLevel
                        };
                        newRoomType.RateLevels.Add(correctOccupancy);
                    }

                    if (typeBorder.OccupancyTo == occRateLevelToCorrect.OccupancyTo)
                    {
                        ad++;
                    }
                }

                roomTypeSettingsListCorrect.Add(newRoomType);
            }

            return(roomTypeSettingsListCorrect);
        }