Exemple #1
0
 public IActionResult BookTicket(Guid timetableId, int ticketsToBook, UserBookTicketDto bookingUser)
 {
     try
     {
         _theaterService.BookTicket(timetableId, ticketsToBook, bookingUser);
         return(Ok(new
         {
             Success = true,
             Message = $"Successfully booked {ticketsToBook} tickets."
         }));
     }
     catch (ArgumentException argumentException)
     {
         return(BadRequest(new
         {
             Success = false,
             Error = argumentException.Message
         }));
     }
     catch (Exception exception)
     {
         return(new ObjectResult(new
         {
             Success = false,
             Error = exception.Message
         })
         {
             StatusCode = StatusCodes.Status500InternalServerError
         });
     }
 }
Exemple #2
0
        /// <summary>
        /// Books a ticket for currently logged in user.
        /// </summary>
        /// <param name="movieTimetableId"></param>
        /// <param name="ticketsToBook"></param>
        /// <param name="bookingUser" cref="UserBookTicketDto"></param>
        /// <exception cref="ArgumentNullException"></exception>
        public void BookTicket(Guid movieTimetableId, int ticketsToBook, UserBookTicketDto bookingUser)
        {
            if (bookingUser == null)
            {
                throw new ArgumentNullException(nameof(bookingUser), "User cannot be null.");
            }

            if (movieTimetableId == default)
            {
                throw new ArgumentNullException(nameof(movieTimetableId),
                                                "Timetable id should not have default value.");
            }

            User user = GetUserByUsername(bookingUser.Username);

            var query = @"UPDATE [User] 
                            SET [TicketsBooked] = @number
                            WHERE [Username] = @name";

            DynamicParameters parameters = new DynamicParameters();

            parameters.Add("@number", user.TicketsBooked + ticketsToBook);
            parameters.Add("@name", user.Username);

            var updatedAvailableTickets = GetAvailableTickets(movieTimetableId) - ticketsToBook;

            var availableTicketsQuery = @"UPDATE [MovieTimetable]
                                            SET [TicketsAvailable] = @updated
                                            WHERE [Id] = @timetableId";

            DynamicParameters ticketsParameters = new DynamicParameters();

            ticketsParameters.Add("@updated", updatedAvailableTickets);
            ticketsParameters.Add("@timetableId", movieTimetableId);

            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                connection.QueryFirstOrDefault(query, parameters);
                connection.QueryFirstOrDefault(availableTicketsQuery, ticketsParameters);
            }
        }
        public void BookTicket_Successful_Test()
        {
            var theaterServiceMock = new Mock <ITheaterService>();

            Guid id = new Guid();
            UserBookTicketDto user = new UserBookTicketDto();
            int numberOfTickets    = new int();

            theaterServiceMock.Setup(x => x.BookTicket(id, numberOfTickets, user));

            var controller   = new TheaterController(theaterServiceMock.Object);
            var actualResult = controller.BookTicket(id, numberOfTickets, user);

            var okResult     = (OkObjectResult)actualResult;
            var asJson       = JsonConvert.SerializeObject(okResult.Value);
            var deserialized = JsonConvert.DeserializeObject <Dictionary <string, object> >(asJson);

            Assert.IsTrue((bool)deserialized["Success"]);

            theaterServiceMock.VerifyAll();
        }
        public void BookTicket_NullValue_Test()
        {
            var theaterServiceMock = new Mock <ITheaterService>();

            Guid id = new Guid();
            UserBookTicketDto user = new UserBookTicketDto();
            int numberOfTickets    = new int();

            theaterServiceMock.Setup(x => x.BookTicket(id, numberOfTickets, user)).Throws <ArgumentException>();

            var controller   = new TheaterController(theaterServiceMock.Object);
            var actualResult = controller.BookTicket(id, numberOfTickets, user);

            var badRequestResult = (BadRequestObjectResult)actualResult;
            var asJson           = JsonConvert.SerializeObject(badRequestResult.Value);
            var deserialized     = JsonConvert.DeserializeObject <Dictionary <string, object> >(asJson);

            Assert.IsTrue((bool)deserialized["Success"] == false);

            theaterServiceMock.VerifyAll();
        }