Merge pull request #14786 from abpframework/Cmskit-set-paging-issue

Fixed logic of the business
pull/14796/head
malik masis 3 years ago committed by GitHub
commit 3488ad0e29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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<Page> 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<Page> 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<Page> 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<Page> 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);
}
}
}

@ -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<PageManager>();
testData = GetRequiredService<CmsKitTestData>();
pageRepository = GetRequiredService<IPageRepository>();
}
[Fact]
public async Task CreateAsync_ShouldWorkProperly_WithNonExistingSlug()
{
var title = "My awesome page";
var slug = "my-awesome-page";
var content = "<h1>My Awesome Page</h1><p>This is my awesome page content!</p>";
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 = "<h1>My Awesome Page</h1><p>This is my awesome page content!</p>";
var exception = await Should.ThrowAsync<PageSlugAlreadyExistsException>(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<PageSlugAlreadyExistsException>(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<PageManager>();
testData = GetRequiredService<CmsKitTestData>();
pageRepository = GetRequiredService<IPageRepository>();
}
[Fact]
public async Task CreateAsync_ShouldWorkProperly_WithNonExistingSlug()
{
var title = "My awesome page";
var slug = "my-awesome-page";
var content = "<h1>My Awesome Page</h1><p>This is my awesome page content!</p>";
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 = "<h1>My Awesome Page</h1><p>This is my awesome page content!</p>";
var exception = await Should.ThrowAsync<PageSlugAlreadyExistsException>(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<PageSlugAlreadyExistsException>(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<BusinessException>(async () => await pageManager.SetHomePageAsync(page1));
});
}
}

Loading…
Cancel
Save