public async Task <Ride> BringCustomerToTheTrainStation(Id <Customer> customerId, Location customerLocation) { var currentTime = await _timeProvider.GetCurrentTime(); // Find a cab var cab = await _cabProvider.GetNearestAvailableCab(customerLocation); cab.Embarc(customerId); // Bring the customer to the trainstation var rideId = Id <Ride> .CreateNew(); var destination = await _locationProvider.GetTrainStationLocation(); var ride = new Ride(rideId, customerId, cab.Id); ride.SetDestination(destination); ride.Start(currentTime); var distance = await _trafficInformationProvider.GetDistanceBetweenLocations(destination, customerLocation); var eta = await _trafficInformationProvider.GetTimeOfArival(currentTime, distance); ride.Stop(eta); // Update the cab administration cab.GoTo(destination); await _cabProvider.Update(cab); return(ride); }
public async Task WhenNewCab_ShouldPersistCab() { // Arrange var location = _fixture.Create <Location>(); var cab = _fixture.Create <Cab>(); AddRecordsToLookupTable(cab.CurrentLocation, location); // Act await _sut.Update(cab); var itemInDatabase = await _sut.GetNearestAvailableCab(location); // Assert itemInDatabase.Should().Be(cab); }