Browse Source

Merge pull request #14796 from abpframework/auto-merge/rel-7-0/1491

Merge branch dev with rel-7.0
pull/14810/head
malik masis 4 years ago
committed by GitHub
parent
commit
f3b83b7b30
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 124
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs
  2. 200
      modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs
  3. 17
      npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts

124
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/PageManager.cs

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

200
modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Pages/PageManager_Test.cs

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

17
npm/ng-packs/packages/components/tree/src/lib/components/tree.component.ts

@ -3,12 +3,11 @@ import {
ContentChild,
EventEmitter,
Input,
OnChanges,
Output,
TemplateRef,
ViewEncapsulation,
} from '@angular/core';
import { NzFormatEmitEvent, NzFormatBeforeDropEvent } from 'ng-zorro-antd/tree';
import { NzFormatBeforeDropEvent, NzFormatEmitEvent } from 'ng-zorro-antd/tree';
import { of } from 'rxjs';
import { TreeNodeTemplateDirective } from '../templates/tree-node-template.directive';
import { ExpandedIconTemplateDirective } from '../templates/expanded-icon-template.directive';
@ -25,7 +24,7 @@ export type DropEvent = NzFormatEmitEvent & { pos: number };
],
encapsulation: ViewEncapsulation.None,
})
export class TreeComponent implements OnChanges {
export class TreeComponent {
dropPosition: number;
dropdowns = {} as { [key: string]: NgbDropdown };
@ -46,30 +45,26 @@ export class TreeComponent implements OnChanges {
@Input() expandedKeys: string[] = [];
@Input() selectedNode: any;
@Input() changeCheckboxWithNode: boolean;
@Input() changedNodeValues = [];
@Input() isNodeSelected = node => this.selectedNode?.id === node.key;
@Input() beforeDrop = (event: NzFormatBeforeDropEvent) => {
this.dropPosition = event.pos;
return of(false);
};
ngOnChanges() {
this.checkedKeys = [...this.changedNodeValues];
}
onSelectedNodeChange(node) {
this.selectedNode = node.origin.entity;
if (this.changeCheckboxWithNode) {
this.selectedNodeChange.emit(node);
this.checkedKeys = [...this.changedNodeValues];
this.checkedKeysChange.emit(this.changedNodeValues);
const newVal = [...this.checkedKeys, node.key];
this.checkedKeys = newVal;
this.checkedKeysChange.emit(newVal);
} else {
this.selectedNodeChange.emit(node.origin.entity);
}
}
onCheckboxChange(event) {
this.checkedKeys = this.changedNodeValues = [...event.keys];
this.checkedKeys = [...event.keys];
this.checkedKeysChange.emit(event.keys);
}

Loading…
Cancel
Save