示例#1
0
        public BeerReview GetReview(User user, Beer beer)
        {
            if (user == null || beer == null)
            {
                return(new BeerReview());
            }
            var review = new BeerReview();

            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    var        query = @"SELECT TOP 1 beers.id AS beer_id, beers.name AS beer_name, beers.image_url AS image_url, beerreview.id AS review_id, beerreview.rating AS review_rating, beerreview.date_of_review AS review_date, beerreview.review AS review_text, users.id AS user_id, users.username AS user_username FROM users JOIN beerreview ON users.id = beerreview.user_id JOIN beers on beers.id = beerreview.beer_id WHERE users.id = @user_id AND beerreview.beer_id = @beer_id";
                    SqlCommand cmd   = new SqlCommand(query, conn);
                    cmd.Parameters.AddWithValue("@user_id", user.Id);
                    cmd.Parameters.AddWithValue("@beer_id", beer.BeerId);

                    SqlDataReader reader = cmd.ExecuteReader();

                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            review = MapRowToBeerReview(reader);
                        }
                    }
                }
                return(review);
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Add a new review
        /// </summary>
        /// <param name="review"></param>
        /// <returns></returns>
        public int AddReview(BeerReview review)
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();

                    string sql =
                        @"INSERT INTO beerReviews
                          (review,beerID,rating)
                        VALUES
                          (@review, @beerID, @rating); Select @@Identity;";
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue("@review", review.Review);
                    cmd.Parameters.AddWithValue("@beerID", review.BeerID);
                    cmd.Parameters.AddWithValue("@rating", review.Rating);

                    return(Convert.ToInt32(cmd.ExecuteScalar()));
                }
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
示例#3
0
        private BeerReview MapRowToBeerReview(SqlDataReader reader)
        {
            //try
            //{
            var dt         = Convert.ToString(reader["review_date"]);
            var reviewDate = DateTime.ParseExact(dt, "yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);

            var br = new BeerReview
            {
                BeerReviewId  = Convert.ToInt32(reader["review_id"]),
                UserReviewing = MapRowToUser(reader),
                BeerReviewed  = MapRowToBeer(reader),
                ReviewText    = Convert.ToString(reader["review_text"]),
                DateOfReview  = reviewDate
            };

            br.SetRaiting(Convert.ToDouble(reader["review_rating"]));

            return(br);
            //}
            //catch
            //{
            //return new BeerReview();
            //}
        }
        public async Task <ActionResult> Index(CreateReviewBindingModel m)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.ReviewValidationFailure());
            }

            string imgUrl = null;

            if (m.Image != null)
            {
                var stream = m.Image.InputStream;
                imgUrl = await this.imageUpload.UploadImageAsync(stream, Constants.DefaultImageSizePx, Constants.DefaultImageSizePx);

                if (imgUrl == null)
                {
                    return(this.ImageUploadFailure());
                }
            }

            var review = new BeerReview();

            review = this.mapper.Map(m, review);
            review.ApplicationUserId = this.User.Identity.GetUserId();
            review.ImgUrl            = imgUrl ?? review.ImgUrl;

            var result = this.reviewService.CreateReview(review);

            if (result.Successful)
            {
                return(this.RedirectToAction("My"));
            }

            return(this.ReviewValidationFailure());
        }
示例#5
0
        public IActionResult SaveBeerReview(BeerViewModel response)
        {
            var        beerReviewed  = BeerDAL.GetBeer(response.CurrentBeerId);
            var        userReviewing = AuthProvider.GetCurrentUser();
            var        userReviewId  = response.UserReviewId;
            var        reviewText    = response.UserReviewText;
            var        reviewRating  = response.UserRating;
            BeerReview beerReview    = new BeerReview
            {
                BeerReviewed  = beerReviewed,
                UserReviewing = userReviewing,
                DateOfReview  = DateTime.Now,
                BeerReviewId  = userReviewId,
                ReviewText    = reviewText,
            };

            beerReview.SetRaiting(response.UserRating);

            if (!string.IsNullOrEmpty(reviewText) && reviewRating > 0)
            {
                BeerReviewDAL.CreateOrUpdateReview(beerReview);
            }

            return(RedirectToAction("BeerDetail", new { id = beerReviewed.BeerId }));
        }
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            BeerReview beerReview = repository.Get(id);

            //BeerReview beerReview = db.Reviews.Find(id);

            if (beerReview == null)
            {
                return(HttpNotFound());
            }

            if (User.Identity.GetUserId() == beerReview.UserInfo.UserInfoId || User.IsInRole("Admin"))
            {
                ViewBag.ProductId = beerReview.ProductId;
                //ViewBag.ProductId = new SelectList(repository.GetProducts(), "ProductId", "Name", beerReview.ProductId);
                //ViewBag.ProductId = new SelectList(db.Products, "ProductId", "Name", beerReview.ProductId);
                return(View(beerReview));
            }
            else
            {
                return(RedirectToAction("Details", "BeerProducts", new { id = beerReview.ProductId }));
            }
        }
        public BeerReview AddBeerReview(BeerReview review)
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    string     sqlText = "INSERT INTO beer_reviews (beer_id,user_id, title,beerRating, beerReview, is_private) values (@beerId, @userId,@title,@beerRating, @beerReview, @isPrivate)";
                    SqlCommand cmd     = new SqlCommand(sqlText, conn);
                    cmd.Parameters.AddWithValue("@beerId", review.BeerId);
                    cmd.Parameters.AddWithValue("@userId", review.UserId);
                    cmd.Parameters.AddWithValue("@title", review.Title);
                    cmd.Parameters.AddWithValue("@beerRating", review.BeerRating);
                    cmd.Parameters.AddWithValue("@beerReview", review.Review);
                    cmd.Parameters.AddWithValue("@isPrivate", review.isPrivate);

                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            return(review);
        }
        public async Task <IHttpActionResult> AddRating(int id, ReviewDTO reviewDTO)
        {
            if (!ModelState.IsValid)
            {
                var message = string.Join(" | ", ModelState.Values
                                          .SelectMany(v => v.Errors)
                                          .Select(e => e.ErrorMessage));
                return(Json(new { message }));
            }

            Boolean isIdValid = await APIHelper.ValidateID(id);

            if (!isIdValid)
            {
                return(BadRequest("No beer exists with id '" + id + "'"));
            }

            BeerReview review = new BeerReview
            {
                id       = id,
                Username = reviewDTO.Username,
                Rating   = reviewDTO.Rating,
                Comments = reviewDTO.Comments
            };

            DatabaseReadWrite.AddReview(review);

            return(Ok("Review Added to database"));
        }
        public List <BeerReview> GetBeerReviews()
        {
            List <BeerReview> beerReviews = new List <BeerReview>();

            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();

                    string        sqlText = "Select * from beer_reviews";
                    SqlCommand    cmd     = new SqlCommand(sqlText, conn);
                    SqlDataReader reader  = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        BeerReview currentReview = GetBeerReviewsFromReader(reader);
                        beerReviews.Add(currentReview);
                    }
                    return(beerReviews);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
示例#10
0
        public async Task NotCall_ImageServiceUploadImageMethodOnceWithCorrectParams_WhenImageIsNull()
        {
            // Arrange
            var updateResult = new Mock <IDataModifiedResult>();

            updateResult.Setup(r => r.Successful).Returns(true);
            var sut            = this.MockingKernel.Get <ReviewsController>(AjaxContextName);
            var expectedReview = new BeerReview();
            var bindingModel   = new CreateReviewBindingModel()
            {
                Image = null
            };

            var reviewService = this.MockingKernel.GetMock <IBeerReviewService>();

            reviewService.Setup(s => s.CreateReview(It.IsAny <IBeerReview>()))
            .Returns(updateResult.Object);
            var mapper = this.MockingKernel.GetMock <IMapper>();

            mapper.Setup(m => m.Map(bindingModel, It.IsAny <BeerReview>()))
            .Returns(expectedReview);
            var imgUploadService = this.MockingKernel.GetMock <IImageUploadService>();

            // Act
            await sut.Index(bindingModel);

            // Assert
            imgUploadService.Verify(s => s.UploadImageAsync(It.IsAny <Stream>(), Constants.DefaultImageSizePx, Constants.DefaultImageSizePx), Times.Never);
        }
示例#11
0
        public async Task Return_CorrectResult_WhenReviewCreationSucceeds()
        {
            // Arrange
            var updateResult = new Mock <IDataModifiedResult>();

            updateResult.Setup(r => r.Successful).Returns(true);

            var sut            = this.MockingKernel.Get <ReviewsController>(AjaxContextName);
            var bindingModel   = new CreateReviewBindingModel();
            var expectedReview = new BeerReview();
            var mapper         = this.MockingKernel.GetMock <IMapper>();

            mapper.Setup(m => m.Map(bindingModel, It.IsAny <BeerReview>()))
            .Returns(expectedReview);
            var reviewService = this.MockingKernel.GetMock <IBeerReviewService>();

            reviewService.Setup(s => s.CreateReview(It.IsAny <IBeerReview>()))
            .Returns(updateResult.Object);

            // Act
            var result = await sut.Index(bindingModel) as RedirectToRouteResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual("My", result.RouteValues["action"]?.ToString());
            Assert.AreEqual(null, result.RouteValues["controller"]?.ToString());
        }
示例#12
0
        public async Task Return_CorrectHttpStatusCodeResult_WhenReviewCreationFails()
        {
            // Arrange
            var expectedErrors = new[] { "error1", "error2" };
            var updateResult   = new Mock <IDataModifiedResult>();

            updateResult.Setup(r => r.Errors).Returns(expectedErrors);

            // Arrange
            var sut          = this.MockingKernel.Get <ReviewsController>(AjaxContextName);
            var bindingModel = new CreateReviewBindingModel();
            var beerReview   = new Mock <IBeerReview>();

            var expectedReview = new BeerReview();
            var mapper         = this.MockingKernel.GetMock <IMapper>();

            mapper.Setup(m => m.Map(bindingModel, It.IsAny <BeerReview>()))
            .Returns(expectedReview);

            var reviewService = this.MockingKernel.GetMock <IBeerReviewService>();

            reviewService.Setup(r => r.GetById(It.IsAny <int>()))
            .Returns(beerReview.Object);
            reviewService.Setup(r => r.CreateReview(expectedReview))
            .Returns(updateResult.Object);
            // Act
            var result = await sut.Index(bindingModel) as HttpStatusCodeResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual((int)HttpStatusCode.BadRequest, result.StatusCode);
            StringAssert.Contains("validation failed", result.StatusDescription);
        }
示例#13
0
        public IActionResult GetBeerReview(int id)
        {
            BeerReview review = breweryDAO.GetReviewById(id);

            if (review == null)
            {
                return(NotFound());
            }
            return(new JsonResult(review));
        }
        public static void AddReview(BeerReview rating)
        {
            var jsonData = System.IO.File.ReadAllText(FILE_PATH);

            var Ratings = JsonConvert.DeserializeObject <List <BeerReview> >(jsonData)
                          ?? new List <BeerReview>();

            Ratings.Add(rating);
            jsonData = JsonConvert.SerializeObject(Ratings);
            System.IO.File.WriteAllText(FILE_PATH, jsonData);
        }
        private BeerReview RowToObjectReview(SqlDataReader reader)
        {
            // Create a review
            BeerReview review = new BeerReview();

            review.Id       = Convert.ToInt32(reader["id"]);
            review.Review   = Convert.ToString(reader["review"]);
            review.BeerID   = Convert.ToInt32(reader["beerID"]);
            review.Rating   = Convert.ToInt32(reader["rating"]);
            review.BeerName = Convert.ToString(reader["name"]);
            return(review);
        }
示例#16
0
        public void CreateOrUpdateReview(BeerReview beerReview)
        {
            var review = GetReview(beerReview.UserReviewing, beerReview.BeerReviewed);

            if (review.Equals(new BeerReview()))
            {
                CreateReview(beerReview);
            }
            else
            {
                UpdateReview(beerReview);
            }
        }
示例#17
0
 public IActionResult AddBeerReview([FromBody] BeerReview review)
 {
     if (ModelState.IsValid)
     {
         int newId = breweryDAO.AddReview(review);
         review = breweryDAO.GetReviewById(newId);
         // Return CreatedAtRoute to return 201
         return(CreatedAtRoute("GetBeerReview", new { id = newId }, review));
     }
     else
     {
         return(new BadRequestObjectResult(ModelState));
     }
 }
        public void Call_RepositoryUpdateMethodOnceWithCorrectParams()
        {
            var id         = this.Fixture.Create <string>();
            var review     = new BeerReview();
            var repository = new Mock <IRepository <BeerReview> >();

            repository.Setup(r => r.GetById(id))
            .Returns(review);
            var reviewService = new BeerReviewService(repository.Object);

            reviewService.UpdateReview(review);

            repository.Verify(r => r.Update(review), Times.Once);
        }
示例#19
0
        public void ReturnResultFrom_RepositoryGetByIdMethod()
        {
            var id         = this.Fixture.Create <string>();
            var expected   = new BeerReview();
            var repository = new Mock <IRepository <BeerReview> >();

            repository.Setup(r => r.GetById(It.IsAny <object>()))
            .Returns(expected);

            var reviewService = new BeerReviewService(repository.Object);

            var actual = reviewService.GetById(id);

            Assert.AreSame(expected, actual);
        }
        private BeerReview GetBeerReviewsFromReader(SqlDataReader reader)
        {
            BeerReview beerReview = new BeerReview()
            {
                BeerReviewId = Convert.ToInt32(reader["beerReview_id"]),
                UserId       = Convert.ToInt32(reader["user_id"]),
                BeerId       = Convert.ToInt32(reader["beer_id"]),
                Title        = Convert.ToString(reader["title"]),
                BeerRating   = Convert.ToInt32(reader["beerRating"]),
                Review       = Convert.ToString(reader["beerReview"]),
                isPrivate    = Convert.ToInt32(reader["is_private"])
            };

            return(beerReview);
        }
        public void Call_RepositorySaveChangesMethodOnceAndReturnItsValue()
        {
            var expected   = new Mock <IDataModifiedResult>();
            var review     = new BeerReview();
            var repository = new Mock <IRepository <BeerReview> >();

            repository.Setup(r => r.SaveChanges())
            .Returns(expected.Object);
            var reviewService = new BeerReviewService(repository.Object);

            var actual = reviewService.UpdateReview(review);

            repository.Verify(r => r.SaveChanges(), Times.Once);
            Assert.AreSame(expected.Object, actual);
        }
示例#22
0
        public void Setters_ShouldSetUpPropertiesCorrectly()
        {
            // Arrange
            var expectedId   = this.Fixture.Create <int>();
            var expectedText = this.Fixture.Create <string>();
            var isPublic     = true;
            var expectedDate = DateTime.Now;

            // Act
            var review = new BeerReview()
            {
                Id                = expectedId,
                BeerId            = expectedId,
                ApplicationUserId = expectedText,
                IsDeleted         = isPublic,
                Overall           = expectedId,
                Look              = expectedId,
                Smell             = expectedId,
                Taste             = expectedId,
                Description       = expectedText,
                IsPublic          = isPublic,
                Place             = expectedText,
                Beer              = null,
                CreatedAt         = expectedDate,
                ModifiedAt        = expectedDate,
                User              = null,
                ImgUrl            = expectedText
            };

            // Assert
            Assert.AreEqual(expectedId, review.Id);
            Assert.AreEqual(expectedId, review.Overall);
            Assert.AreEqual(expectedId, review.Look);
            Assert.AreEqual(expectedId, review.BeerId);
            Assert.AreEqual(expectedId, review.Smell);
            Assert.AreEqual(expectedId, review.Taste);
            Assert.AreEqual(isPublic, review.IsPublic);
            Assert.AreEqual(isPublic, review.IsDeleted);

            Assert.AreEqual(expectedText, review.ApplicationUserId);
            Assert.AreSame(expectedText, review.Description);
            Assert.AreSame(expectedText, review.Place);
            Assert.AreSame(expectedText, review.ImgUrl);
            Assert.AreSame(null, review.Beer);
            Assert.AreSame(null, review.User);
            Assert.AreEqual(expectedDate, review.CreatedAt);
            Assert.AreEqual(expectedDate, review.ModifiedAt);
        }
示例#23
0
        //Create beer review
        public bool CreateBeerReview(BeerReviewCreate model, int beerId)
        {
            var beerEntity = _context.Beers.Find(beerId);

            var entity = new BeerReview()
            {
                OwnerId    = _userId,
                Rev        = model.Rev,
                Rating     = model.Rating,
                CreatedUtc = DateTimeOffset.Now,
                BeerId     = beerEntity.BeerId,
                Beer       = model.Beer
            };

            _context.BeerReviews.Add(entity);
            return(_context.SaveChanges() == 1);
        }
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            BeerReview beerReview = repository.Get(id);

            //BeerReview beerReview = db.Reviews.Find(id);

            if (beerReview == null)
            {
                return(HttpNotFound());
            }
            return(View(beerReview));
        }
        public ActionResult Edit([Bind(Include = "ReviewId,Aroma,Appearance,Taste,Palate,Overall,ProductId,Text,UserInfoId")] BeerReview beerReview)
        {
            if (ModelState.IsValid)
            {
                beerReview.DateTime = DateTime.Now;

                repository.Update(beerReview);
                repository.Save();
                //db.Entry(beerReview).State = EntityState.Modified;
                //db.SaveChanges();
                //return RedirectToAction("Index");
                return(RedirectToAction("Details", "BeerProducts", new { id = beerReview.ProductId }));
            }

            ViewBag.ProductId = new SelectList(repository.GetProducts(), "ProductId", "Name", beerReview.ProductId);
            //ViewBag.ProductId = new SelectList(db.Products, "ProductId", "Name", beerReview.ProductId);
            return(View(beerReview));
        }
示例#26
0
        public void Call_RepositoryAddMethodOnceWithCorrectParams()
        {
            // Arrange
            var id         = this.Fixture.Create <string>();
            var review     = new BeerReview();
            var repository = new Mock <IEfRepository <BeerReview> >();

            repository.Setup(r => r.GetById(id))
            .Returns(review);

            var reviewService = new BeerReviewService(repository.Object);

            // Act
            reviewService.CreateReview(review);

            // Assert
            repository.Verify(r => r.Add(review), Times.Once);
        }
示例#27
0
 private BeerReview RowToBeerReview(SqlDataReader reader)
 {
     try
     {
         var br = new BeerReview
         {
             BeerReviewId  = Convert.ToInt32(reader["review_id"]),
             ReviewText    = Convert.ToString(reader["review_text"]),
             DateOfReview  = Convert.ToDateTime("review_date"),
             UserReviewing = RowToUser(reader)
         };
         br.SetRaiting(Convert.ToDouble(reader["review_rating"]));
         return(br);
     }
     catch
     {
         return(new BeerReview());
     }
 }
        public void SetIsDeletedPropertyToTrue()
        {
            var id     = this.Fixture.Create <string>();
            var review = new BeerReview
            {
                IsDeleted = false
            };

            var repository = new Mock <IRepository <BeerReview> >();

            repository.Setup(r => r.GetById(id))
            .Returns(review);

            var reviewService = new BeerReviewService(repository.Object);

            reviewService.DeleteReview(id);

            Assert.IsTrue(review.IsDeleted);
        }
示例#29
0
        protected void InsertButton_OnClick(object sender, EventArgs e)
        {
            var userId = this.User.Identity.GetUserId();
            var review = new BeerReview()
            {
                BeerId            = int.Parse(this.HiddenBeerId.Value),
                Place             = this.TbPlace.Text,
                Description       = this.TbDescription.Text,
                Overall           = int.Parse(this.BeerRatingSelect5.SelectedValue),
                Taste             = int.Parse(this.BeerRatingSelect6.SelectedValue),
                Look              = int.Parse(this.BeerRatingSelect7.SelectedValue),
                Smell             = int.Parse(this.BeerRatingSelect8.SelectedValue),
                ApplicationUserId = userId
            };

            var uploadControl = this.ImageUpload;

            byte[] image = null;
            if (uploadControl.HasFile)
            {
                var extension = Path.GetExtension(uploadControl.PostedFile.FileName).ToLower();
                if (extension != ".jpg" && extension != ".jpeg" && extension != ".png" && extension != ".gif" && extension != ".psd")
                {
                    this.ErrorMessageText    = "The uploaded file is not a valid image!";
                    this.ErrorMessageVisible = true;
                    return;
                }

                if (uploadControl.PostedFile.ContentLength >= 4193280)
                {
                    this.ErrorMessageText    = "Your image must be less than 4MB!";
                    this.ErrorMessageVisible = true;
                    return;
                }

                image = uploadControl.FileBytes;
            }

            var args = this.EventArgsFactory.CreateBeerReviewInfoEventArgs(review, image);

            this.OnCreateReview?.Invoke(this, args);
        }
        public ActionResult Create([Bind(Include = "ReviewId,Aroma,Appearance,Taste,Palate,Overall,ProductId,Text")] BeerReview beerReview, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                beerReview.UserInfoId = User.Identity.GetUserId();
                beerReview.DateTime   = DateTime.Now;

                repository.Add(beerReview);
                repository.Save();
                //db.Reviews.Add(beerReview);
                //db.SaveChanges();

                //return RedirectToAction("Index");
                return(Redirect(returnUrl));
            }

            //ViewBag.ProductId = new SelectList(db.Products, "ProductId", "Name", beerReview.ProductId);
            ViewBag.ProductId = beerReview.ProductId;
            return(View(beerReview));
        }