示例#1
0
        public StatusCodeResult Delete(int id)
        {
            try
            {
                var reservation = _unitOfWork.ReservationRepository.Get(id);
                if (reservation == null)
                {
                    return(new StatusCodeResult(StatusCodes.Status404NotFound));
                }

                var validator = new SchedulerEventValidation(_unitOfWork);
                // cannot delete other reservations, except the ones with ownership
                if (!validator.IsOwnedByUser(_userManager.GetUserId(User), reservation.UserId))
                {
                    return(new StatusCodeResult(StatusCodes.Status403Forbidden));
                }

                _unitOfWork.ReservationRepository.Delete(reservation);
                _unitOfWork.Save();

                return(new StatusCodeResult(StatusCodes.Status200OK));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message, ex);
                return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
            }
        }
示例#2
0
        public void ValidateModel_ModelIsNull_ReturnFalse()
        {
            // Arrange
            var uow = new Mock <IUnitOfWork>();
            var schedulerEventValidation = new SchedulerEventValidation(uow.Object);

            SchedulerEventModel model = null;
            // Act
            var result = schedulerEventValidation.IsValidSchedulerEventModel(model);

            // Assert
            Assert.IsFalse(result);
        }
示例#3
0
        public void ValidateModel_NoOverlappingWithOtherReservations_ReturnTrue()
        {
            // Arrange
            var model = CreateSchedulerEventModel();

            model.StartDate = "4/9/2018 16:00";
            model.EndDate   = "4/9/2018 17:00";

            var modelStartDate = DateTime.Parse(model.StartDate);
            var modelEndDate   = DateTime.Parse(model.EndDate);

            var reservation1 = new Reservation
            {
                RoomId = 1,
                Start  = DateTime.Parse("4/9/2018 12:00"),
                End    = DateTime.Parse("4/9/2018 14:00")
            };
            var reservation2 = new Reservation
            {
                RoomId = 1,
                Start  = DateTime.Parse("4/9/2018 15:00"),
                End    = DateTime.Parse("4/9/2018 16:00")
            };

            var listOfReservations = new List <Reservation>
            {
                reservation1,
                reservation2
            };

            var reservationRepository = new Mock <IRepository <Reservation> >();

            reservationRepository
            .Setup(repo => repo.GetAll()).Returns(listOfReservations.AsQueryable());


            var uow = new Mock <IUnitOfWork>();

            uow.Setup(x => x.ReservationRepository).Returns(reservationRepository.Object);
            var schedulerEventValidation = new SchedulerEventValidation(uow.Object);


            // Act
            var result = schedulerEventValidation.IsValidSchedulerEventModel(model);

            // Assert
            Assert.IsTrue(result);
        }
示例#4
0
        public void ValidateModel_StartEndDateAreNull_ReturnFalse()
        {
            // Arrange
            var uow = new Mock <IUnitOfWork>();
            var schedulerEventValidation = new SchedulerEventValidation(uow.Object);

            var model = CreateSchedulerEventModel();

            model.StartDate = null;
            model.EndDate   = null;

            // Act
            var result = schedulerEventValidation.IsValidSchedulerEventModel(model);

            // Assert
            Assert.IsFalse(result);
        }
示例#5
0
        public async Task <StatusCodeResult> Update([FromBody] SchedulerEventModel model)
        {
            try
            {
                var validator = new SchedulerEventValidation(_unitOfWork);
                if (!validator.IsValidSchedulerEventModel(model))
                {
                    return(new StatusCodeResult(StatusCodes.Status403Forbidden));
                }
                var reservation = _unitOfWork.ReservationRepository.GetAll().Include(x => x.Room).FirstOrDefault(x => x.Id == model.Id);
                if (reservation == null)
                {
                    return(new StatusCodeResult(StatusCodes.Status404NotFound));
                }

                // cannot update other reservations, except the ones with ownership
                if (!validator.IsOwnedByUser(_userManager.GetUserId(User), reservation.UserId))
                {
                    return(new StatusCodeResult(StatusCodes.Status403Forbidden));
                }

                reservation.ModifiedDate = DateTime.Now;
                reservation.IPAddress    = Request.HttpContext.Connection.RemoteIpAddress.ToString();
                reservation.Start        = Convert.ToDateTime(model.StartDate);
                reservation.End          = Convert.ToDateTime(model.EndDate);
                reservation.Title        = model.Title;
                reservation.Description  = model.Description;
                reservation.Status       = ReservationStatusEnum.Modified.ToString();
                reservation.RoomId       = model.RoomId;

                _unitOfWork.ReservationRepository.Update(reservation);
                _unitOfWork.Save();

                var message = $"Reservation titled: {reservation.Title} {Environment.NewLine} from {reservation.Start.ToString("dd/MMM/yy HH:mm")} to {reservation.End.ToString("dd/MMM/yy HH:mm")} {Environment.NewLine} on room {reservation.Room.Name} has changed !";
                await _hubContext.Clients.All.SendAsync("ReservationChanged", message);

                return(new StatusCodeResult(StatusCodes.Status200OK));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message, ex);
                return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
            }
        }
示例#6
0
        public void ValidateModel_StartDateHigherThanEndDate_ReturnFalse()
        {
            // Arrange
            var reservationRepository = new Mock <IRepository <Reservation> >();
            var uow = new Mock <IUnitOfWork>();

            uow.Setup(x => x.ReservationRepository).Returns(reservationRepository.Object);
            var schedulerEventValidation = new SchedulerEventValidation(uow.Object);

            var model = CreateSchedulerEventModel();

            model.StartDate = "4/9/2018 17:00";
            model.EndDate   = "3/9/2018 16:00";

            // Act
            var result = schedulerEventValidation.IsValidSchedulerEventModel(model);

            // Assert
            Assert.IsFalse(result);
        }
示例#7
0
        public void ValidateModel_StartEndDatesCannotBeParsed_ThrowFormatException()
        {
            // Arrange
            var uow = new Mock <IUnitOfWork>();
            var schedulerEventValidation = new SchedulerEventValidation(uow.Object);

            var model = CreateSchedulerEventModel();

            model.StartDate = "33/22/2001212 160:212:321";
            model.EndDate   = "33/22/2001212 160:212:322";

            // Act
            var action = new Action(() =>
            {
                schedulerEventValidation.IsValidSchedulerEventModel(model);
            });

            // Assert
            Assert.ThrowsException <FormatException>(action);
        }
示例#8
0
        public StatusCodeResult Insert([FromBody] SchedulerEventModel model)
        {
            try
            {
                var validator = new SchedulerEventValidation(_unitOfWork);
                if (!validator.IsValidSchedulerEventModel(model))
                {
                    return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
                }

                var ipAddress = Request.HttpContext.Connection.RemoteIpAddress.ToString();
                var user      = _userManager.GetUserAsync(HttpContext.User);
                if (user != null && user.Result != null)
                {
                    var reservation = new Reservation
                    {
                        Description  = model.Description,
                        Start        = Convert.ToDateTime(model.StartDate),
                        End          = Convert.ToDateTime(model.EndDate),
                        RoomId       = model.RoomId,
                        Status       = model.Status,
                        Title        = model.Title,
                        AddedDate    = DateTime.Now,
                        ModifiedDate = DateTime.Now,
                        IPAddress    = ipAddress,
                        UserId       = user.Result.Id
                    };

                    _unitOfWork.ReservationRepository.Insert(reservation);
                    _unitOfWork.Save();
                }

                return(new StatusCodeResult(StatusCodes.Status201Created));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message, ex);
                return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
            }
        }