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); }
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); }
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); }
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; }