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); }
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(); }
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); }
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); }
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); }
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(); }
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(); }
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); }
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()); }