public void Create_WhenPostTextNull_ShouldSaveToDatabase() { var testUser = new UserModel() { Username = "******", Nickname = "NewVALIDNICK", AuthCode = new string('b', 40) }; var httpServer = new InMemoryHttpServer("http://localhost/"); var userResponse = httpServer.CreatePostRequest("api/users/register", testUser); var userContentString = userResponse.Content.ReadAsStringAsync().Result; var userModel = JsonConvert.DeserializeObject<UserLoggedModel>(userContentString); var testPost = new PostNewModel() { Title = "Title", Text = null, Tags = { } }; var response = httpServer.CreatePostRequest("api/posts", testPost, "application/json", userModel.SessionKey); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); }
public void Create_WhenPostModelValid_ShouldSaveToDatabase() { var testUser = new UserModel() { Username = "******", Nickname = "NewVALIDNICK", AuthCode = new string('b', 40) }; var httpServer = new InMemoryHttpServer("http://localhost/"); var userResponse = httpServer.CreatePostRequest("api/users/register", testUser); var userContentString = userResponse.Content.ReadAsStringAsync().Result; var userModel = JsonConvert.DeserializeObject<UserLoggedModel>(userContentString); var testPost = new PostNewModel() { Title = "Post", Text = "ValidText", Tags = new string[] { "valid" } }; var response = httpServer.CreatePostRequest("api/posts", testPost, "application/json", userModel.SessionKey); Assert.AreEqual(HttpStatusCode.Created, response.StatusCode); Assert.IsNotNull(response.Content); var contentString = response.Content.ReadAsStringAsync().Result; var model = JsonConvert.DeserializeObject<PostCreatedModel>(contentString); Assert.AreEqual(testPost.Title, model.Title); Assert.IsTrue(model.Id != 0); }
public void GetByTags_WhenPostModelValidMany_ShouldSaveToDatabase() { var testUser = new UserModel() { Username = "******", Nickname = "NewVALIDNICK", AuthCode = new string('b', 40) }; var httpServer = new InMemoryHttpServer("http://localhost/"); var userResponse = httpServer.CreatePostRequest("api/users/register", testUser); var userContentString = userResponse.Content.ReadAsStringAsync().Result; var userModel = JsonConvert.DeserializeObject<UserLoggedModel>(userContentString); var testPostOne = new PostNewModel() { Title = "Post", Text = "ValidText", Tags = new string[] { "other" } }; var testPostTwo = new PostNewModel() { Title = "Next Post", Text = "NextText", Tags = new string[] { "other" } }; var testPostThree = new PostNewModel() { Title = "Third Post", Text = "Some", Tags = new string[] { "other" } }; httpServer.CreatePostRequest("api/posts", testPostOne, "application/json", userModel.SessionKey); httpServer.CreatePostRequest("api/posts", testPostTwo, "application/json", userModel.SessionKey); httpServer.CreatePostRequest("api/posts", testPostThree, "application/json", userModel.SessionKey); var response = httpServer.CreateGetRequest("api/posts?tags=other", "application/json", userModel.SessionKey); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.IsNotNull(response.Content); var contentString = response.Content.ReadAsStringAsync().Result; var model = JsonConvert.DeserializeObject<List<PostModel>>(contentString); Assert.AreEqual(3, model.Count); }
public void Create_WhenSessionKeyNotValid_ShouldSaveToDatabase() { var testPost = new PostNewModel() { Title = "Post", Text = "ValidText", Tags = { } }; var httpServer = new InMemoryHttpServer("http://localhost/"); var response = httpServer.CreatePostRequest("api/posts", testPost, "application/json", new string('a', 50)); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); }
public HttpResponseMessage PostNewPost(PostNewModel model, [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey) { var responseMsg = this.PerformOperationAndHandleExceptions( () => { var context = new BlogSystemContext(); using (context) { var user = context.Users.FirstOrDefault( usr => usr.SessionKey == sessionKey); if (user == null) { throw new InvalidOperationException("Invalid sessionKey"); } if (model.Title == null || model.Text == null) { throw new ArgumentNullException("Post title or post text cannot be null"); } string[] titleWords = model.Title.Split( new char[] { ' ', ',', '.', '!', '?', '\'', '(', ')' }, StringSplitOptions.RemoveEmptyEntries); IList<Tag> tags = new List<Tag>(); if (model.Tags != null) { foreach (var item in model.Tags) { var tag = context.Tags.FirstOrDefault(t => t.Name == item.ToLower()); if (tag == null) { tag = new Tag() { Name = item.ToLower() }; context.Tags.Add(tag); context.SaveChanges(); } tags.Add(tag); } } foreach (var item in titleWords) { var tag = context.Tags.FirstOrDefault(t => t.Name == item.ToLower()); if (tag == null) { tag = new Tag() { Name = item.ToLower() }; context.Tags.Add(tag); context.SaveChanges(); } tags.Add(tag); } var post = new Post() { Title = model.Title, Text = model.Text, PostDate = DateTime.Now, User = user, Tags = tags }; context.Posts.Add(post); context.SaveChanges(); var createdModel = new PostCreatedModel() { Id = post.Id, Title = post.Title }; var response = this.Request.CreateResponse(HttpStatusCode.Created, createdModel); return response; } }); return responseMsg; }