public void Create_ThrowExceptionIfHotelWithGivenIdDoNotExist()
        {
            var model = new HotelReviewWriteViewModel {
                HotelId = 1
            };
            Action testCode = () => this.hotelReviewsService.Create(model, "testUsername");

            testCode.ShouldThrow <HotelNullException>();
        }
        public IActionResult Write(HotelReviewWriteViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(base.RedirectToAction("Write", new { hotelId = model.HotelId }));
            }

            this.hotelReviewsService.Create(model, this.User.Identity.Name);

            return(base.RedirectToAction("Details", "Hotels", new { model.HotelId }));
        }
        public IActionResult Write(int hotelId)
        {
            if (this.hotelReviewsService.CheckForExistingReview(hotelId, this.User.Identity.Name))
            {
                string errorMsg = "You already write a review for this hotel!";
                return(base.View(GlobalConstants.ErrorViewName, errorMsg));
            }

            string hotelName = this.hotelsService.GetNameById(hotelId);
            var    viewModel = new HotelReviewWriteViewModel {
                HotelId = hotelId, HotelName = hotelName
            };

            return(base.View(viewModel));
        }
        public void Create(HotelReviewWriteViewModel model, string username)
        {
            if (!this.hotelsService.CheckExistById(model.HotelId))
            {
                throw new HotelNullException();
            }

            HotelReview hotelReview = this.mapper.Map <HotelReview>(model);

            MbUser user = this.usersService.GetByUsername(username);

            hotelReview.User = user;

            this.dbContext.HotelReviews.Add(hotelReview);
            this.dbContext.SaveChanges();
        }
        public void Create_ShouldCreateNewReviewCorrectly()
        {
            int hotelId = 1;

            this.dbContext.Hotels.Add(new Hotel {
                Id = hotelId
            });
            this.dbContext.SaveChanges();

            Rating        rating        = Rating.Average;
            Season        timeOfYear    = Season.Autumn;
            TravellerType travellerType = TravellerType.Business;

            var model = new HotelReviewWriteViewModel
            {
                HotelId       = hotelId,
                Rating        = rating,
                TimeOfYear    = timeOfYear,
                TravellerType = travellerType,
            };

            string username = "******";

            this.dbContext.Users.Add(new MbUser {
                UserName = username
            });
            this.dbContext.SaveChanges();

            this.hotelReviewsService.Create(model, username);
            HotelReview result = this.dbContext.HotelReviews.First();

            result.ShouldSatisfyAllConditions
            (
                () => result.HotelId.ShouldBe(hotelId),
                () => result.Rating.ShouldBe(rating),
                () => result.TimeOfYear.ShouldBe(timeOfYear),
                () => result.TravellerType.ShouldBe(travellerType),
                () => result.User.UserName.ShouldBe(username)
            );
        }