Beispiel #1
0
        public void Post_No_Tags_No_SessionKey_Should_Return_Bad_Reuqest()
        {
            var postModel = new PostModel() { Title = "Test", Text = "Test text"};
            var response = this.httpServer.Post("api/posts/", postModel);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var postCreatedModel = JsonConvert.DeserializeObject<PostCreatedModel>(contentString);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
Beispiel #2
0
        public void Post_Null_Text_Should_Return_BadRequest()
        {
            var postModel = new PostModel() { Title = "Test", Text = null };
            var headers = new Dictionary<string, string>();
            headers["X-sessionKey"] = this.validUser.SessionKey;
            var response = this.httpServer.Post("api/posts/", postModel, headers);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var postCreatedModel = JsonConvert.DeserializeObject<PostCreatedModel>(contentString);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
Beispiel #3
0
        public void Post_Empty_Tag_Array_Should_Return_Created()
        {
            var postModel = new PostModel() { Title = "Test", Text = "Test text", Tags= new string[]{} };
            var headers = new Dictionary<string, string>();
            headers["X-sessionKey"] = this.validUser.SessionKey;
            var response = this.httpServer.Post("api/posts/", postModel, headers);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var postCreatedModel = JsonConvert.DeserializeObject<PostCreatedModel>(contentString);

            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            Assert.AreEqual(postModel.Title, postCreatedModel.Title);
        }
        public void PostByTag_In_Title_Only_One_Tag_Should_Return_One()
        {
            var postModel = new PostModel() { Title = "Web", Text = "Test text" };
            var headers = new Dictionary<string, string>();
            headers["X-sessionKey"] = this.validUser.SessionKey;
            var response = this.httpServer.Post("api/posts/", postModel, headers);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var postCreatedModel = JsonConvert.DeserializeObject<PostCreatedModel>(contentString);

            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            Assert.AreEqual(postModel.Title, postCreatedModel.Title);

            response = this.httpServer.Get("api/posts?tags=web,services", headers);

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.IsNotNull(response.Content);
        }
        public void Post_Comment_WrongPost_Should_Return_BadRequest()
        {
            var postModel = new PostModel() { Title = "Test", Text = "Test text", Tags = new string[] { } };
            var headers = new Dictionary<string, string>();
            headers["X-sessionKey"] = this.validUser.SessionKey;
            var response = this.httpServer.Post("api/posts/", postModel, headers);
            var contentString = response.Content.ReadAsStringAsync().Result;
            var postCreatedModel = JsonConvert.DeserializeObject<PostCreatedModel>(contentString);

            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            Assert.AreEqual(postModel.Title, postCreatedModel.Title);

            var postId = 999999999;
            var commentModel = new CommentModel() { Text = "Just comment" };

            response = this.httpServer.Put("api/posts/" + postId + "/comment", commentModel, headers);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
        }
Beispiel #6
0
        public HttpResponseMessage PostPosts(Post post, string sessionKey)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
             () =>
             {
                 var context = new BlogContext();
                 using (context)
                 {
                     var user = context.Users.FirstOrDefault(usr =>
                         usr.SessionKey == sessionKey);

                     if (user == null)
                     {
                         throw new InvalidOperationException("Invalid SessionKey!");
                     }

                     var newPost = new Post()
                     {
                         Id = post.Id,
                         Date = post.Date,
                         Title = post.Title,
                         Text = post.Text,
                         Tags = post.Tags,
                         Comments = post.Comments,
                         User = user
                     };

                     context.Posts.Add(newPost);
                     context.SaveChanges();

                     PostModel response = new PostModel()
                     {
                         Title = newPost.Title,
                         Id = newPost.Id
                     };

                     return this.Request.CreateResponse(HttpStatusCode.OK, response);
                 }
             });

            return responseMsg;
        }
 private void ValidatePost(PostModel postData)
 {
     if (postData == null || string.IsNullOrEmpty(postData.Title) || string.IsNullOrEmpty(postData.Text))
     {
         throw new InvalidOperationException("Incomplete Post data!");
     }
 }
        private void AddTitleTags(BloggingSystemContext context, PostModel postData, Post postEntity)
        {
            var titleTags = postData.Title.ToLower().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);

            if (titleTags != null)
            {
                foreach (var tag in titleTags)
                {
                    var tagEntity = this.GetOrCreateTag(context, tag);

                    postEntity.Tags.Add(tagEntity);
                }
            }
        }
        private void AddTags(BloggingSystemContext context, PostModel postData, Post postEntity)
        {
            if (postData.Tags != null)
            {
                foreach (var tag in postData.Tags)
                {
                    var tagEntity = this.GetOrCreateTag(context, tag);

                    postEntity.Tags.Add(tagEntity);
                }
            }
        }
        public HttpResponseMessage PostAddPost(PostModel postData, [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey)
        {
            var responseMsg = this.PerformOperationAndHandleExceptions(
                () =>
                {
                    var context = new BloggingSystemContext();
                    using (context)
                    {
                        var user = GetAndValidateUser(sessionKey, context);

                        ValidatePost(postData);

                        var postEntity = new Post()
                        {
                            Text = postData.Text,
                            Title = postData.Title
                        };

                        postEntity.PostDate = DateTime.Now;
                        postEntity.User = user;

                        AddTags(context, postData, postEntity);
                        AddTitleTags(context, postData, postEntity);

                        context.Posts.Add(postEntity);
                        context.SaveChanges();

                        var postCreatedModel = new PostCreatedModel() { Id = postEntity.Id, Title = postEntity.Title };

                        var response = this.Request.CreateResponse(HttpStatusCode.Created, postCreatedModel);
                        return response;
                    }
                });

            return responseMsg;
        }
        public HttpResponseMessage PostCreate(PostModel postModel, 
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey)
        {
            var responseMsg = this.ExceptionHandling(
            () =>
            {
                var context = new BloggingSystemContext();
                using (context)
                {
                    var user = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey);

                    if (user == null)
                    {
                        throw new InvalidOperationException("Invalid username or password!");
                    }

                    List<string> tags = new List<string>();
                    tags = TakeTags(postModel.Title);
                    foreach (var tagEntity in tags)
                    {
                        var tagInDb = context.Tags.FirstOrDefault(t => t.Name == tagEntity);

                        if(tagInDb == null)
                        {
                            var tag = new Tag()
                            {
                                Name = tagEntity,
                                User = user
                            };
                            context.Tags.Add(tag);
                            context.SaveChanges();
                        }
                    }

                    foreach (var tag in postModel.Tags)
                    {
                        var tagInDb = context.Tags.FirstOrDefault(t => t.Name == tag);

                        if (tagInDb == null)
                        {
                            var newTag = new Tag()
                            {
                                Name = tag,
                                User = user
                            };
                            context.Tags.Add(newTag);
                            context.SaveChanges();
                        }
                    }

                    var post = new Post()
                    {
                        Title = postModel.Title,
                        Text = postModel.Text,
                        User = user,
                        PostDate = DateTime.Now
                    };

                    context.Posts.Add(post);
                    context.SaveChanges();

                    var postCreated = new PostCreatedModel()
                    {
                        Id = post.Id,
                        Title = post.Title
                    };

                    var response =
                        this.Request.CreateResponse(HttpStatusCode.Created, postCreated);
                    return response;
                }
            });

            return responseMsg;
        }