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