public async Task TripController_Add_WhenVehiceDoesNotExist_ShouldReturnNotFound()
        {
            // Arrange
            var tripReference = StringHelper.RandomString(8);
            var vinReference  = StringHelper.RandomString(6);

            _mockVehicleRepository
            .Setup(m => m.GetByVinAsync(It.IsAny <string>()))
            .ReturnsAsync(default(Vehicle))
            .Verifiable();
            _mockTripRepository
            .Setup(m => m.AddAsync(It.IsAny <Trip>()))
            .ReturnsAsync(tripReference)
            .Verifiable();

            // Act
            var tripController = new TripController(_mockTripRepository.Object, _mockVehicleRepository.Object, _mockBookingRepository.Object, _mockLogger.Object);
            var result         = await tripController.Add(new TripRequestModel
            {
                FromCity      = "CityA",
                ToCity        = "CityB",
                DepartureTime = DateTime.Now.AddHours(2),
                ArrivalTime   = DateTime.Now.AddHours(10),
                VehicleNumber = vinReference
            });

            // Assert
            Assert.IsNotNull(result as NotFoundObjectResult);
            _mockVehicleRepository.Verify(m => m.GetByVinAsync(It.IsAny <string>()), Times.Once);
            _mockTripRepository.Verify(m => m.AddAsync(It.IsAny <Trip>()), Times.Never);
        }
        public async Task TripController_Add_WhenVehicleExists_ShouldReturnTripReference()
        {
            // Arrange
            var tripReference = StringHelper.RandomString(8);
            var vinReference  = StringHelper.RandomString(6);

            _mockVehicleRepository
            .Setup(m => m.GetByVinAsync(It.IsAny <string>()))
            .ReturnsAsync(TestDataHelper.GetVehicle(vinReference))
            .Verifiable();
            _mockTripRepository
            .Setup(m => m.AddAsync(It.IsAny <Trip>()))
            .ReturnsAsync(tripReference)
            .Verifiable();

            // Act
            var tripController = new TripController(_mockTripRepository.Object, _mockVehicleRepository.Object, _mockBookingRepository.Object, _mockLogger.Object);
            var result         = await tripController.Add(new TripRequestModel
            {
                FromCity      = "CityA",
                ToCity        = "CityB",
                DepartureTime = DateTime.Now.AddHours(2),
                ArrivalTime   = DateTime.Now.AddHours(10),
                VehicleNumber = vinReference
            });

            var objResult = result as OkObjectResult;

            // Assert
            Assert.IsNotNull(objResult);
            var actualTripReference = objResult.Value as string;

            Assert.IsNotNull(actualTripReference);
            Assert.AreEqual(tripReference, actualTripReference);
            _mockVehicleRepository.Verify(m => m.GetByVinAsync(It.IsAny <string>()), Times.Once);
            _mockTripRepository.Verify(m => m.AddAsync(It.IsAny <Trip>()), Times.Once);
        }