示例#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);
        }
示例#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);
        }
示例#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));
        }
示例#4
0
 public TicketsControllerTests()
 {
     _config = new ParkingLotConfig {
         MaxParkingSpaces = 5
     };
     _mockTicketService = new Mock <ITicketService>();
     _controller        = new TicketsController(_config, _mockTicketService.Object);
 }
 public TicketsController(ParkingLotConfig config, ITicketService ticketService)
 {
     _config        = config;
     _ticketService = ticketService;
 }