Browse Source

CmsKit - Add MenuManager Tests & Make Page Prefix configurable

pull/9261/head
Enis Necipoğlu 5 years ago
parent
commit
2b82000335
  1. 11
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs
  2. 6
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs
  3. 3
      modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs
  4. 109
      modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs
  5. 18
      modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs
  6. 12
      modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs

11
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs

@ -1,4 +1,6 @@
namespace Volo.CmsKit.Pages
using System;
namespace Volo.CmsKit.Pages
{
public class PageConsts
{
@ -13,5 +15,12 @@
public static int MaxScriptLength { get; set; } = int.MaxValue;
public static int MaxStyleLength { get; set; } = int.MaxValue;
private static string _urlPrefix = "/pages/";
public static string UrlPrefix
{
get => _urlPrefix;
set => _urlPrefix = value.EnsureEndsWith('/').EnsureStartsWith('/');
}
}
}

6
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs

@ -22,7 +22,7 @@ namespace Volo.CmsKit.Menus
public virtual void SetPageUrl(MenuItem menuItem, Page page)
{
menuItem.SetPageId(page.Id);
menuItem.SetUrl(page.Slug.EnsureStartsWith('/'));
menuItem.SetUrl(PageConsts.UrlPrefix + page.Slug);
}
[UnitOfWork]
@ -46,11 +46,11 @@ namespace Volo.CmsKit.Menus
await MenuRepository.UpdateAsync(menu);
}
public void OrganizeTreeOrderForMenuItem(Menu menu, MenuItem menuItem)
public virtual void OrganizeTreeOrderForMenuItem(Menu menu, MenuItem menuItem)
{
var sameTree = menu.Items.Where(x => x.ParentId == menuItem.ParentId).OrderBy(x => x.Order).ToList();
sameTree.Remove(menuItem); // Remove if exists
sameTree.Remove(menuItem); // Remove if exists to prevent misordering with same order number
sameTree.Insert(menuItem.Order, menuItem);

3
modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs

@ -9,6 +9,7 @@ using Volo.Abp.UI.Navigation;
using Volo.Abp.VirtualFileSystem;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Localization;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Public.Web.Menus;
using Volo.CmsKit.Web;
@ -72,7 +73,7 @@ namespace Volo.CmsKit.Public.Web
{
Configure<RazorPagesOptions>(options =>
{
options.Conventions.AddPageRoute("/Public/CmsKit/Pages/Index", @"/pages/{slug:minlength(1)}");
options.Conventions.AddPageRoute("/Public/CmsKit/Pages/Index", @"{PageConsts.UrlPrefix}{slug:minlength(1)}");
options.Conventions.AddPageRoute("/Public/CmsKit/Blogs/Index", @"/blogs/{blogSlug:minlength(1)}");
options.Conventions.AddPageRoute("/Public/CmsKit/Blogs/BlogPost", @"/blogs/{blogSlug}/{blogPostSlug:minlength(1)}");
});

109
modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs

@ -0,0 +1,109 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Nito.AsyncEx;
using Shouldly;
using Volo.CmsKit.Pages;
using Xunit;
namespace Volo.CmsKit.Menus
{
public class MenuManager_Test : CmsKitDomainTestBase
{
private readonly MenuManager menuManager;
private readonly CmsKitTestData testData;
private readonly IMenuRepository menuRepository;
private readonly IPageRepository pageRepository;
public MenuManager_Test()
{
menuManager = GetRequiredService<MenuManager>();
testData = GetRequiredService<CmsKitTestData>();
menuRepository = GetRequiredService<IMenuRepository>();
pageRepository = GetRequiredService<IPageRepository>();
}
[Fact]
public async Task SetPageUrl_ShouldSetUrlSameWithPage_WithExistingPage()
{
var page = await pageRepository.GetAsync(testData.Page_1_Id);
var menu = await menuRepository.GetAsync(testData.Menu_1_Id);
var menuItem = menu.Items.First();
menuManager.SetPageUrl(menuItem, page);
menuItem.Url.ShouldNotBeNullOrEmpty();
menuItem.Url.ShouldBe(PageConsts.UrlPrefix + page.Slug);
}
[Fact]
public async Task MoveAsync_ShouldMoveCorrectly_UnderAnotherMenu()
{
await menuManager.MoveAsync(testData.Menu_1_Id, testData.MenuItem_2_Id, testData.MenuItem_1_Id);
var menu = await menuRepository.GetAsync(testData.Menu_1_Id);
menu.Items.ShouldContain(
x => x.ParentId == testData.MenuItem_1_Id
&& x.Id == testData.MenuItem_2_Id);
}
[Fact]
public async Task MoveAsync_ShouldChangePositionCorrectly_UnderSameParent()
{
await menuManager.MoveAsync(testData.Menu_1_Id, testData.MenuItem_2_Id, null, 0);
var menu = await menuRepository.GetAsync(testData.Menu_1_Id);
var menuItem1 = menu.Items.First(x => x.Id == testData.MenuItem_1_Id);
var menuItem2 = menu.Items.First(x => x.Id == testData.MenuItem_2_Id);
menuItem1.Order.ShouldBeGreaterThan(menuItem2.Order);
}
[Fact]
public async Task OrganizeTreeOrderForMenuItem_ShouldWorkProperly_WithNewMenuItem()
{
var menu3Id = Guid.NewGuid();
var menu = await menuRepository.GetAsync(testData.Menu_1_Id);
var menuItem1 = menu.Items.First(x => x.Id == testData.MenuItem_1_Id);
var menuItem2 = menu.Items.First(x => x.Id == testData.MenuItem_2_Id);
var menuItem3 = new MenuItem(menu3Id, menu.Id, "Menu 3", "#");
menu.Items.Add(menuItem3);
menuItem3.Order = 0;
menuManager.OrganizeTreeOrderForMenuItem(menu, menuItem3);
menuItem3.Order.ShouldBeLessThan(menuItem1.Order);
menuItem3.Order.ShouldBeLessThan(menuItem2.Order);
}
[Fact]
public async Task SetMainMenuAsync_ShouldSetOnlyOneMainMenu()
{
await menuManager.SetMainMenuAsync(testData.Menu_2_Id);
var menuList = await menuRepository.GetListAsync();
var isMainMenuTrueCount = menuList.Count(menu => menu.IsMainMenu);
isMainMenuTrueCount.ShouldBe(1);
menuList.ShouldContain(menu => menu.IsMainMenu && menu.Id == testData.Menu_2_Id);
}
[Fact]
public async Task UnSetMainMenuAsync_ShouldUnsetProperly()
{
await menuManager.UnSetMainMenuAsync(testData.Menu_1_Id);
var menuList = await menuRepository.GetListAsync();
var isMainMenuTrueCount = menuList.Count(menu => menu.IsMainMenu);
isMainMenuTrueCount.ShouldBe(0);
menuList.ShouldNotContain(menu => menu.IsMainMenu && menu.Id == testData.Menu_1_Id);
}
}
}

18
modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs

@ -434,11 +434,19 @@ namespace Volo.CmsKit
await _menuRepository.InsertAsync(menu);
await _menuRepository.InsertAsync(
new Menu(
_cmsKitTestData.Menu_2_Id,
null,
_cmsKitTestData.Menu_2_Name));
var menu2 = new Menu(
_cmsKitTestData.Menu_2_Id,
null,
_cmsKitTestData.Menu_2_Name);
menu2.Items.Add(
new MenuItem(
_cmsKitTestData.MenuItem_3_Id,
menu2.Id,
_cmsKitTestData.MenuItem_3_Name,
_cmsKitTestData.MenuItem_3_Url));
await _menuRepository.InsertAsync(menu2);
}
}
}

12
modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs

@ -115,18 +115,26 @@ namespace Volo.CmsKit
public string Menu_1_Name { get; } = "MainMenu";
public Guid MenuItem_1_Id { get; } = Guid.NewGuid();
public string MenuItem_1_Name { get; } = "About Us";
public string MenuItem_1_Url { get; } = "/about-us";
public Guid MenuItem_2_Id { get; } = Guid.NewGuid();
public string MenuItem_2_Name { get; } = "Our Team";
public string MenuItem_2_Url { get; } = "/team";
public Guid Menu_2_Id { get; } = Guid.NewGuid();
public string Menu_2_Name { get; } = "DraftMenu";
public Guid MenuItem_3_Id { get; } = Guid.NewGuid();
public string MenuItem_3_Name { get; } = "Products";
public string MenuItem_3_Url { get; } = "/products";
}
}

Loading…
Cancel
Save