public static Post CreateNewEntity(PostModel postModel, User author, BloggingSystemContext context)
        {
            Post postEntity = new Post()
            {
                Title = postModel.Title,
                Author = author,
                PostDate = DateTime.Now,
                Text = postModel.Text
            };

            foreach (var tagName in postModel.Tags)
            {
                postEntity.Tags.Add(Extensions.CreateOrLoadTag(tagName.ToLower(), context));
            }

            var titleTags = postModel.Title.Split(WordSeparators, StringSplitOptions.RemoveEmptyEntries);
            foreach (var titleTagName in titleTags)
            {
                if (titleTagName.Length > 1)
                {
                    postEntity.Tags.Add(Extensions.CreateOrLoadTag(titleTagName.ToLower(), context));
                }
            }

            return postEntity;
        }
        public void Create_WhenValidPostWithTags_ShouldReturn201CodeAndPostedPost()
        {
            PostModel newPost = new PostModel()
            {
                Title = "Peshov post",
                Text = "Pesho posted a new post!!!",
                Tags = new List<string>() { "tag" }
            };

            var httpResponse = this.httpServer.Post("api/posts", newPost, this.sessionKeyHeader);
            var postedPost = httpResponse.Content.ReadAsAsync<PostedPost>().Result;

            Assert.AreEqual(HttpStatusCode.Created, httpResponse.StatusCode);
            Assert.IsNotNull(httpResponse.Content);
            Assert.AreEqual(newPost.Title, postedPost.Title);
        }
        public static PostModel ToModel(Post postEntity)
        {
            PostModel postModel = new PostModel()
            {
                ID = postEntity.ID,
                Title = postEntity.Title,
                Text = postEntity.Text,
                PostDate = postEntity.PostDate,
                Author = postEntity.Author.DisplayName
            };

            foreach (var commentEntity in postEntity.Comments)
            {
                postModel.Comments.Add(CommentsMapper.ToModel(commentEntity));
            }

            foreach (var tag in postEntity.Tags)
            {
                postModel.Tags.Add(tag.Name);
            }

            return postModel;
        }
        public void Comment_WhenNullComment_ShouldReturn400ErrorResponse()
        {
            // Add a post to test
            PostModel newPost = new PostModel()
            {
                Title = "Peshov post",
                Text = "Pesho posted a new post!!!"
            };

            var createPostResponse = this.httpServer.Post("api/posts", newPost, this.sessionKeyHeader);
            var postedPost = createPostResponse.Content.ReadAsAsync<PostedPost>().Result;

            var postID = postedPost.ID;
            var httpResponse = this.httpServer.Put("api/posts/" + postID + "/comment", null, this.sessionKeyHeader);

            Assert.AreEqual(HttpStatusCode.BadRequest, httpResponse.StatusCode);
        }
        public void Comment_WhenPostExists_ShouldReturn201CodeAndEmptyContent()
        {
            // Add a post to test
            PostModel newPost = new PostModel()
            {
                Title = "Peshov post",
                Text = "Pesho posted a new post!!!"
            };

            var createPostResponse = this.httpServer.Post("api/posts", newPost, this.sessionKeyHeader);
            var postedPost = createPostResponse.Content.ReadAsAsync<PostedPost>().Result;

            CommentModel testComment = new CommentModel()
            {
                Text = "Test comment!"
            };
            
            var postID = postedPost.ID;
            var httpResponse = this.httpServer.Put("api/posts/" + postID + "/comment", testComment, this.sessionKeyHeader);

            Assert.AreEqual(HttpStatusCode.OK, httpResponse.StatusCode);
            Assert.IsNull(httpResponse.Content);
        }
        public void Create_WhenPostWithoutTitle_ShouldReturn400ErrorResponse()
        {
            PostModel newPost = new PostModel()
            {
                Text = "Pesho posted a new post!!!"
            };

            var httpResponse = this.httpServer.Post("api/posts", newPost, this.sessionKeyHeader);

            Assert.AreEqual(HttpStatusCode.BadRequest, httpResponse.StatusCode);
        }
        private static bool PostContainsAllTags(PostModel postModel, string[] tagsToSearch)
        {
            foreach (var tagToSearch in tagsToSearch)
            {
                if (!postModel.Tags.Contains(tagToSearch.ToLower()))
                {
                    return false;
                }
            }

            return true;
        }