public void PostComment_WhenModelValid_ShouldSaveToDatabase()
        {
            var testUser = this.RegisterTestUser();

            var testComment = new CommentModel()
            {
                Text = "Wow cool story bro!",
            };

            string sessionKey = testUser.SessionKey;

            int testPostId = this.PostATestPost(sessionKey);

            var headers = new Dictionary<string, string>();
            headers["X-sessionKey"] = sessionKey;

            var response = this.httpServer.Put(string.Format("api/posts/{0}/comment", testPostId), testComment, headers);

            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
        }
        public void PostComment_WhenModelInvalid_CommentTextIsTooShort()
        {
            var testUser = this.RegisterTestUser();

            var testComment = new CommentModel()
            {
                Text = "Cool.",
            };

            string sessionKey = testUser.SessionKey;

            int testPostId = this.PostATestPost(sessionKey);

            var headers = new Dictionary<string, string>();
            headers["X-sessionKey"] = sessionKey;

            var response = this.httpServer.Put(string.Format("api/posts/{0}/comment", testPostId), testComment, headers);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public HttpResponseMessage PostComment(int postId, CommentModel model, string sessionKey)
        {
            var context = new BloggingSystemContext();
            var post = context.Posts.FirstOrDefault(p => p.PostId == postId);

            try
            {
                this.VerifySessionKey(sessionKey);

                if (post == null)
                {
                    throw new ArgumentOutOfRangeException("Post not found");
                }

                if (string.IsNullOrEmpty(model.Text))
                {
                    throw new ArgumentNullException("Comment text is mandatory");
                }
            }
            catch (Exception e)
            {
                var errorResponse = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, e.Message);
                return errorResponse;
            }

            var user = context.Users.FirstOrDefault(
                usr => usr.SessionKey == sessionKey);

            var comment = new Comment()
            {
                Text = model.Text,
                PostDate = DateTime.Now,
                User = user,
                Post = post
            };

            context.Comments.Add(comment);
            context.SaveChanges();

            var response = this.Request.CreateResponse(HttpStatusCode.Created);

            return response;
        }