public void CreatePost_WhenTextIsNotValid_ShouldNotSaveToDatabase() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var testNewPost = new PostModel() { Title = "VALIDTITLE", // MISSING TEXT Tags = new string[] { "FIRST", "SECOND" } }; LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser); var response = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost); var contentString = response.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<PostModel>(contentString); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); Assert.IsNull(postModel.Title); }
public void CreatePost_WithValidData_ShouldSaveToDatabase() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var userModel = Helpers.RegisterTestValidUser(httpServer, testUser); var testPost = new PostModel() { Title = "NEW POST", Tags = new List<string>() { "post" }, Text = "this is just a test post" }; var response = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testPost); Assert.AreEqual(HttpStatusCode.Created, response.StatusCode); Assert.IsNotNull(response.Content); var contentString = response.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<ResponsePostModel>(contentString); Assert.AreEqual(postModel.Title, testPost.Title); Assert.IsTrue(postModel.Id > 0); }
public static IEnumerable<Tag> GetTags(PostModel post, BlogContext context) { var result = new List<Tag>(); if (post != null) { post.Tags.ForEach(pt => GetTag(context, pt, result)); var matches = Regex.Matches(post.Title, @"\w+"); matches.Cast<Match>().Select(m => m.Value).ForEach(pt => GetTag(context, pt, result)); } return result; }
//POST api/posts/create public HttpResponseMessage PostCreate(PostModel post, string sessionKey) { var context = new BlogContext(); var responseMsg = this.PerformOperationAndHandleExceptionsWithSessionKey(sessionKey, context, () => { HttpResponseMessage response; var newPost = new Post(); using (var tran = new TransactionScope()) { newPost.Title = post.Title; newPost.Text = post.Text; newPost.PostDate = DateTime.Now; newPost.User = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); var tags = Helpers.GetTags(post, context); tags.ForEach(t => newPost.Tags.Add(t)); context.Posts.Add(newPost); context.SaveChanges(); tran.Complete(); } if (newPost.Id > 0) { response = this.Request.CreateResponse(HttpStatusCode.Created, new ResponsePostModel() { Id = newPost.Id, Title = newPost.Title }); } else { response = this.Request.CreateResponse(HttpStatusCode.InternalServerError); } return response; }); return responseMsg; }
public void LeaveComment_WhenWrongSessionKey_ShouldNotSaveToDatabase() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var testNewPost = new PostModel() { Title = "VALIDTITLE", Text = "VALIDTEXT", Tags = new string[] { "FIRST", "SECOND" } }; LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser); var postResponse = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost); var contentString = postResponse.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<PostModel>(contentString); var newComment = new CommentModel() { Text = "VALIDCOMMENTTEXT" }; //Try to make a comment with wrong sessionKey string invalidSessionKey = "sdasdasdasddsaijdij2jiwjijei2jiedjisjidsa"; var response = httpServer.Put("api/posts/" + postModel.Id + "/comment?sessionKey=" + invalidSessionKey, newComment); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); }
//POST api/posts/ public HttpResponseMessage PostCreate(PostModel post, [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var context = new BloggingSystemContext(); var user = context.Users.FirstOrDefault(usr => usr.SessionKey == sessionKey); var responseMsg = this.PerformOperationAndHandleExceptionsWithSessionKey( sessionKey, context, () => { var newPost = new Post(); newPost.Title = post.Title; newPost.Text = post.Text; newPost.PostDate = DateTime.Now; newPost.User = user; newPost.Tags = new List<Tag>(); var pattern = new Regex( @"( [^\W_\d] # starting with a letter # followed by a run of either... ( [^\W_\d] | # more letters or [-'\d](?=[^\W_\d]) # ', -, or digit followed by a letter )* [^\W_\d] # and finishing with a letter )", RegexOptions.IgnorePatternWhitespace); foreach (Match m in pattern.Matches(newPost.Title)) { var tagContent = m.Groups[1].Value.ToLower(); if (context.Tags.FirstOrDefault(t => t.Content == tagContent) == null) { newPost.Tags.Add(new Tag() { Content = tagContent, }); } } context.Posts.Add(newPost); context.SaveChanges(); var createdPost = new CreatedPost() { Id = newPost.Id, Title = newPost.Title }; var response = this.Request.CreateResponse(HttpStatusCode.Created, createdPost); return response; }); return responseMsg; }
public void CreatePost_WithNullData_ShouldSaveToDatabase() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var userModel = Helpers.RegisterTestValidUser(httpServer, testUser); var testPost = new PostModel(); var response = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testPost); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); }
public void GetPostByTags_WithNullData_ShouldSaveToDatabase() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var userModel = Helpers.RegisterTestValidUser(httpServer, testUser); var testPost = new PostModel() { Title = "NEW POST created", Tags = new List<string>() { "post", "web", "api", "root", }, Text = "this is just a test post" }; var createResponse = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testPost); var response = httpServer.Get("api/posts?tags=&sessionKey=" + userModel.SessionKey); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.IsNotNull(response.Content); var contentString = response.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<List<PostModel>>(contentString); Assert.IsTrue(postModel.Count == 0); }
public void CreateCommentar_WithInvalideSessionKeyData_ShouldSaveToDatabase() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var userModel = Helpers.RegisterTestValidUser(httpServer, testUser); var testPost = new PostModel() { Title = "NEW POST created", Tags = new List<string>() { "post", "web", "api", "root", }, Text = "this is just a test post" }; var postResponse = httpServer.Post("api/posts?sessionKey=32543tfg", testPost); var postContentString = postResponse.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<PostModel>(postContentString); var testComment = new CommentModel() { Text = "Abe kefi me toq post" }; var commentResponse = httpServer.Put("api/posts/" + postModel.Id + "/comment?sessionKey=dsadasda", testComment); Assert.AreEqual(HttpStatusCode.BadRequest, commentResponse.StatusCode); }
private PostModel PostCreatePost(InMemoryHttpServer httpServer, PostModel testPost) { LoggedUserModel loggedUser = RegisterTestUser(httpServer, testUser); var headers = new Dictionary<string, string>(); headers["X-sessionKey"] = loggedUser.SessionKey; var response = httpServer.Post("api/posts/create", testPost, headers); var contentString = response.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<PostModel>(contentString); return postModel; }
public void CreatePost_WithInValidSessionKey_ShouldSaveToDatabase() { var testPost = new PostModel() { Title = "NEW POST", Tags = new List<string>() { "post" }, Text = "this is just a test post" }; var response = httpServer.Post("api/posts?sessionKey=fgfkfkffkk", testPost); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); }
public HttpResponseMessage PostNewPost(PostModel model, string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BlogContext(); using (context) { var user = context.Users.FirstOrDefault(u => u.SessionKey == sessionKey); if (user == null) { throw new InvalidOperationException("Users doesn't exists"); } if (model.Title == null) { throw new InvalidOperationException("Title cannot be null"); } if (model.Text == null) { throw new InvalidOperationException("Text cannot be null"); } Post post = new Post(); post.Title = model.Title; post.Text = model.Text; post.PostDate = DateTime.Now; post.PostedBy = user; foreach (var tag in model.Tags) { Tag currentTag = CreateOrLoadTag(context, tag.ToLower()); post.Tags.Add(currentTag); } string[] titleTags = Regex.Split(model.Title, @"[,!\. ;?']+"); foreach (var titleTagName in titleTags) { Tag titleTag = CreateOrLoadTag(context, titleTagName.ToLower()); post.Tags.Add(titleTag); } context.Posts.Add(post); context.SaveChanges(); var response = this.Request.CreateResponse(HttpStatusCode.Created, new { Title = post.Title, Id = post.Id }); return response; } }); return responseMsg; }
public void CreatePost_WhenUserDoesntExists_ShouldNotSaveToDatabase() { //Sendind wrong session key should trigger an exception which will return a BadRequest var testNewPost = new PostModel() { Title = "VALIDTITLE", Text = "VALIDTEXT", Tags = new string[] { "FIRST", "SECOND" } }; string randomSessionKey = "dasdsadasdji2iejridsiadjwqijrjifji3jirjiifejiehu4rushurehuu"; var response = httpServer.Post("api/posts?sessionKey=" + randomSessionKey, testNewPost); var contentString = response.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<PostModel>(contentString); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); Assert.IsTrue(postModel.Id == 0); }
public void LeaveComment_WhenPostNotExists_ShouldNotSaveToDatabase() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var testNewPost = new PostModel() { Title = "VALIDTITLE", Text = "VALIDTEXT", Tags = new string[] { "FIRST", "SECOND" } }; LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser); httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost); var newComment = new CommentModel() { Text = "VALIDCOMMENTTEXT" }; int invalidPostId = 0; var response = httpServer.Put("api/posts/" + invalidPostId + "/comment?sessionKey=" + userModel.SessionKey, newComment); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); }
public void LeaveComment_WhenCommentModelIsValid_ShouldSaveToDatabase() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var testNewPost = new PostModel() { Title = "VALIDTITLE", Text = "VALIDTEXT", Tags = new string[] { "FIRST", "SECOND" } }; LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser); var postResponse = httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost); var contentString = postResponse.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<PostModel>(contentString); var newComment = new CommentModel() { Text = "VALIDCOMMENTTEXT" }; var response = httpServer.Put("api/posts/" + postModel.Id + "/comment?sessionKey=" + userModel.SessionKey, newComment); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); }
public void GetPostsByTags_WhenTagsThatAreNotInDatabase() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var testNewPost = new PostModel() { Title = "VALIDTITLE", Text = "VALIDTEXT", Tags = new string[] { "FIRST", "SECOND" } }; LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser); httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost); var response = httpServer.Get("api/posts?tags=RANDOMTAG&sessionKey=" + userModel.SessionKey); var contentString = response.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<IEnumerable<PostModel>>(contentString); var expectedPostsCount = 0; Assert.AreEqual(expectedPostsCount, postModel.Count()); }
public void GetPostsByTags_WhenTagsAreValid() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var testNewPost = new PostModel() { Title = "VALIDTITLE", Text = "VALIDTEXT", Tags = new string[] { "FIRST", "SECOND" } }; var testNewPost1 = new PostModel() { Title = "Some title", Text = "Some different Text", Tags = new string[] { "Yo", "Exam" } }; LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser); httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost); httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost1); var response = httpServer.Get("api/posts?tags=FIRST,SECOND&sessionKey=" + userModel.SessionKey); var contentString = response.Content.ReadAsStringAsync().Result; var postModel = JsonConvert.DeserializeObject<IEnumerable<PostModel>>(contentString); var currentPost = postModel.FirstOrDefault(); var expectedPostsCount = 1; var expectedTags = 3; Assert.AreEqual(expectedPostsCount, postModel.Count()); Assert.AreEqual(expectedTags, currentPost.Tags.Count()); }
public void GetPostsByTags_WhenTagsAreNull() { var testUser = new UserModel() { Username = "******", DisplayName = "VALIDNICK", AuthCode = new string('b', 40) }; var testNewPost = new PostModel() { Title = "VALIDTITLE", Text = "VALIDTEXT", Tags = new string[] { "FIRST", "SECOND" } }; LoggedUserModel userModel = RegisterUser.RegisterTestUser(httpServer, testUser); httpServer.Post("api/posts?sessionKey=" + userModel.SessionKey, testNewPost); //sendind request with empty tags parameter var response = httpServer.Get("api/posts?tags=&sessionKey=" + userModel.SessionKey); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); }