using System.Threading.Tasks; using Shouldly; 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_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)); }); } }