From 17bacf1aa7f9c2d039639d07dc63c79c1e48363c Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 24 Feb 2021 18:14:53 +0300 Subject: [PATCH] Added blog tests and refactoring --- .../Volo/CmsKit/Admin/Blogs/CreateBlogDto.cs | 17 ++++ .../Admin/Blogs/IBlogAdminAppService.cs | 2 +- .../Volo/CmsKit/Admin/Blogs/UpdateBlogDto.cs | 17 ++++ .../CmsKit/Admin/Blogs/BlogAdminAppService.cs | 4 +- .../CmsKit/Admin/Blogs/BlogAdminController.cs | 39 ++++---- .../Blogs/BlogAdminAppService_Tests.cs | 92 +++++++++++++++++++ .../Blogs/BlogManager_Test.cs | 50 ++++++++++ .../Blogs/BlogRepository_Test.cs | 27 ++++++ 8 files changed, 223 insertions(+), 25 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateBlogDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogDto.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogAdminAppService_Tests.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogManager_Test.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateBlogDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateBlogDto.cs new file mode 100644 index 0000000000..985567b48e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateBlogDto.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; +using Volo.CmsKit.Blogs; + +namespace Volo.CmsKit.Admin.Blogs +{ + public class CreateBlogDto + { + [Required] + [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))] + public string Name { get; set; } + + [Required] + [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxSlugLength))] + public string Slug { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs index 3544b3d7af..6d82e6117c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs @@ -3,7 +3,7 @@ using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs { - public interface IBlogAdminAppService : ICrudAppService + public interface IBlogAdminAppService : ICrudAppService { } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogDto.cs new file mode 100644 index 0000000000..832c1b7214 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogDto.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; +using Volo.CmsKit.Blogs; + +namespace Volo.CmsKit.Admin.Blogs +{ + public class UpdateBlogDto + { + [Required] + [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))] + public string Name { get; set; } + + [Required] + [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxSlugLength))] + public string Slug { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index 4f0d93d015..574f6f737a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -44,7 +44,7 @@ namespace Volo.CmsKit.Admin.Blogs } [Authorize(CmsKitAdminPermissions.Blogs.Create)] - public virtual async Task CreateAsync(BlogDto input) + public virtual async Task CreateAsync(CreateBlogDto input) { var blog = await BlogManager.CreateAsync(input.Name, input.Slug); @@ -54,7 +54,7 @@ namespace Volo.CmsKit.Admin.Blogs } [Authorize(CmsKitAdminPermissions.Blogs.Update)] - public virtual async Task UpdateAsync(Guid id, BlogDto input) + public virtual async Task UpdateAsync(Guid id, UpdateBlogDto input) { var blog = await BlogRepository.GetAsync(id); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs index da565413b1..5e8067ed6f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs @@ -1,9 +1,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; @@ -27,42 +24,40 @@ namespace Volo.CmsKit.Admin.Blogs BlogAdminAppService = blogAdminAppService; } - [HttpPost] - [Authorize(CmsKitAdminPermissions.Blogs.Create)] - public Task CreateAsync(BlogDto input) - { - return BlogAdminAppService.CreateAsync(input); - } - - [HttpDelete] - [Route("{id}")] - [Authorize(CmsKitAdminPermissions.Blogs.Delete)] - public Task DeleteAsync(Guid id) - { - return BlogAdminAppService.DeleteAsync(id); - } - [HttpGet] [Route("{id}")] - [Authorize(CmsKitAdminPermissions.Blogs.Default)] public Task GetAsync(Guid id) { return BlogAdminAppService.GetAsync(id); } [HttpGet] - [Authorize(CmsKitAdminPermissions.Blogs.Default)] - public Task> GetListAsync([FromQuery] BlogGetListInput input) + public Task> GetListAsync(BlogGetListInput input) { return BlogAdminAppService.GetListAsync(input); } + + [HttpPost] + [Authorize(CmsKitAdminPermissions.Blogs.Create)] + public Task CreateAsync(CreateBlogDto input) + { + return BlogAdminAppService.CreateAsync(input); + } [HttpPut] [Route("{id}")] [Authorize(CmsKitAdminPermissions.Blogs.Update)] - public Task UpdateAsync(Guid id, BlogDto input) + public Task UpdateAsync(Guid id, UpdateBlogDto input) { return BlogAdminAppService.UpdateAsync(id, input); } + + [HttpDelete] + [Route("{id}")] + [Authorize(CmsKitAdminPermissions.Blogs.Delete)] + public Task DeleteAsync(Guid id) + { + return BlogAdminAppService.DeleteAsync(id); + } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogAdminAppService_Tests.cs new file mode 100644 index 0000000000..0f0e4ee2f8 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogAdminAppService_Tests.cs @@ -0,0 +1,92 @@ +using System.Linq; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Domain.Entities; +using Volo.CmsKit.Admin.Blogs; +using Xunit; + +namespace Volo.CmsKit.Blogs +{ + public class BlogAdminAppService_Tests : CmsKitApplicationTestBase + { + protected IBlogAdminAppService BlogAdminAppService { get; } + protected CmsKitTestData CmsKitTestData { get; } + protected IBlogRepository BlogRepository { get; } + + public BlogAdminAppService_Tests() + { + BlogAdminAppService = GetRequiredService(); + CmsKitTestData = GetRequiredService(); + BlogRepository = GetRequiredService(); + } + + [Fact] + public async Task GetAsync() + { + var blog = await BlogAdminAppService.GetAsync(CmsKitTestData.Blog_Id); + + blog.Slug.ShouldBe(CmsKitTestData.BlogSlug); + } + + [Fact] + public async Task GetListAsync() + { + var blogs = await BlogAdminAppService.GetListAsync(new BlogGetListInput()); + + blogs.TotalCount.ShouldBeGreaterThan(0); + blogs.Items.Any(x => x.Slug == CmsKitTestData.BlogSlug).ShouldBeTrue(); + } + + [Fact] + public async Task CreateAsync_ShouldWork() + { + var blog = await BlogAdminAppService.CreateAsync(new CreateBlogDto + { + Name = "News", + Slug = "latest-news" + }); + + blog.ShouldNotBeNull(); + blog.Name.ShouldBe("News"); + blog.Slug.ShouldBe("latest-news"); + } + + [Fact] + public async Task CreateAsync_ShouldThrow_WithExistSlug() + { + await Should.ThrowAsync( + async () => + await BlogAdminAppService.CreateAsync(new CreateBlogDto + { + Name = "News", + Slug = CmsKitTestData.BlogSlug + })); + } + + [Fact] + public async Task UpdateAsync_ShouldWork() + { + var blog = await BlogAdminAppService.UpdateAsync(CmsKitTestData.Blog_Id, new UpdateBlogDto + { + Name = "New Name", + Slug = "new-slug" + }); + + var updatedBlog = await BlogAdminAppService.GetAsync(CmsKitTestData.Blog_Id); + + updatedBlog.Name.ShouldBe("New Name"); + updatedBlog.Slug.ShouldBe("new-slug"); + } + + [Fact] + public async Task DeleteAsync_ShouldWork() + { + await BlogAdminAppService.DeleteAsync(CmsKitTestData.Blog_Id); + + await Should.ThrowAsync( + async () => + await BlogAdminAppService.GetAsync(CmsKitTestData.Blog_Id) + ); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogManager_Test.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogManager_Test.cs new file mode 100644 index 0000000000..a5b878d454 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogManager_Test.cs @@ -0,0 +1,50 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Xunit; + +namespace Volo.CmsKit.Blogs +{ + public class BlogManager_Test : CmsKitDomainTestBase + { + protected IBlogRepository BlogRepository { get; } + protected BlogManager BlogManager { get; } + protected CmsKitTestData TestData { get; } + + public BlogManager_Test() + { + BlogRepository = GetRequiredService(); + BlogManager = GetRequiredService(); + TestData = GetRequiredService(); + } + + [Fact] + public async Task BlogCreate_ShouldThrowException_WithExistSlug() + { + await Should.ThrowAsync( + async () => + await BlogManager.CreateAsync("test-name", TestData.BlogSlug) + ); + } + + [Fact] + public async Task BlogCreate_ShouldWorkProperly() + { + var blog = await BlogManager.CreateAsync("test-name", "test-slug"); + + blog.ShouldNotBeNull(); + blog.Id.ShouldNotBe(Guid.Empty); + } + + [Fact] + public async Task BlogUpdate_ShouldWork() + { + var blog = await BlogRepository.GetAsync(TestData.Blog_Id); + + await BlogManager.UpdateAsync(blog, "New name", "new-slug"); + + blog.Name.ShouldBe("New name"); + blog.Slug.ShouldBe("new-slug"); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs index 50a99519eb..6d4fcd59fd 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs @@ -61,5 +61,32 @@ namespace Volo.CmsKit.Blogs result.ShouldBeFalse(); } + + [Fact] + public async Task GetList_ShouldWorkProperly() + { + var list = await blogRepository.GetListAsync(); + + list.ShouldNotBeNull(); + list.Count.ShouldBeGreaterThan(0); + } + + [Fact] + public async Task GetCount_ShouldWorkProperly() + { + var count = await blogRepository.GetCountAsync(); + + count.ShouldBeGreaterThan(0); + } + + [Fact] + public async Task SlugExistAsync_ShouldWorkProperly() + { + var exists = await blogRepository.SlugExistsAsync(testData.BlogSlug); + var notExists = await blogRepository.SlugExistsAsync("not-existing-blog-slug"); + + exists.ShouldBeTrue(); + notExists.ShouldBeFalse(); + } } }