Open Source Web Application Framework for ASP.NET Core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

109 lines
3.8 KiB

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