public async Task Shoud_Not_Book_A_Room_When_Room_Already_Book()
        {
            //var fixture = new Fixture();
            var booking = new Booking
            {
                User      = fixture.Create <User>(),
                StartSlot = 5,
                EndSlot   = 3,
                Room      = fixture.Create <Room>()
            };
            var createdBooking = new CreatedBooking
            {
                AvaialbleBookingsForDateAndRoom = fixture.CreateMany <Booking>(10)
            };

            var bookingsBusiness = Substitute.For <IBookingsBusiness>();

            bookingsBusiness.BookARoomAsync(Arg.Any <Booking>()).Returns(createdBooking);
            var roomsBusiness = Substitute.For <IRoomsBusiness>();

            roomsBusiness.GetRoomsAsync().Returns(new List <Room> {
                booking.Room
            });
            var           bookingsController = new BookingsController(bookingsBusiness, roomsBusiness);
            IActionResult response           = await bookingsController.BookARoomAsync(booking);

            Assert.IsInstanceOf(typeof(OkObjectResult), response);
            var objectResult = (OkObjectResult)response;

            Assert.AreEqual(200, objectResult.StatusCode);
        }
Beispiel #2
0
        public void Verify_New_Booking_Test()
        {
            // Create new booking
            CreatedBooking newBooking = CreateBooking();

            // Validate new booking.
            AssertManager.Execute(() => Assert.IsTrue(newBooking.bookingid > 0),
                                  string.Format("Booking Id '{0}' of the bookings should not be 0.", newBooking.bookingid));

            // Validate complete booking details.
            Booking booking = client.Get <Booking>(string.Format("booking/{0}", newBooking.bookingid));

            AssertManager.Execute(() => Assert.IsTrue(booking.firstname.Equals(newBooking.booking.firstname)),
                                  string.Format("New booking first name '{0}' should match.", booking.firstname));
            AssertManager.Execute(() => Assert.IsTrue(booking.lastname.Equals(newBooking.booking.lastname)),
                                  string.Format("New booking last name '{0}' should match.", booking.lastname));
            AssertManager.Execute(() => Assert.IsTrue(booking.totalprice == newBooking.booking.totalprice),
                                  string.Format("New booking total price '{0}' should match.", booking.totalprice));
            AssertManager.Execute(() => Assert.IsTrue(booking.depositpaid.Equals(newBooking.booking.depositpaid)),
                                  string.Format("New booking deposit paid'{0}' should match.", booking.depositpaid));
            AssertManager.Execute(() => Assert.IsTrue(booking.bookingdates.checkin.Equals(newBooking.booking.bookingdates.checkin)),
                                  string.Format("New booking check-in date '{0}' should match.", booking.bookingdates.checkin));
            AssertManager.Execute(() => Assert.IsTrue(booking.bookingdates.checkout.Equals(newBooking.booking.bookingdates.checkout)),
                                  string.Format("New booking check-out date '{0}' should match.", booking.bookingdates.checkout));

            // Validate assertions.
            AssertManager.ValidateTest();
        }
Beispiel #3
0
        public async Task Shoud_Book_A_Room_When_Same_Date_And_Slot_But_Another_Room()
        {
            var fixture = new Fixture();
            var booking = new Booking
            {
                User      = fixture.Create <User>(),
                StartSlot = 5,
                EndSlot   = 5,
                Date      = new DateTime(2019, 3, 25),
                Room      = fixture.Build <Room>()
                            .With(r => r.Name, "room0")
                            .Create()
            };

            var bookingsRepository = Substitute.For <IBookingsRepository>();

            bookingsRepository.GetBookingsByDateAndRoomAsync(new DateTime(2019, 3, 25), "room0").Returns(new List <Booking>(0));
            bookingsRepository.BookARoomAsync(Arg.Any <Booking>()).Returns(new Booking());
            var            bookingsBusiness           = new BookingsBusiness(bookingsRepository);
            CreatedBooking createdBookingFromBusiness = await bookingsBusiness.BookARoomAsync(booking);

            await bookingsRepository.Received().BookARoomAsync(Arg.Any <Booking>());

            Assert.IsNotNull(createdBookingFromBusiness.Booking);
        }
Beispiel #4
0
        public async Task Shoud_Not_Book_A_Room_If_Already_Booking()
        {
            var fixture = new Fixture();
            var booking = new Booking
            {
                User      = fixture.Create <User>(),
                StartSlot = 5,
                EndSlot   = 5,
                Date      = new DateTime(2019, 3, 25),
                Room      = fixture.Build <Room>()
                            .With(r => r.Name, "room0")
                            .Create()
            };
            var bookings = fixture.Build <Booking>()
                           .With(b => b.Date, new DateTime(2019, 3, 25))
                           .With(b => b.Room, fixture.Build <Room>()
                                 .With(r => r.Name, "room0")
                                 .Create())
                           .CreateMany(10);

            bookings.ElementAt(4).StartSlot = 5;
            bookings.ElementAt(4).EndSlot   = 7;

            var bookingsRepository = Substitute.For <IBookingsRepository>();

            bookingsRepository.GetBookingsByDateAndRoomAsync(new DateTime(2019, 3, 25), "room0").Returns(bookings);
            var            bookingsBusiness           = new BookingsBusiness(bookingsRepository);
            CreatedBooking createdBookingFromBusiness = await bookingsBusiness.BookARoomAsync(booking);

            await bookingsRepository.DidNotReceive().BookARoomAsync(Arg.Any <Booking>());

            Assert.IsNull(createdBookingFromBusiness.Booking);
        }
Beispiel #5
0
        public async Task Shoud_Book_A_Room()
        {
            var fixture = new Fixture();
            var booking = new Booking
            {
                User      = fixture.Create <User>(),
                StartSlot = 5,
                EndSlot   = 5,
                Room      = fixture.Create <Room>()
            };
            var bookingForSubstitute = new Booking
            {
                Id        = 1,
                User      = booking.User,
                StartSlot = booking.StartSlot,
                EndSlot   = booking.EndSlot,
                Room      = booking.Room
            };
            var bookingsRepository = Substitute.For <IBookingsRepository>();

            bookingsRepository.BookARoomAsync(Arg.Any <Booking>()).Returns(bookingForSubstitute);
            var            bookingsBusiness           = new BookingsBusiness(bookingsRepository);
            CreatedBooking createdBookingFromBusiness = await bookingsBusiness.BookARoomAsync(booking);

            Assert.Less(0, createdBookingFromBusiness.Booking.Id);
        }
Beispiel #6
0
        public void Verify_GetBookings_Returns_Valid_Data_Test()
        {
            // Create new booking.
            CreatedBooking newBooking = CreateBooking();

            // Get all bookings post creation of new booking.
            List <Bookings> actBookings = client.Get <List <Bookings> >("booking");

            // Validate get all bookings
            AssertManager.Execute(() => Assert.AreEqual(actBookings.Where(b => b.Bookingid == newBooking.bookingid).Count(), 1),
                                  string.Format("Booking Id '{0}' of the bookings should exist when get all bookings fetched.", newBooking.bookingid));

            // Validate assertions.
            AssertManager.ValidateTest();
        }
Beispiel #7
0
        public void Verify_Delete_Booking_Test()
        {
            // Create new booking
            CreatedBooking newBooking = CreateBooking();

            // Delete the created booking.
            client.Delete(string.Format("booking/{0}", newBooking.bookingid));

            // Get all bookings post deletion of new booking.
            List <Bookings> actBookings = client.Get <List <Bookings> >("booking");

            // Validate get all bookings
            AssertManager.Execute(() => Assert.AreEqual(actBookings.Where(b => b.Bookingid == newBooking.bookingid).Count(), 0),
                                  string.Format("Get all bookings should not have deleted '{0}' booking id.", newBooking.bookingid));

            // Validate assertions.
            AssertManager.ValidateTest();
        }
Beispiel #8
0
        public async Task <IActionResult> BookARoomAsync([FromBody] Booking booking)
        {
            IEnumerable <Room> rooms = await _roomBusiness.GetRoomsAsync();

            if (!ModelState.IsValid ||
                rooms.All(r => r.Name != booking.Room.Name))
            {
                return(BadRequest());
            }

            CreatedBooking createdBooking = await _bookingsBusiness.BookARoomAsync(booking);

            if (createdBooking.Booking == null)
            {
                return(Ok(createdBooking));
            }

            return(CreatedAtAction("BookARoomAsync", createdBooking));
        }
        public async Task Shoud_Book_A_Room()
        {
            var fixture = new Fixture();
            var booking = new Booking
            {
                User      = fixture.Create <User>(),
                StartSlot = 5,
                EndSlot   = 5,
                Room      = fixture.Create <Room>()
            };
            var createdBookingForSubstitute = new CreatedBooking
            {
                Booking = new Booking
                {
                    Id        = 1,
                    User      = booking.User,
                    StartSlot = booking.StartSlot,
                    EndSlot   = booking.EndSlot,
                    Room      = booking.Room
                }
            };
            var bookingsBusiness = Substitute.For <IBookingsBusiness>();

            bookingsBusiness.BookARoomAsync(Arg.Any <Booking>()).Returns(createdBookingForSubstitute);
            var roomsBusiness = Substitute.For <IRoomsBusiness>();

            roomsBusiness.GetRoomsAsync().Returns(new List <Room> {
                booking.Room
            });
            var           bookingsController = new BookingsController(bookingsBusiness, roomsBusiness);
            IActionResult response           = await bookingsController.BookARoomAsync(booking);

            Assert.IsInstanceOf(typeof(CreatedAtActionResult), response);
            var objectResult = (CreatedAtActionResult)response;

            Assert.AreEqual(201, objectResult.StatusCode);
            var bookingFromController = (CreatedBooking)objectResult.Value;

            Assert.Less(0, bookingFromController.Booking.Id);
        }
Beispiel #10
0
        public async Task Shoud_Get_All_Available_Booking_When_Room_Is_Already_Booking()
        {
            var fixture = new Fixture();
            var booking = new Booking
            {
                User      = fixture.Create <User>(),
                StartSlot = 10,
                EndSlot   = 10,
                Date      = new DateTime(2019, 3, 25),
                Room      = fixture.Build <Room>()
                            .With(r => r.Name, "room0")
                            .Create()
            };
            var bookings = fixture.Build <Booking>()
                           .With(b => b.Date, new DateTime(2019, 3, 25))
                           .With(b => b.Room, fixture.Build <Room>()
                                 .With(r => r.Name, "room0")
                                 .Create())
                           .CreateMany(2);

            bookings.ElementAt(0).StartSlot = 5;
            bookings.ElementAt(0).EndSlot   = 5;
            bookings.ElementAt(1).StartSlot = 10;
            bookings.ElementAt(1).EndSlot   = 10;

            var bookingsRepository = Substitute.For <IBookingsRepository>();

            bookingsRepository.GetBookingsByDateAndRoomAsync(new DateTime(2019, 3, 25), "room0").Returns(bookings);
            var            bookingsBusiness           = new BookingsBusiness(bookingsRepository);
            CreatedBooking createdBookingFromBusiness = await bookingsBusiness.BookARoomAsync(booking);

            await bookingsRepository.DidNotReceive().BookARoomAsync(Arg.Any <Booking>());

            Assert.IsNull(createdBookingFromBusiness.Booking);
            Assert.AreEqual(22, createdBookingFromBusiness.AvaialbleBookingsForDateAndRoom.Count());
        }