public void CreateReviewAsync_Success()
        {
            FillReviews();
            var reviewToCreate = new Review()
            {
                UserId = userIds[0], RestaurantId = restaurantIds[2], Heading = "awful", Content = "tasted like dog food", Rating = 6
            };
            var sut    = new ReviewDataManager(DbContext);
            var result = sut.CreateReviewAsync(reviewToCreate).Result;

            Assert.IsTrue(result.Id > 0);
            Assert.AreEqual(result.Heading, "awful");
            using (var reader = this.ExecuteReader("select * from Review where Id=@Id", System.Data.CommandType.Text,
                                                   new System.Data.SqlClient.SqlParameter()
            {
                ParameterName = "Id", SqlDbType = System.Data.SqlDbType.Int, Value = result.Id
            }))
            {
                reader.Read();
                var actualUser       = reader.GetValue(reader.GetOrdinal("user_id"));
                var actualRestaurant = reader.GetValue(reader.GetOrdinal("restaurant_id"));
                var actualHeading    = reader.GetValue(reader.GetOrdinal("heading"));
                var atualContent     = reader.GetValue(reader.GetOrdinal("content"));
                var actualRating     = (byte)reader.GetValue(reader.GetOrdinal("rating"));
                Assert.AreEqual(reviewToCreate.UserId, actualUser);
                Assert.AreEqual(reviewToCreate.RestaurantId, actualRestaurant);
                Assert.AreEqual(reviewToCreate.Heading, actualHeading);
                Assert.AreEqual(reviewToCreate.Content, atualContent);
                Assert.AreEqual(reviewToCreate.Rating, actualRating);
            }
        }
        public void GetReviewsAsync_NoFilter_ReturnsAll()
        {
            FillReviews();
            var sut    = new ReviewDataManager(DbContext);
            var result = sut.GetReviewsAsync(1, 100, null).Result.ToList();

            Assert.AreEqual(result.Count(), 4);
        }
        public void DeleteReviewAsync_UserIdMisMatch_NotDeleted()
        {
            var ids = FillReviews();
            var sut = new ReviewDataManager(DbContext);

            sut.DeleteReviewAsync(ids[0], userIds[1]).Wait();
            var count = this.ExecuteScalar <int>(string.Format("select count(*) from Review where Id={0}", ids[0]));

            Assert.AreEqual(count, 1);
        }
        public void GetReviewAsync_Success()
        {
            var ids    = FillReviews();
            var sut    = new ReviewDataManager(DbContext);
            var result = sut.GetReviewAsync(ids.First()).Result;

            Assert.AreEqual(ids.First(), result.Id);
            Assert.AreEqual(userIds[0], result.UserId);
            Assert.AreEqual(restaurantIds[0], result.RestaurantId);
            Assert.AreEqual("yum", result.Heading);
            Assert.AreEqual("great service", result.Content);
            Assert.AreEqual(9, result.Rating);
        }
        public void GetReviewsAsync_Paged_AreOrderedByHeading()
        {
            FillReviews();
            var sut    = new ReviewDataManager(DbContext);
            var result = sut.GetReviewsAsync(1, 2, null).Result.ToList();

            Assert.AreEqual(2, result.Count(), 2);
            Assert.AreEqual(result[0].Heading, "good but...");
            Assert.AreEqual(result[1].Heading, "love it");

            result = sut.GetReviewsAsync(2, 2, null).Result.ToList();
            Assert.AreEqual(2, result.Count(), 2);
            Assert.AreEqual("slow service", result[0].Heading);
            Assert.AreEqual("yum", result[1].Heading);
        }
        public void GetReviewsAsync_FieldValues_Test()
        {
            FillReviews();
            var sut    = new ReviewDataManager(DbContext);
            var result = sut.GetReviewsAsync(1, 1, null).Result.ToList();

            Assert.AreEqual(1, result.Count());
            var review = result.First();

            //they are sorted by heading so the 2nd review is the one that will be returned
            Assert.AreEqual(ids[1], review.Id);
            Assert.AreEqual(userIds[0], review.UserId);
            Assert.AreEqual(restaurantIds[1], review.RestaurantId);
            Assert.AreEqual("good but...", review.Heading);
            Assert.AreEqual("I think they sauce was stale", review.Content);
            Assert.AreEqual(5, review.Rating);
        }
        public void GetReviewsAsync_FilterByUser_ReturnsAll()
        {
            FillReviews();
            var sut    = new ReviewDataManager(DbContext);
            var filter = new DbFilter <Review> {
                Field = "UserId", Operator = OperatorEnum.Equal, Value = userIds[1].ToString()
            };
            var result = sut.GetReviewsAsync(1, 100, filter).Result.ToList();

            Assert.AreEqual(result.Count(), 2);
            //the reviews should be sorted by heading so the 2nd one will be first
            //this is the test data that was created
            //ds.Add(InsertReview(userIds[1], restaurantIds[0], "slow service", null, 1));
            //ids.Add(InsertReview(userIds[1], restaurantIds[2], "love it", "everything was great", 10));
            Assert.AreEqual(result[0].Content, "everything was great");
            Assert.IsTrue(string.IsNullOrEmpty(result[1].Content));
        }