Esempio n. 1
0
        public void BookParking_WhenParkingPeriodIsAlreadyTaken_ShouldNotBookParking(
            Garage sut,
            Car car)
        {
            var parkingPeriod = new ParkingPeriod(car, new DateTime(2020, 1, 10, 14, 10, 0), new DateTime(2020, 1, 10, 14, 50, 0));

            var result = sut.BookParking(parkingPeriod);

            result.Should().BeNull();
        }
Esempio n. 2
0
        public void BookParking_WhenParkingPeriodIsAvailable_ShouldBookParking(
            Garage sut,
            Car car)
        {
            var parkingPeriod = new ParkingPeriod(car, new DateTime(2020, 1, 10, 13, 0, 0), new DateTime(2020, 1, 10, 13, 30, 0));

            var result = sut.BookParking(parkingPeriod);

            result.Reference.Should().Be("30A");
            result.ReservedPeriod.Should().Contain(parkingPeriod);
        }
        public void ConflictsWith_WhenParkingPeriodIsEqualToAnotherParkingPeriod_ShouldReturnTrue(
            Car car1,
            Car car2)
        {
            var initialDate = new DateTime(2020, 1, 1, 14, 0, 0);
            var endDate     = new DateTime(2020, 1, 1, 15, 0, 0);

            var sut = new ParkingPeriod(car1, initialDate, endDate);

            var result = sut.ConflictsWith(new ParkingPeriod(car2, initialDate, endDate));

            result.Should().BeTrue();
        }
        public void ParkingPeriod_WhenDataProvidedIsValid_ShouldConstructTheObject(
            Car car)
        {
            var initialDate = new DateTime(2020, 1, 1, 14, 0, 0);
            var endDate     = new DateTime(2020, 1, 1, 15, 0, 0);

            var parkingPeriod = new ParkingPeriod(car, initialDate, endDate);

            parkingPeriod.Should().NotBeNull();
            parkingPeriod.Car.Should().Be(car);
            parkingPeriod.InitialDate.Should().Be(initialDate);
            parkingPeriod.EndDate.Should().Be(endDate);
        }
Esempio n. 5
0
        public ParkingSpot BookParking(ParkingPeriod parkingPeriod)
        {
            var availableParkSpot = ParkingSpots.FirstOrDefault(x
                                                                => x.ReservedPeriod.Any(y => !y.ConflictsWith(parkingPeriod)));

            if (availableParkSpot == null)
            {
                return(null);
            }

            availableParkSpot.ReservedPeriod.Add(parkingPeriod);

            return(availableParkSpot);
        }
        public void ConflictsWith_WhenParkingPeriodInitialDateIsBetweenAnotherParkingPeriod_ShouldReturnTrue(
            Car car1,
            Car car2)
        {
            var initialDate1 = new DateTime(2020, 1, 1, 14, 0, 0);
            var endDate1     = new DateTime(2020, 1, 1, 15, 0, 0);

            var initialDate2 = new DateTime(2020, 1, 1, 14, 59, 0);
            var endDate2     = new DateTime(2020, 1, 1, 15, 30, 0);

            var sut = new ParkingPeriod(car1, initialDate1, endDate1);

            var result = sut.ConflictsWith(new ParkingPeriod(car2, initialDate2, endDate2));

            result.Should().BeTrue();
        }
        public void ConflictsWith_WhenParkingPeriodInitialDateIsTheSameAsAnotherParkingPeriodEndDate_ShouldReturnFalse(
            Car car1,
            Car car2)
        {
            var initialDate1 = new DateTime(2020, 1, 1, 14, 0, 0);
            var endDate1     = new DateTime(2020, 1, 1, 15, 0, 0);

            var initialDate2 = new DateTime(2020, 1, 1, 15, 0, 0);
            var endDate2     = new DateTime(2020, 1, 1, 16, 0, 0);

            var sut = new ParkingPeriod(car1, initialDate1, endDate1);

            var result = sut.ConflictsWith(new ParkingPeriod(car2, initialDate2, endDate2));

            result.Should().BeFalse("Because I assume there is no problem in having a parking booked from 14h to 15h and another one from 15h to 16h for example.");
        }
Esempio n. 8
0
        public AutoNSubstituteDataAttribute() : base(() =>
        {
            var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());

            var parkingPeriod1 = new ParkingPeriod(
                new Car()
            {
                LicensePlate = "jw3221"
            },
                new DateTime(2020, 1, 10, 13, 0, 0),
                new DateTime(2020, 1, 10, 15, 0, 0));

            var parkingPeriod2 = new ParkingPeriod(
                new Car()
            {
                LicensePlate = "cb1234"
            },
                new DateTime(2020, 1, 10, 13, 30, 0),
                new DateTime(2020, 1, 10, 14, 30, 0));

            var parkingSpot1 = new ParkingSpot
            {
                Reference = "25B"
            };

            var parkingSpot2 = new ParkingSpot
            {
                Reference = "30A"
            };

            parkingSpot1.ReservedPeriod.Add(parkingPeriod1);
            parkingSpot2.ReservedPeriod.Add(parkingPeriod2);

            var garage = new Garage();

            garage.ParkingSpots.Add(parkingSpot1);
            garage.ParkingSpots.Add(parkingSpot2);

            fixture.Register(() => garage);

            return(fixture);
        })
        {
        }
Esempio n. 9
0
        public async Task <bool> Handle(BookParkingCommand request, CancellationToken cancellationToken)
        {
            var garage = await _garageRepository.GetById(request.GarageId);

            if (garage == null)
            {
                _logger?.LogWarning($"Garage {request.GarageId} not found.");
                return(true);
            }

            var parkingPeriod = new ParkingPeriod(
                new Car()
            {
                LicensePlate = request.LicensePlate
            },
                request.From,
                request.To);

            var parkingSpot = garage.BookParking(parkingPeriod);

            if (parkingSpot == null)
            {
                await _bus.RaiseEvent(new ParkingAlreadyTaken(
                                          request.GarageId,
                                          request.LicensePlate,
                                          request.From,
                                          request.To), _bookingReslutTopicKey);

                return(true);
            }

            await _bus.RaiseEvent(new ParkingBooked(
                                      request.GarageId,
                                      request.LicensePlate,
                                      request.From,
                                      request.To,
                                      parkingSpot.Reference), _bookingReslutTopicKey);

            return(true);
        }
        public static Garage CreateGarage()
        {
            var garage = new Garage(Guid.Parse("b8766e1b-2b3f-43fd-b31c-e0667df469d0"));

            var parkingPeriod1 = new ParkingPeriod(
                new Car()
            {
                LicensePlate = "jw3221"
            },
                new DateTime(2020, 1, 10, 13, 0, 0),
                new DateTime(2020, 1, 10, 15, 0, 0));

            var parkingPeriod2 = new ParkingPeriod(
                new Car()
            {
                LicensePlate = "cb1234"
            },
                new DateTime(2020, 1, 10, 13, 30, 0),
                new DateTime(2020, 1, 10, 14, 30, 0));

            var parkingSpot1 = new ParkingSpot
            {
                Reference = "25B"
            };

            var parkingSpot2 = new ParkingSpot
            {
                Reference = "30A"
            };

            parkingSpot1.ReservedPeriod.Add(parkingPeriod1);
            parkingSpot2.ReservedPeriod.Add(parkingPeriod2);

            garage.ParkingSpots.Add(parkingSpot1);
            garage.ParkingSpots.Add(parkingSpot2);

            return(garage);
        }