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