public async Task InvalidDelete() { // Arrange Moq.Mock <IBloggingRepository> mock = MockBloggingRepository(); IBloggingRepository repository = mock.Object; var logger = LoggerFactory.CreateLogger <BlogsController>(); //1st add one object await repository.AddAsync(new Blog { BlogId = 99999, Post = null, Url = "http://www.99999.com", }); await repository.SaveAsync(); using (IBlogsController controller = new BlogsController(repository, logger, Configuration, DataProtectionProvider)) { var model = new DecoratedBlog { BlogId = 99999, Post = null, Url = "bad_url_but_no_matter", ProtectedID = "giberish" }; // Act var result = await controller.BlogAction(model, true, BlogActionEnum.Delete); // Assert Assert.IsType <NotFoundResult>(result); Assert.Equal(404, ((NotFoundResult)result).StatusCode); } }
public async Task <ActionResult> BlogAction(DecoratedBlog blog, bool ajax, BlogActionEnum operation = BlogActionEnum.Unknown) { if (operation == BlogActionEnum.Delete) { ModelState.Remove(nameof(blog.Url)); } if (!ModelState.IsValid) { if (ajax) { return(Json("error")); } else { IEnumerable <DecoratedBlog> lst = await GetBlogs(); lst = lst.Where(l => l.ProtectedID != blog.ProtectedID).Union(new[] { blog }); return(View(nameof(Index), lst)); } } ActionResult result; switch (operation) { case BlogActionEnum.Edit: result = await EditBlog(blog.BlogId, blog.Url, ajax); break; case BlogActionEnum.Delete: result = await DeleteBlog(blog.BlogId, ajax); break; case BlogActionEnum.Unknown: default: throw new NotSupportedException($"Unknown {nameof(operation)} {operation}"); } if (ajax) { return(result); } else { var appRootPath = _configuration.AppRootPath(); var destination_url = appRootPath + ASPX; return(Redirect(destination_url)); } }
public async Task InvalidEdit() { // Arrange Moq.Mock <IBloggingRepository> mock = MockBloggingRepository(); IBloggingRepository repository = mock.Object; var logger = LoggerFactory.CreateLogger <BlogsController>(); //1st add one object await repository.AddAsync(new Blog { BlogId = -99999, Post = null, Url = "http://www.999999.com", }); await repository.SaveAsync(); using (IBlogsController controller = new BlogsController(repository, logger, Configuration, DataProtectionProvider)) { var model = new DecoratedBlog { BlogId = -99999, Post = null, Url = "http://www.minus999999.com", ProtectedID = "giberish" }; // Act ((Controller)controller).ModelState.AddModelError(nameof(Blog.Url), "bad id"); var result = await controller.BlogAction(model, true, BlogActionEnum.Edit); // Assert Assert.IsType <JsonResult>(result); Assert.IsType <string>(((JsonResult)result).Value); Assert.Equal("error", ((JsonResult)result).Value.ToString()); } }
public async Task Edit() { // Arrange Moq.Mock <IBloggingRepository> mock = MockBloggingRepository(); IBloggingRepository repository = mock.Object; var logger = LoggerFactory.CreateLogger <BlogsController>(); //1st add one object await repository.AddAsync(new Blog { BlogId = 2, Post = null, Url = "http://www.internet.com", }); await repository.SaveAsync(); using (IBlogsController controller = new BlogsController(repository, logger, Configuration, DataProtectionProvider)) { var model = new DecoratedBlog { BlogId = 2, Post = null, Url = "http://www.changed-internet.com", ProtectedID = "giberish" }; // Act var result = await controller.BlogAction(model, true, BlogActionEnum.Edit); // Assert Assert.IsType <JsonResult>(result); Assert.IsType <Blog>(((JsonResult)result).Value); Assert.Equal(2, ((Blog)((JsonResult)result).Value).BlogId); Assert.Contains("changed", ((Blog)((JsonResult)result).Value).Url); } }
public async Task Delete() { // Arrange Moq.Mock <IBloggingRepository> mock = MockBloggingRepository(); IBloggingRepository repository = mock.Object; var logger = LoggerFactory.CreateLogger <BlogsController>(); //1st add one object await repository.AddAsync(new Blog { BlogId = 2, Post = null, Url = "http://www.internet.com", }); await repository.SaveAsync(); using (IBlogsController controller = new BlogsController(repository, logger, Configuration, DataProtectionProvider)) { var model = new DecoratedBlog { BlogId = 2, Post = null, Url = "bad_url_but_no_matter", ProtectedID = "giberish" }; // Act var result = await controller.ItemAction(model, true, BlogActionEnum.Delete); // Assert Assert.IsType <JsonResult>(result); Assert.IsType <string>(((JsonResult)result).Value); Assert.Equal("deleted", ((JsonResult)result).Value.ToString()); } }
public async Task Blog_CRUD_Test() { if (_fixture.DOTNET_RUNNING_IN_CONTAINER) { return; //pass on fake DB with no data } // Arrange string antiforgery_token; List <KeyValuePair <string, string> > data; using (var create_get_response = await _client.GetAsync($"{_fixture.AppRootPath}{BlogsController.ASPX}/{nameof(BlogsController.Create)}/", HttpCompletionOption.ResponseContentRead)) { // Assert create_get_response.EnsureSuccessStatusCode(); antiforgery_token = await PostRequestHelper.ExtractAntiForgeryToken(create_get_response); // Arrange var now = DateTime.Now; data = new Blog { BlogId = 0, Post = new[] { new Post { Content = $"aaaa {now}", Title = "titla" } }, Url = $"http://www.inernetAt-{now.Year}-{now.Month}-{now.Day}.com/Content{now.Hour}-{now.Minute}-{now.Second}" }.ToDictionary().ToList(); data.Add(new KeyValuePair <string, string>("__RequestVerificationToken", antiforgery_token)); using (var formPostBodyData = new FormUrlEncodedContent(data)) { PostRequestHelper.CreateFormUrlEncodedContentWithCookiesFromResponse(formPostBodyData.Headers, create_get_response); // Act using (var redirect = await _client.PostAsync($"{_fixture.AppRootPath}{BlogsController.ASPX}/{nameof(BlogsController.Create)}/", formPostBodyData)) { // Assert Assert.NotNull(redirect); Assert.Equal(HttpStatusCode.Redirect, redirect.StatusCode); Assert.Contains($"{_fixture.AppRootPath}{BlogsController.ASPX}", redirect.Headers.GetValues("Location").FirstOrDefault()); } } int last_inserted_id; string last_inserted_ProtectedID; using (var index_response = await _client.GetAsync($"{_fixture.AppRootPath}{BlogsController.ASPX}/", HttpCompletionOption.ResponseContentRead)) { var responseString = await index_response.Content.ReadAsStringAsync(); MatchCollection matches = Regex.Matches(responseString, @"\<form method=""post"" class=""blogForm"" data-id=""([0-9].*)""\>"); Assert.NotEmpty(matches); var ids = new List <int>(matches.Count); foreach (Match m in matches) { var match_count = m.Success ? m.Groups[1].Captures.Count : 0; Assert.True(match_count > 0); var id = int.Parse(m.Groups[1].Captures[match_count - 1].Value); ids.Add(id); } last_inserted_id = ids.OrderByDescending(_ => _).First(); Match match = Regex.Match(responseString, $@"\<input type=""hidden"" id=""ProtectedID_{last_inserted_id}"" name=""ProtectedID"" value=""([^""]+)"" \/\>"); Assert.True(match.Success && match.Groups[1].Captures.Count > 0); last_inserted_ProtectedID = match.Groups[1].Captures[0].Value; } data = new DecoratedBlog { BlogId = last_inserted_id, ProtectedID = last_inserted_ProtectedID, Url = $"http://www.changed-{now.Year + 1}-{now.Month}-{now.Day}.com/NewContent{now.Hour}-{now.Minute}-{now.Second}" }.ToDictionary().ToList(); data.Add(new KeyValuePair <string, string>("__RequestVerificationToken", antiforgery_token)); using (var formPostBodyData = new FormUrlEncodedContent(data)) { PostRequestHelper.CreateFormUrlEncodedContentWithCookiesFromResponse(formPostBodyData.Headers, create_get_response); using (var response = await _client.PostAsync($"{_fixture.AppRootPath}{BlogsController.ASPX}/{nameof(BlogActionEnum.Edit)}/{last_inserted_id}/true", formPostBodyData)) { Assert.NotNull(response); response.EnsureSuccessStatusCode(); Assert.Contains("application/json", response.Content.Headers.GetValues("Content-Type").FirstOrDefault()); Assert.Contains("{\"blogId\":" + last_inserted_id + ",\"url\":\"" + $"http://www.changed-{now.Year + 1}-{now.Month}-{now.Day}.com/NewContent{now.Hour}-{now.Minute}-{now.Second}", await response.Content.ReadAsStringAsync()); } } data = new DecoratedBlog { BlogId = last_inserted_id, ProtectedID = last_inserted_ProtectedID, }.ToDictionary().ToList(); data.Add(new KeyValuePair <string, string>("__RequestVerificationToken", antiforgery_token)); using (var formPostBodyData = new FormUrlEncodedContent(data)) { PostRequestHelper.CreateFormUrlEncodedContentWithCookiesFromResponse(formPostBodyData.Headers, create_get_response); using (var response = await _client.PostAsync($"{_fixture.AppRootPath}{BlogsController.ASPX}/{nameof(BlogActionEnum.Delete)}/{last_inserted_id}/true", formPostBodyData)) { Assert.NotNull(response); response.EnsureSuccessStatusCode(); Assert.Contains("application/json", response.Content.Headers.GetValues("Content-Type").FirstOrDefault()); Assert.Equal("\"deleted\"", await response.Content.ReadAsStringAsync()); } } } //end using (var create_get_response }