Пример #1
0
        public void Multiple_conflicting_reservations_are_handled_correctly()
        {
            //Given
            var rooms         = new RoomTypes();
            var roomTypeId    = Guid.NewGuid();
            var hotelId       = Guid.NewGuid();
            var reservationId = Guid.NewGuid();
            var noOfUnits     = 1;

            rooms.Hydrate(new RoomsCreated(roomTypeId, "Double Room", noOfUnits, hotelId));
            rooms.Hydrate(new RoomsReserved(reservationId, new DateTime(2016, 04, 20), new DateTime(2016, 04, 22), roomTypeId, "guest 1", noOfUnits));
            rooms.Hydrate(new RoomsReserved(reservationId, new DateTime(2016, 04, 20), new DateTime(2016, 04, 22), roomTypeId, "guest 3", noOfUnits));
            //When
            var checkInDate  = new DateTime(2016, 04, 19);
            var checkOutDate = new DateTime(2016, 04, 23);

            object[]     events = null;
            TestDelegate when   = () =>
            {
                events = rooms.Reserve(reservationId, "guest 2", roomTypeId, checkInDate, checkOutDate, noOfUnits).ToArray();
            };
            //Then
            var ex = Assert.Throws <InvalidOperationException>(when);

            Assert.That(events, Is.Null);
            Assert.That(ex.Message, Is.EqualTo("No vacancy."));
        }
Пример #2
0
        public void New_reservation_with_checkin_before_and_checkout_after_an_existing_one_is_not_OK()
        {
            //Given
            var rooms         = new RoomTypes();
            var roomTypeId    = Guid.NewGuid();
            var hotelId       = Guid.NewGuid();
            var noOfUnits     = 1;
            var reservationId = Guid.NewGuid();

            rooms.Hydrate(new RoomsCreated(roomTypeId, "Double Room", noOfUnits, hotelId));
            rooms.Hydrate(new RoomsReserved(reservationId, new DateTime(2016, 04, 20), new DateTime(2016, 04, 22), roomTypeId, "guest 1", noOfUnits));
            //When
            var checkInDate  = new DateTime(2016, 04, 19);
            var checkOutDate = new DateTime(2016, 04, 23);

            object[]     events = null;
            TestDelegate when   = () =>
            {
                events = rooms.Reserve(reservationId, "guest 2", roomTypeId, checkInDate, checkOutDate, noOfUnits).ToArray();
            };
            //Then
            var ex = Assert.Throws <InvalidOperationException>(when);

            Assert.That(events, Is.Null);
            Assert.That(ex.Message, Is.EqualTo("No vacancy."));
        }
Пример #3
0
        public void OKMaking_a_reservation_which_ends_before_a_subsequent_reservation_is_OK()
        {
            //Given
            var rooms         = new RoomTypes();
            var roomTypeId    = Guid.NewGuid();
            var hotelId       = Guid.NewGuid();
            var reservationId = Guid.NewGuid();

            rooms.Hydrate(new RoomsCreated(roomTypeId, "Double Room", 1, hotelId));
            var laterReservationCheckinDate  = new DateTime(2016, 5, 3);
            var laterReservationCheckoutDate = new DateTime(2016, 5, 4);

            rooms.Hydrate(new RoomsReserved(reservationId, laterReservationCheckinDate, laterReservationCheckoutDate, roomTypeId, "guest 1", 1));
            //When
            var checkInDate  = new DateTime(2016, 5, 2);
            var checkOutDate = laterReservationCheckinDate;
            var events       = rooms.Reserve(reservationId, "guest 2", Guid.NewGuid(), checkInDate, checkOutDate, 1).ToArray();

            //Then
            Assert.AreEqual(1, events.Length);
            var roomsReserved = events[0] as RoomsReserved;

            Assert.That(roomsReserved, Is.TypeOf <RoomsReserved>());
            // ReSharper disable once PossibleNullReferenceException
            Assert.AreEqual("guest 2", roomsReserved.GuestId);
            Assert.AreEqual(roomTypeId, roomsReserved.RoomTypeId);
            Assert.AreEqual(checkInDate, roomsReserved.CheckInDate);
            Assert.AreEqual(checkOutDate, roomsReserved.CheckoutDate);
            Assert.AreEqual(1, roomsReserved.NoOfUnits);
        }
Пример #4
0
        public void Checking_in_same_day_as_previous_reservation_checkout_is_OK()
        {
            //Given
            var rooms         = new RoomTypes();
            var roomTypeId    = Guid.NewGuid();
            var hotelId       = Guid.NewGuid();
            var reservationId = Guid.NewGuid();
            var noOfUnits     = 1;

            rooms.Hydrate(new RoomsCreated(roomTypeId, "Double Room", noOfUnits, hotelId));
            rooms.Hydrate(new RoomsReserved(reservationId, new DateTime(2016, 04, 20), new DateTime(2016, 04, 22), roomTypeId, "guest 1", noOfUnits));
            //When
            var checkInDate   = new DateTime(2016, 04, 22);
            var checkOutDate  = new DateTime(2016, 04, 23);
            var events        = rooms.Reserve(reservationId, "guest 2", Guid.NewGuid(), checkInDate, checkOutDate, noOfUnits).ToArray();
            var roomsReserved = events[0];

            //Then
            Assert.That(roomsReserved, Is.TypeOf <RoomsReserved>());
        }
Пример #5
0
        public void New_reservations_when_there_are_less_existing_reservations_than_there_are_rooms_of_this_type_are_OK()
        {
            //Given
            var rooms         = new RoomTypes();
            var roomTypeId    = Guid.NewGuid();
            var hotelId       = Guid.NewGuid();
            var reservationId = Guid.NewGuid();
            var totalNumberOfDoubleRoomsInThisHotel = 3;

            rooms.Hydrate(new RoomsCreated(roomTypeId, "Double Room", totalNumberOfDoubleRoomsInThisHotel, hotelId));
            rooms.Hydrate(new RoomsReserved(reservationId, new DateTime(2016, 04, 20), new DateTime(2016, 04, 22), roomTypeId, "guest 1", 1));
            rooms.Hydrate(new RoomsReserved(reservationId, new DateTime(2016, 04, 20), new DateTime(2016, 04, 22), roomTypeId, "guest 3", 1));
            //When
            var checkInDate   = new DateTime(2016, 04, 19);
            var checkOutDate  = new DateTime(2016, 04, 23);
            var events        = rooms.Reserve(reservationId, "guest 2", Guid.NewGuid(), checkInDate, checkOutDate, totalNumberOfDoubleRoomsInThisHotel).ToArray();
            var roomsReserved = events[0];

            //Then
            Assert.That(roomsReserved, Is.TypeOf <RoomsReserved>());
        }
Пример #6
0
        public void New_reservations_when_all_existing_rooms_are_full_is_not_OK()
        {
            //Given
            var rooms         = new RoomTypes();
            var roomTypeId    = Guid.NewGuid();
            var hotelId       = Guid.NewGuid();
            var reservationId = Guid.NewGuid();
            var totalNumberOfDoubleRoomsInThisHotel = 2;

            rooms.Hydrate(new RoomsCreated(roomTypeId, "Double Room", totalNumberOfDoubleRoomsInThisHotel, hotelId));
            rooms.Hydrate(new RoomsReserved(reservationId, new DateTime(2016, 04, 20), new DateTime(2016, 04, 22), roomTypeId, "guest 1", totalNumberOfDoubleRoomsInThisHotel));
            //When
            var checkInDate  = new DateTime(2016, 04, 19);
            var checkOutDate = new DateTime(2016, 04, 23);

            object[]     events = null;
            TestDelegate when   = () => events = rooms.Reserve(reservationId, "guest 2", roomTypeId, checkInDate, checkOutDate, totalNumberOfDoubleRoomsInThisHotel).ToArray();
            //Then
            var ex = Assert.Throws <InvalidOperationException>(when);

            Assert.That(events, Is.Null);
            Assert.That(ex.Message, Is.EqualTo("No vacancy."));
        }
        public void GivenRoomCreated_WhenAlreadyExists_ThenInvalidOperationException()
        {
            //Given
            var rooms = new RoomTypes();

            rooms.Hydrate(new RoomsCreated(Guid.NewGuid(), "RoomTypeId", 1, Guid.NewGuid()));
            //When
            object[]     events = null;
            TestDelegate when   = () => events = rooms.Create(Guid.NewGuid(), Guid.NewGuid(), "RoomTypeId", 1).ToArray();
            //Then
            var ex = Assert.Throws <InvalidOperationException>(when);

            Assert.That(events, Is.Null);
            Assert.That(ex.Message, Is.EqualTo("Room type already created."));
        }
Пример #8
0
        public void Checking_out_on_the_same_day_as_checking_in_is_not_OK()
        {
            //Given
            var rooms = new RoomTypes();

            rooms.Hydrate(new RoomsCreated(Guid.NewGuid(), "Double Room", 1, Guid.NewGuid()));
            //When
            object[]     events = null;
            TestDelegate when   = () => events = rooms.Reserve(Guid.NewGuid(), "guest1", Guid.NewGuid(), new DateTime(2016, 03, 2), new DateTime(2016, 03, 2), 1).ToArray();
            //Then
            var ex = Assert.Throws <InvalidOperationException>(when);

            Assert.That(events, Is.Null);
            Assert.That(ex.Message, Is.EqualTo("Checkin date must be before checkout date."));
        }
Пример #9
0
        public void Must_reserve_at_least_one_room()
        {
            //Given
            var rooms = new RoomTypes();

            rooms.Hydrate(new RoomsCreated(Guid.NewGuid(), "RoomTypeId", 1, Guid.NewGuid()));
            //When
            object[]     events = null;
            TestDelegate when   = () => events = rooms.Reserve(Guid.NewGuid(), "guest1", Guid.NewGuid(), new DateTime(2016, 03, 1), new DateTime(2016, 03, 2), 0).ToArray();
            //Then
            var ex = Assert.Throws <InvalidOperationException>(when);

            Assert.That(events, Is.Null);
            Assert.That(ex.Message, Is.EqualTo("Must reserve at least one room."));
        }
Пример #10
0
        public void Reserving_without_guestid_fails()
        {
            //Given
            var rooms      = new RoomTypes();
            var roomTypeId = Guid.NewGuid();
            var hotelId    = Guid.NewGuid();

            rooms.Hydrate(new RoomsCreated(roomTypeId, "Double Room", 5, hotelId));
            //When
            object[]     events = null;
            TestDelegate when   = () => events = rooms.Reserve(Guid.NewGuid(), "", Guid.NewGuid(), new DateTime(2016, 04, 2), new DateTime(2016, 04, 7), 1).ToArray();
            //Then
            var ex = Assert.Throws <InvalidOperationException>(when);

            Assert.That(events, Is.Null);
            Assert.That(ex.Message, Is.EqualTo("GuestId cannot be blank."));
        }
Пример #11
0
        public void Reserving_more_rooms_than_exist_for_a_type_of_room_is_not_OK()
        {
            //Given
            var rooms      = new RoomTypes();
            var roomTypeId = Guid.NewGuid();
            var hotelId    = Guid.NewGuid();

            rooms.Hydrate(new RoomsCreated(roomTypeId, "Double Room", 2, hotelId));
            //When
            var checkInDate  = new DateTime(2016, 04, 2);
            var checkOutDate = new DateTime(2016, 04, 7);

            object[]     events = null;
            TestDelegate when   = () => events = rooms.Reserve(Guid.NewGuid(), "guest 1", Guid.NewGuid(), checkInDate, checkOutDate, 3).ToArray();
            //Then
            var ex = Assert.Throws <InvalidOperationException>(when);

            Assert.That(events, Is.Null);
            Assert.That(ex.Message, Is.EqualTo("Not enough rooms available."));
        }
Пример #12
0
        public void Reserving_a_room_type_for_which_there_are_no_other_reservations_is_OK()
        {
            //Given
            var rooms      = new RoomTypes();
            var roomTypeId = Guid.NewGuid();
            var hotelId    = Guid.NewGuid();

            rooms.Hydrate(new RoomsCreated(roomTypeId, "Double Room", 5, hotelId));
            //When
            var checkInDate  = new DateTime(2016, 04, 2);
            var checkOutDate = new DateTime(2016, 04, 7);
            var events       = rooms.Reserve(Guid.NewGuid(), "guest 1", Guid.NewGuid(), checkInDate, checkOutDate, 1).ToArray();

            //Then
            Assert.AreEqual(1, events.Length);
            var roomsReserved = events[0] as RoomsReserved;

            Assert.That(roomsReserved, Is.TypeOf <RoomsReserved>());
            // ReSharper disable once PossibleNullReferenceException
            Assert.AreEqual("guest 1", roomsReserved.GuestId);
            Assert.AreEqual(roomTypeId, roomsReserved.RoomTypeId);
            Assert.AreEqual(checkInDate, roomsReserved.CheckInDate);
            Assert.AreEqual(checkOutDate, roomsReserved.CheckoutDate);
        }