Browse Source

CmsKit - Main Menu Implementation

pull/9261/head
Enis Necipoğlu 5 years ago
parent
commit
64b68b04f5
  1. 5
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.Designer.cs
  2. 1
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.cs
  3. 3
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs
  4. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs
  5. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuDto.cs
  6. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/UpdateMainMenuInput.cs
  7. 12
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs
  8. 10
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs
  9. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs
  10. 42
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js
  11. 2
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs
  12. 3
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs
  13. 2
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  14. 2
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  15. 4
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs
  16. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs
  17. 29
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs
  18. 7
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs
  19. 7
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs
  20. 11
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuPublicAppService.cs
  21. 30
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs
  22. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs
  23. 30
      modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuPublicController.cs
  24. 9
      modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs
  25. 11
      modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs
  26. 9
      modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs
  27. 5
      modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs
  28. 41
      modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs

5
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609081350_Initial.Designer.cs → modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.Designer.cs

@ -11,7 +11,7 @@ using Volo.CmsKit.EntityFrameworkCore;
namespace Volo.CmsKit.Migrations
{
[DbContext(typeof(UnifiedDbContext))]
[Migration("20210609081350_Initial")]
[Migration("20210609132819_Initial")]
partial class Initial
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -1496,6 +1496,9 @@ namespace Volo.CmsKit.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsMainMenu")
.HasColumnType("bit");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");

1
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609081350_Initial.cs → modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210609132819_Initial.cs

@ -374,6 +374,7 @@ namespace Volo.CmsKit.Migrations
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
Name = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsMainMenu = table.Column<bool>(type: "bit", nullable: false),
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true),

3
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs

@ -1494,6 +1494,9 @@ namespace Volo.CmsKit.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<bool>("IsMainMenu")
.HasColumnType("bit");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");

3
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs

@ -2,6 +2,7 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.CmsKit.Menus;
namespace Volo.CmsKit.Admin.Menus
{
@ -28,5 +29,7 @@ namespace Volo.CmsKit.Admin.Menus
Task DeleteMenuItemAsync(Guid menuId, Guid menuItemId);
Task MoveMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemMoveInput input);
Task UpdateMainMenuAsync(Guid menuId, UpdateMainMenuInput input);
}
}

1
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuDto.cs

@ -10,5 +10,6 @@ namespace Volo.CmsKit.Admin.Menus
public class MenuDto : EntityDto<Guid>
{
public string Name { get; set; }
public bool IsMainMenu { get; set; }
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/UpdateMainMenuInput.cs

@ -0,0 +1,7 @@
namespace Volo.CmsKit.Admin.Menus
{
public class UpdateMainMenuInput
{
public bool IsMainMenu { get; set; }
}
}

12
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs

@ -175,5 +175,17 @@ namespace Volo.CmsKit.Admin.Menus
{
return MenuManager.MoveAsync(menuId, menuItemId, input.NewParentId, input.Position);
}
public virtual async Task UpdateMainMenuAsync(Guid menuId, UpdateMainMenuInput input)
{
if (input.IsMainMenu)
{
await MenuManager.SetMainMenuAsync(menuId);
}
else
{
await MenuManager.UnSetMainMenuAsync(menuId);
}
}
}
}

10
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs

@ -8,7 +8,9 @@ using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.UI.Navigation;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Permissions;
namespace Volo.CmsKit.Admin.Menus
@ -93,6 +95,14 @@ namespace Volo.CmsKit.Admin.Menus
{
return MenuAdminAppService.MoveMenuItemAsync(menuId, menuItemId, input);
}
[Route("{menuId}/main-menu")]
[HttpPut]
[Authorize(CmsKitAdminPermissions.Menus.Update)]
public Task UpdateMainMenuAsync(Guid menuId, UpdateMainMenuInput input)
{
return MenuAdminAppService.UpdateMainMenuAsync(menuId, input);
}
[Route("{menuId}")]
[HttpPut]

1
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs

@ -5,6 +5,7 @@ using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Volo.CmsKit.Admin.Menus;
using Volo.CmsKit.Menus;
namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
{

42
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js

@ -29,6 +29,32 @@
location.href = "/Cms/Menus/" + data.record.id + "/menu-items"
}
},
{
text: l('MakeMainMenu'),
visible: function(data){
return abp.auth.isGranted('CmsKit.Menus.Update') && !data.isMainMenu
},
action: function (data) {
menusService
.updateMainMenu(data.record.id, { isMainMenu: true})
.then(function () {
dataTable.ajax.reload();
});
}
},
{
text: l('UnMakeMainMenu'),
visible: function(data){
return abp.auth.isGranted('CmsKit.Menus.Update') && data.isMainMenu
},
action: function (data) {
menusService
.updateMainMenu(data.record.id, { isMainMenu: false})
.then(function () {
dataTable.ajax.reload();
});
}
},
{
text: l('Edit'),
visible: abp.auth.isGranted('CmsKit.Menus.Update'),
@ -56,7 +82,21 @@
{
title: l("Name"),
orderable: true,
data: "name"
data: "name",
render: function (data, val ,record) {
if (record.isMainMenu) {
return (
'<strong>'
+
data
+
'</strong>'
);
} else {
return data;
}
}
}
]
}));

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemDto.cs → modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs

@ -2,7 +2,7 @@
using System.Collections.Generic;
using Volo.Abp.Application.Dtos;
namespace Volo.CmsKit.Admin.Menus
namespace Volo.CmsKit.Menus
{
public class MenuItemDto : AuditedEntityDto<Guid>
{

3
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuWithDetailsDto.cs → modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs

@ -5,11 +5,12 @@ using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
namespace Volo.CmsKit.Admin.Menus
namespace Volo.CmsKit.Menus
{
public class MenuWithDetailsDto : FullAuditedEntityDto<Guid>
{
public string Name { get; set; }
public bool IsMainMenu { get; set; }
public List<MenuItemDto> Items { get; set; }
}
}

2
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -54,6 +54,7 @@
"LoginToRate": "Login to rate",
"LoginToReact": "Login to react",
"LoginToReply": "Login to reply",
"MakeMainMenu": "Make Main Menu",
"Menu:CMS": "CMS",
"Menu:Menus": "Menus",
"MenuDeletionConfirmationMessage": "The menu '{0}' will be deleted. Are you sure?",
@ -149,6 +150,7 @@
"Update": "Update",
"UpdatePreferenceSuccessMessage": "Your preferences have been saved.",
"UpdateYourEmailPreferences": "Update your email preferences",
"UnMakeMainMenu": "Unmake Main Menu",
"UploadFailedMessage": "Upload failed.",
"UserId": "User Id",
"Username": "Username",

2
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json

@ -53,6 +53,7 @@
"LoginToRate": "Oylamak için giriş yapın",
"LoginToReact": "Reaksiyon vermek için giriş yap",
"LoginToReply": "Cevap vermek için giriş yap",
"MakeMainMenu": "Ana Menü Yap",
"Menu:CMS": "CMS",
"Menu:Menus": "Menüler",
"MenuDeletionConfirmationMessage": "'{0}' isimli menü silinecek. Emin misiniz?",
@ -140,6 +141,7 @@
"UpdatePreference": "Tercihleri Güncelle",
"UpdatePreferenceSuccessMessage": "Tercihleriniz kaydedilmiştir.",
"UpdateYourEmailPreferences": "E-posta tercihlerinizi güncelleyin",
"UnMakeMainMenu": "Ana Menü Atamasını Kaldır",
"UploadFailedMessage": "Karşıya yükleme işlemi başarısız oldu.",
"UserId": "Kullanıcı Id",
"Username": "Kullanıcı adı",

4
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs

@ -1,10 +1,12 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.CmsKit.Menus
{
public interface IMenuRepository : IBasicRepository<Menu, Guid>
{
Task<Menu> FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default);
}
}

2
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs

@ -12,6 +12,8 @@ namespace Volo.CmsKit.Menus
{
public string Name { get; protected set; }
public bool IsMainMenu { get; internal set; }
public Guid? TenantId { get; protected set; }
public ICollection<MenuItem> Items { get; protected set; }

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

@ -31,7 +31,7 @@ namespace Volo.CmsKit.Menus
var menu = await MenuRepository.GetAsync(menuId, includeDetails: true);
var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId)
?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId);
?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId);
if (newParentId.HasValue && !menu.Items.Any(a => a.Id == newParentId.Value))
{
@ -40,7 +40,7 @@ namespace Volo.CmsKit.Menus
menuItem.ParentId = newParentId;
menuItem.Order = position;
OrganizeTreeOrderForMenuItem(menu, menuItem);
await MenuRepository.UpdateAsync(menu);
@ -51,7 +51,7 @@ namespace Volo.CmsKit.Menus
var sameTree = menu.Items.Where(x => x.ParentId == menuItem.ParentId).OrderBy(x => x.Order).ToList();
sameTree.Remove(menuItem); // Remove if exists
sameTree.Insert(menuItem.Order, menuItem);
for (int i = 0; i < sameTree.Count; i++)
@ -59,5 +59,26 @@ namespace Volo.CmsKit.Menus
sameTree[i].Order = i;
}
}
public virtual async Task SetMainMenuAsync(Guid menuId)
{
var menus = await MenuRepository.GetListAsync(includeDetails: false);
foreach (var menu in menus)
{
menu.IsMainMenu = menuId == menu.Id;
}
await MenuRepository.UpdateManyAsync(menus);
}
public virtual async Task UnSetMainMenuAsync(Guid menuId)
{
var menu = await MenuRepository.GetAsync(menuId, includeDetails: false);
menu.IsMainMenu = false;
await MenuRepository.UpdateAsync(menu);
}
}
}
}

7
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
@ -18,5 +19,11 @@ namespace Volo.CmsKit.Menus
{
return (await base.WithDetailsAsync()).Include(i => i.Items);
}
public async Task<Menu> FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await (includeDetails ? await WithDetailsAsync() : await GetQueryableAsync())
.FirstOrDefaultAsync(x => x.IsMainMenu, GetCancellationToken(cancellationToken));
}
}
}

7
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs

@ -2,7 +2,9 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Driver.Linq;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using Volo.CmsKit.Menus;
@ -14,5 +16,10 @@ namespace Volo.CmsKit.MongoDB.Menus
public MongoMenuRepository(IMongoDbContextProvider<ICmsKitMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public async Task<Menu> FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await (await GetMongoQueryableAsync()).FirstOrDefaultAsync(x => x.IsMainMenu);
}
}
}

11
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuPublicAppService.cs

@ -0,0 +1,11 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.CmsKit.Menus;
namespace Volo.CmsKit.Public.Menus
{
public interface IMenuPublicAppService : IApplicationService
{
Task<MenuWithDetailsDto> GetMainMenuAsync();
}
}

30
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs

@ -0,0 +1,30 @@
using System.Threading.Tasks;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Menus;
namespace Volo.CmsKit.Public.Menus
{
[RequiresGlobalFeature(typeof(MenuFeature))]
public class MenuPublicAppService : CmsKitPublicAppServiceBase, IMenuPublicAppService
{
protected IMenuRepository MenuRepository { get; }
public MenuPublicAppService(IMenuRepository menuRepository)
{
MenuRepository = menuRepository;
}
public async Task<MenuWithDetailsDto> GetMainMenuAsync()
{
var menu = await MenuRepository.FindMainMenuAsync(includeDetails: true);
if (menu == null)
{
return null;
}
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu);
}
}
}

5
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs

@ -2,6 +2,7 @@
using Volo.Abp.AutoMapper;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Public.Blogs;
using Volo.CmsKit.Public.Comments;
@ -30,6 +31,10 @@ namespace Volo.CmsKit.Public
CreateMap<Page, PageDto>();
CreateMap<BlogPost, BlogPostPublicDto>(MemberList.None);
CreateMap<MenuItem, MenuItemDto>();
CreateMap<Menu, MenuWithDetailsDto>();
}
}
}

30
modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuPublicController.cs

@ -0,0 +1,30 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Menus;
namespace Volo.CmsKit.Public.Menus
{
[RequiresGlobalFeature(typeof(BlogsFeature))]
[RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)]
[Area("cms-kit")]
[Route("api/cms-kit-public/menus")]
public class MenuPublicController : CmsKitPublicControllerBase, IMenuPublicAppService
{
protected IMenuPublicAppService MenuPublicAppService { get; }
public MenuPublicController(IMenuPublicAppService menuPublicAppService)
{
MenuPublicAppService = menuPublicAppService;
}
[Route("main-menu")]
[HttpGet]
public Task<MenuWithDetailsDto> GetMainMenuAsync()
{
return MenuPublicAppService.GetMainMenuAsync();
}
}
}

9
modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs

@ -0,0 +1,9 @@
using Volo.CmsKit.Menus;
namespace Volo.CmsKit.EntityFrameworkCore.Menus
{
public class MenuRepository_Test : MenuRepository_Test<CmsKitEntityFrameworkCoreTestModule>
{
}
}

11
modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs

@ -0,0 +1,11 @@
using Xunit;
using Volo.CmsKit.Menus;
namespace Volo.CmsKit.MongoDB.Menus
{
[Collection(MongoTestCollection.Name)]
public class MenuRepository_Test : MenuRepository_Test<CmsKitMongoDbTestModule>
{
}
}

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

@ -416,7 +416,8 @@ namespace Volo.CmsKit
private async Task SeedMenusAsync()
{
var menu = new Menu(_cmsKitTestData.Menu_1_Id, null, _cmsKitTestData.Menu_1_Name);
menu.IsMainMenu = true;
menu.Items.Add(
new MenuItem(
_cmsKitTestData.MenuItem_1_Id,
@ -432,6 +433,12 @@ namespace Volo.CmsKit
_cmsKitTestData.MenuItem_2_Url));
await _menuRepository.InsertAsync(menu);
await _menuRepository.InsertAsync(
new Menu(
_cmsKitTestData.Menu_2_Id,
null,
_cmsKitTestData.Menu_2_Name));
}
}
}

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

@ -123,5 +123,10 @@ namespace Volo.CmsKit
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";
}
}

41
modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs

@ -0,0 +1,41 @@
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Modularity;
using Xunit;
namespace Volo.CmsKit.Menus
{
public abstract class MenuRepository_Test<TStartupModule> : CmsKitTestBase<TStartupModule>
where TStartupModule : IAbpModule
{
private readonly CmsKitTestData testData;
private readonly IMenuRepository menuRepository;
public MenuRepository_Test()
{
testData = GetRequiredService<CmsKitTestData>();
menuRepository = GetRequiredService<IMenuRepository>();
}
[Fact]
public async Task GetMainMenuAsync_ShouldWorkProperly()
{
var mainMenu = await menuRepository.FindMainMenuAsync();
mainMenu.ShouldNotBeNull();
mainMenu.Id.ShouldBe(testData.Menu_1_Id);
}
[Fact]
public async Task GetMainMenuAsync_ShouldWorkProperly_WithIncludeDetails()
{
var mainMenu = await menuRepository.FindMainMenuAsync(includeDetails: true);
mainMenu.ShouldNotBeNull();
mainMenu.Id.ShouldBe(testData.Menu_1_Id);
mainMenu.Items.ShouldNotBeEmpty();
mainMenu.Items.Count.ShouldBe(2);
}
}
}
Loading…
Cancel
Save