From 79968a3a35b45b1c2a37031fae31439dddec0e0a Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 22 Nov 2022 22:42:27 +0300 Subject: [PATCH 1/2] Fixed logic of the business --- .../Volo/CmsKit/Pages/PageManager.cs | 124 +++++++++--------- 1 file changed, 64 insertions(+), 60 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs index 96393084c9..c11a64689a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs @@ -8,76 +8,80 @@ namespace Volo.CmsKit.Pages; public class PageManager : DomainService { - protected IPageRepository PageRepository { get; } + protected IPageRepository PageRepository { get; } - public PageManager(IPageRepository pageRepository) - { - PageRepository = pageRepository; - } + public PageManager(IPageRepository pageRepository) + { + PageRepository = pageRepository; + } - public virtual async Task CreateAsync( - [NotNull] string title, - [NotNull] string slug, - [CanBeNull] string content = null, - [CanBeNull] string script = null, - [CanBeNull] string style = null) - { - Check.NotNullOrEmpty(title, nameof(title)); - Check.NotNullOrEmpty(slug, nameof(slug)); + public virtual async Task CreateAsync( + [NotNull] string title, + [NotNull] string slug, + [CanBeNull] string content = null, + [CanBeNull] string script = null, + [CanBeNull] string style = null) + { + Check.NotNullOrEmpty(title, nameof(title)); + Check.NotNullOrEmpty(slug, nameof(slug)); - await CheckPageSlugAsync(slug); + await CheckPageSlugAsync(slug); - return new Page( - GuidGenerator.Create(), - title, - slug, - content, - script, - style, - CurrentTenant.Id); - } + return new Page( + GuidGenerator.Create(), + title, + slug, + content, + script, + style, + CurrentTenant.Id); + } - public virtual async Task SetSlugAsync(Page page, string newSlug) - { - if (page.Slug != newSlug) - { - await CheckPageSlugAsync(newSlug); - page.SetSlug(newSlug); - } - } + public virtual async Task SetSlugAsync(Page page, string newSlug) + { + if (page.Slug != newSlug) + { + await CheckPageSlugAsync(newSlug); + page.SetSlug(newSlug); + } + } - public virtual async Task SetHomePageAsync(Page page) - { - var currentHomePages = await PageRepository.GetListAsync(); + public virtual async Task SetHomePageAsync(Page page) + { + var homePage = await GetHomePageAsync(); - foreach (var homePage in currentHomePages) - { - homePage.SetIsHomePage(false); - } + if (!page.IsHomePage) + { + if (homePage != null) + { + homePage.SetIsHomePage(false); + await PageRepository.UpdateAsync(homePage); + } - await PageRepository.UpdateManyAsync(currentHomePages); - await PageRepository.UpdateAsync(page); - - page.SetIsHomePage(true); - } + homePage = await PageRepository.GetAsync(page.Id); + } - public virtual async Task GetHomePageAsync() - { - var currentHomePages = await PageRepository.GetListAsync(); + homePage.SetIsHomePage(!page.IsHomePage); + await PageRepository.UpdateAsync(homePage); + } - if (currentHomePages.Count > 1) - { - throw new BusinessException("There can be only one home page."); - } + public virtual async Task GetHomePageAsync() + { + var currentHomePages = await PageRepository.GetListOfHomePagesAsync(); - return currentHomePages.FirstOrDefault(); - } + if (currentHomePages.Count > 1) + { + throw new BusinessException("There can be only one home page."); + } - protected virtual async Task CheckPageSlugAsync(string slug) - { - if (await PageRepository.ExistsAsync(slug)) - { - throw new PageSlugAlreadyExistsException(slug); - } - } + return currentHomePages.FirstOrDefault(); + } + + protected virtual async Task CheckPageSlugAsync(string slug) + { + if (await PageRepository.ExistsAsync(slug)) + { + throw new PageSlugAlreadyExistsException(slug); + } + } } From eec24898a0838f1254ef5e58a54d0c0cc035d7fb Mon Sep 17 00:00:00 2001 From: malik masis Date: Wed, 23 Nov 2022 11:27:36 +0300 Subject: [PATCH 2/2] Fixed the unpassed unit test --- .../Pages/PageManager_Test.cs | 200 +++++++++--------- 1 file changed, 96 insertions(+), 104 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs index 44cea7d005..9eac77773d 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs @@ -1,113 +1,105 @@ using System.Threading.Tasks; using Shouldly; -using Volo.CmsKit.Tags; +using Volo.Abp; using Xunit; namespace Volo.CmsKit.Pages; public class PageManager_Test : CmsKitDomainTestBase { - private readonly PageManager pageManager; - private readonly CmsKitTestData testData; - private readonly IPageRepository pageRepository; - - public PageManager_Test() - { - pageManager = GetRequiredService(); - testData = GetRequiredService(); - pageRepository = GetRequiredService(); - } - - [Fact] - public async Task CreateAsync_ShouldWorkProperly_WithNonExistingSlug() - { - var title = "My awesome page"; - var slug = "my-awesome-page"; - var content = "

My Awesome Page

This is my awesome page content!

"; - - var page = await pageManager.CreateAsync(title, slug, content); - - page.ShouldNotBeNull(); - page.Title.ShouldBe(title); - page.Slug.ShouldBe(slug); - page.Content.ShouldBe(content); - } - - [Fact] - public async Task CreateAsync_ShouldThrowException_WithExistingSlug() - { - var title = "My awesome page"; - var slug = testData.Page_1_Slug; - var content = "

My Awesome Page

This is my awesome page content!

"; - - var exception = await Should.ThrowAsync(async () => - await pageManager.CreateAsync(title, slug, content)); - - exception.ShouldNotBeNull(); - } - - [Fact] - public async Task SetSlugAsync_ShouldWorkProperly_WithNonExistingSlug() - { - var newSlug = "freshly-generated-new-slug"; - var page = await pageRepository.GetAsync(testData.Page_1_Id); - - await pageManager.SetSlugAsync(page, newSlug); - - page.Slug.ShouldBe(newSlug); - } - - [Fact] - public async Task SetSlugAsync_ShouldThrowException_WithExistingSlug() - { - var newSlug = testData.Page_2_Slug; - var page = await pageRepository.GetAsync(testData.Page_1_Id); - - var exception = await Should.ThrowAsync(async () => - await pageManager.SetSlugAsync(page, newSlug)); - - exception.ShouldNotBeNull(); - } - - [Fact] - public async Task SetHomePageAsync_ShouldWorkProperly_IfExistHomePage() - { - await WithUnitOfWorkAsync(async ()=> - { - var page = await pageRepository.GetAsync(testData.Page_1_Id); - - await pageManager.SetHomePageAsync(page); - }); - - var page = await pageRepository.GetAsync(testData.Page_1_Id); - page.IsHomePage.ShouldBeTrue(); - - var pageSetAsHomePageAsFalse = await pageRepository.GetAsync(testData.Page_2_Id); - pageSetAsHomePageAsFalse.IsHomePage.ShouldBeFalse(); - } - - [Fact] - public async Task SetHomePageAsync_ShouldFix_WhenMultipleHomePageExist() - { - await WithUnitOfWorkAsync(async () => - { - var page1 = await pageRepository.GetAsync(testData.Page_1_Id); - var page2 = await pageRepository.GetAsync(testData.Page_2_Id); - - page1.SetIsHomePage(true); - page2.SetIsHomePage(true); - - await pageRepository.UpdateManyAsync(new[] { page1, page2 }, autoSave: true); - - await pageManager.SetHomePageAsync(page1); - }); - - var page1 = await pageRepository.GetAsync(testData.Page_1_Id); - var page2 = await pageRepository.GetAsync(testData.Page_2_Id); - - page2 = await pageRepository.GetAsync(testData.Page_2_Id); - - page1.IsHomePage.ShouldBeTrue(); - page2.IsHomePage.ShouldBeFalse(); - } + private readonly PageManager pageManager; + private readonly CmsKitTestData testData; + private readonly IPageRepository pageRepository; + + public PageManager_Test() + { + pageManager = GetRequiredService(); + testData = GetRequiredService(); + pageRepository = GetRequiredService(); + } + + [Fact] + public async Task CreateAsync_ShouldWorkProperly_WithNonExistingSlug() + { + var title = "My awesome page"; + var slug = "my-awesome-page"; + var content = "

My Awesome Page

This is my awesome page content!

"; + + var page = await pageManager.CreateAsync(title, slug, content); + + page.ShouldNotBeNull(); + page.Title.ShouldBe(title); + page.Slug.ShouldBe(slug); + page.Content.ShouldBe(content); + } + + [Fact] + public async Task CreateAsync_ShouldThrowException_WithExistingSlug() + { + var title = "My awesome page"; + var slug = testData.Page_1_Slug; + var content = "

My Awesome Page

This is my awesome page content!

"; + + var exception = await Should.ThrowAsync(async () => + await pageManager.CreateAsync(title, slug, content)); + + exception.ShouldNotBeNull(); + } + + [Fact] + public async Task SetSlugAsync_ShouldWorkProperly_WithNonExistingSlug() + { + var newSlug = "freshly-generated-new-slug"; + var page = await pageRepository.GetAsync(testData.Page_1_Id); + + await pageManager.SetSlugAsync(page, newSlug); + + page.Slug.ShouldBe(newSlug); + } + + [Fact] + public async Task SetSlugAsync_ShouldThrowException_WithExistingSlug() + { + var newSlug = testData.Page_2_Slug; + var page = await pageRepository.GetAsync(testData.Page_1_Id); + + var exception = await Should.ThrowAsync(async () => + await pageManager.SetSlugAsync(page, newSlug)); + + exception.ShouldNotBeNull(); + } + + [Fact] + public async Task SetHomePageAsync_ShouldWorkProperly_IfExistHomePage() + { + await WithUnitOfWorkAsync(async () => + { + var page = await pageRepository.GetAsync(testData.Page_1_Id); + + await pageManager.SetHomePageAsync(page); + }); + + var page = await pageRepository.GetAsync(testData.Page_1_Id); + page.IsHomePage.ShouldBeTrue(); + + var pageSetAsHomePageAsFalse = await pageRepository.GetAsync(testData.Page_2_Id); + pageSetAsHomePageAsFalse.IsHomePage.ShouldBeFalse(); + } + + [Fact] + public async Task SetHomePageAsync_ShouldThrowException_WhenMultipleHomePageExist() + { + await WithUnitOfWorkAsync(async () => + { + var page1 = await pageRepository.GetAsync(testData.Page_1_Id); + var page2 = await pageRepository.GetAsync(testData.Page_2_Id); + + page1.SetIsHomePage(true); + page2.SetIsHomePage(true); + + await pageRepository.UpdateManyAsync(new[] { page1, page2 }, autoSave: true); + + await Assert.ThrowsAsync(async () => await pageManager.SetHomePageAsync(page1)); + }); + } }