diff --git a/src/Robware.Api.Blog.Tests/BlogControllerTests.cs b/src/Robware.Api.Blog.Tests/BlogControllerTests.cs index 9c96418..7401d24 100644 --- a/src/Robware.Api.Blog.Tests/BlogControllerTests.cs +++ b/src/Robware.Api.Blog.Tests/BlogControllerTests.cs @@ -242,5 +242,27 @@ namespace Robware.Api.Blog.Tests { (await controller.DeletePost(1)).Should().BeOfType(); await repo.Received(1).DeletePostAsync(1); } + + [Fact] + public async Task PublishPost_WithId_Returns200() { + var logger = Substitute.For>(); + var repo = Substitute.For(); + var existingPost = new BlogPost {Draft = "content"}; + repo.GetPostByIdAsync(1).Returns(existingPost); + + var controller = new BlogController(logger, repo); + (await controller.PublishPost(1)).Should().BeOfType(); + await repo.Received(1).SavePost(Arg.Is(post => post.Content == "content")); + } + + [Fact] + public async Task PublishPost_WithIdForPostThatDoesntExist_Returns400() { + var logger = Substitute.For>(); + var repo = Substitute.For(); + repo.GetPostByIdAsync(1).Throws(new ItemNotFoundException("", null)); + + var controller = new BlogController(logger, repo); + (await controller.PublishPost(1)).Should().BeOfType(); + } } } diff --git a/src/Robware.Api.Blog/Controllers/BlogController.cs b/src/Robware.Api.Blog/Controllers/BlogController.cs index b560fc7..d67f8fb 100644 --- a/src/Robware.Api.Blog/Controllers/BlogController.cs +++ b/src/Robware.Api.Blog/Controllers/BlogController.cs @@ -103,5 +103,19 @@ namespace Robware.Api.Blog.Controllers { await _blogRepository.DeletePostAsync(id); return Ok(); } + + [HttpPost(nameof(PublishPost))] + public async Task PublishPost([FromBody] int id) { + try { + var post = await _blogRepository.GetPostByIdAsync(id); + post.Publish(); + await _blogRepository.SavePost(post); + return Ok(); + } + catch (ItemNotFoundException e) { + _logger.Log(LogLevel.Error, e.Message); + return BadRequest("Tried to publish post that doesn't exist"); + } + } } }