public void GetHoursParked_ShouldBeTwo() { DateTime now = DateTime.UtcNow; ParkingSlip sut = new ParkingSlip(now.AddHours(-2)); sut.SetExitDateTime(now); Assert.That(sut.GetHoursParked(), Is.EqualTo(2)); }
public void SetExitDateTime_ShouldBeExpirationDateSet() { DateTime now = DateTime.UtcNow; ParkingSlip sut = new ParkingSlip(now.AddHours(-1)); sut.SetExitDateTime(now); Assert.That(sut.GetExitDateTime(), Is.EqualTo(now)); }
public void CalculateParkingFee_ShouldBeZero() { List <IParkingSpace> parkingSpaces = new List <IParkingSpace>(); parkingSpaces.Add(new ParkingSpace()); parkingSpaces.Add(new ParkingSpace()); parkingSpaces.Add(new ParkingSpace()); List <IParkingFee> parkingFees = new List <IParkingFee>(); parkingFees.Add(new ParkingFee(2, 4, 5)); IParkingLot sut = new ParkingLot(parkingSpaces, parkingFees); ParkingSlip parkingSlip = new ParkingSlip(DateTime.UtcNow.AddHours(-1)); parkingSlip.SetExitDateTime(DateTime.UtcNow); Assert.That(sut.CalculateParkingFee(parkingSlip).GetCost(), Is.EqualTo(0)); }
public void CalculateParkingFee_ShouldBeFifteen() { List <IParkingSpace> parkingSpaces = new List <IParkingSpace>(); parkingSpaces.Add(new ParkingSpace()); parkingSpaces.Add(new ParkingSpace()); parkingSpaces.Add(new ParkingSpace()); List <IParkingFee> parkingFees = new List <IParkingFee>(); parkingFees.Add(new ParkingFee(0, 2, 5)); parkingFees.Add(new ParkingFee(2, 10, 10)); parkingFees.Add(new ParkingFee(10, Double.MaxValue, 15)); IParkingLot sut = new ParkingLot(parkingSpaces, parkingFees); ParkingSlip parkingSlip = new ParkingSlip(DateTime.UtcNow.AddHours(-15)); parkingSlip.SetExitDateTime(DateTime.UtcNow); Assert.That(sut.CalculateParkingFee(parkingSlip).GetCost(), Is.EqualTo(15)); }
public HttpResponseMessage GetParkingFee(string parkingLotId, string parkingSlipId) { /* * Normally we would query a database for the parkingLotId and parkingSlipId then call CalculateParkingFee() on them. * But in the interest of time, I set up some test data showing the JSON output of various parking slips with different lengths of time. */ // Get parking fee // Build parking spaces list List <IParkingSpace> parkingSpaces = new List <IParkingSpace>(); parkingSpaces.Add(new ParkingSpace()); parkingSpaces.Add(new ParkingSpace()); parkingSpaces.Add(new ParkingSpace()); // Build parking fee structure List <IParkingFee> parkingFees = new List <IParkingFee>(); parkingFees.Add(new ParkingFee(0, 2, 5)); parkingFees.Add(new ParkingFee(2, 10, 10)); parkingFees.Add(new ParkingFee(10, Double.MaxValue, 15)); // Create parking lot ParkingLot parkingLot = new ParkingLot(parkingSpaces, parkingFees); // Build a list of fees List <double> myParkingFees = new List <double>(); DateTime now = DateTime.UtcNow; // Create parking slips with various start times and add to the list IParkingSlip parkingSlip = new ParkingSlip(now.AddHours(-1)); parkingSlip.SetExitDateTime(now); myParkingFees.Add(parkingLot.CalculateParkingFee(parkingSlip).GetCost()); parkingSlip = new ParkingSlip(now.AddHours(-5)); parkingSlip.SetExitDateTime(now); myParkingFees.Add(parkingLot.CalculateParkingFee(parkingSlip).GetCost()); parkingSlip = new ParkingSlip(now.AddHours(-25)); parkingSlip.SetExitDateTime(now); myParkingFees.Add(parkingLot.CalculateParkingFee(parkingSlip).GetCost()); // Create http response (application/json) HttpResponseMessage response = Request.CreateResponse <Object>(System.Net.HttpStatusCode.OK, myParkingFees, "application/json"); // Return http response return(response); }
public void SetExitDateTime_ShouldBeThrowsExceptionInvalidDate() { ParkingSlip sut = new ParkingSlip(DateTime.UtcNow.AddHours(-1)); Assert.Throws <ArgumentException>(() => sut.SetExitDateTime(DateTime.MinValue)); }