Skip to content

Commit

Permalink
fix MoveAsync parentId null bug.
Browse files Browse the repository at this point in the history
  • Loading branch information
maliming committed Apr 12, 2018
1 parent 484e713 commit aeb9e4e
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 56 deletions.
69 changes: 13 additions & 56 deletions Abp.GeneralTree/GeneralTree/GeneralTreeManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ private async Task<string> GetNextChildCodeAsync(TPrimaryKey? parentId)
{
var lastChild =
_generalTreeRepository.GetAll()
.Where(Equal(parentId, "ParentId"))
.Where(EqualParentId(parentId))
.OrderByDescending(x => x.Code)
.FirstOrDefault();
if (lastChild != null)
Expand Down Expand Up @@ -236,7 +236,7 @@ private async Task<List<TTree>> GetChildrenAsync(TPrimaryKey? parentId, bool rec
{
if (!recursive)
{
return await _generalTreeRepository.GetAllListAsync(Equal(parentId, "ParentId"));
return await _generalTreeRepository.GetAllListAsync(EqualParentId(parentId));
}

if (!parentId.HasValue)
Expand All @@ -257,7 +257,7 @@ private async Task<List<TTree>> GetChildrenAsync(TPrimaryKey? parentId, bool rec
/// <returns></returns>
private void CheckSameName(TTree tree)
{
if (_generalTreeRepository.GetAll().Where(Equal(tree.ParentId, "ParentId"))
if (_generalTreeRepository.GetAll().Where(EqualParentId(tree.ParentId))
.WhereIf(_generalTreeConfiguration.CheckSameNameExpression != null,
x => _generalTreeConfiguration.CheckSameNameExpression(x, tree))
.Where(NotEqualId(tree.Id))
Expand All @@ -275,7 +275,12 @@ private void CheckSameName(TTree tree)
/// <returns></returns>
private async Task<string> GetChildFullNameAsync(TPrimaryKey? parentId, string childFullName)
{
var parent = await _generalTreeRepository.FirstOrDefaultAsync(EqualId(parentId));
if (!parentId.HasValue)
{
return childFullName;
}

var parent = await _generalTreeRepository.FirstOrDefaultAsync(EqualId(parentId.Value));
return parent != null ? parent.FullName + _generalTreeConfiguration.Hyphen + childFullName : childFullName;
}

Expand All @@ -293,18 +298,6 @@ private static Expression<Func<TTree, bool>> EqualId(TPrimaryKey id)
return Expression.Lambda<Func<TTree, bool>>(lambdaBody, lambdaParam);
}

private static Expression<Func<TTree, bool>> EqualId(TPrimaryKey? id)
{
var lambdaParam = Expression.Parameter(typeof(TTree));

var lambdaBody = Expression.Equal(
Expression.PropertyOrField(lambdaParam, "Id"),
Expression.Constant(id, typeof(TPrimaryKey))
);

return Expression.Lambda<Func<TTree, bool>>(lambdaBody, lambdaParam);
}

private static Expression<Func<TTree, bool>> NotEqualId(TPrimaryKey id)
{
var lambdaParam = Expression.Parameter(typeof(TTree));
Expand All @@ -317,60 +310,24 @@ private static Expression<Func<TTree, bool>> NotEqualId(TPrimaryKey id)
return Expression.Lambda<Func<TTree, bool>>(lambdaBody, lambdaParam);
}

private static Expression<Func<TTree, bool>> NotEqualId(TPrimaryKey? id)
{
var lambdaParam = Expression.Parameter(typeof(TTree));

var lambdaBody = Expression.NotEqual(
Expression.PropertyOrField(lambdaParam, "Id"),
Expression.Constant(id, typeof(TPrimaryKey))
);

return Expression.Lambda<Func<TTree, bool>>(lambdaBody, lambdaParam);
}

private static Expression<Func<TTree, bool>> Equal(TPrimaryKey id, string property)
private static Expression<Func<TTree, bool>> EqualParentId(TPrimaryKey? id)
{
var lambdaParam = Expression.Parameter(typeof(TTree));

var lambdaBody = Expression.Equal(
Expression.PropertyOrField(lambdaParam, property),
Expression.Constant(id, typeof(TPrimaryKey))
);

return Expression.Lambda<Func<TTree, bool>>(lambdaBody, lambdaParam);
}

private static Expression<Func<TTree, bool>> Equal(TPrimaryKey? id, string property)
{
var lambdaParam = Expression.Parameter(typeof(TTree));

var lambdaBody = Expression.Equal(
Expression.PropertyOrField(lambdaParam, property),
Expression.PropertyOrField(lambdaParam, "ParentId"),
Expression.Constant(id, typeof(TPrimaryKey?))
);

return Expression.Lambda<Func<TTree, bool>>(lambdaBody, lambdaParam);
}

private static Expression<Func<TTree, bool>> NotEqual(TPrimaryKey id, string property)
{
var lambdaParam = Expression.Parameter(typeof(TTree));

var lambdaBody = Expression.NotEqual(
Expression.PropertyOrField(lambdaParam, property),
Expression.Constant(id, typeof(TPrimaryKey))
);

return Expression.Lambda<Func<TTree, bool>>(lambdaBody, lambdaParam);
}

private static Expression<Func<TTree, bool>> NotEqual(TPrimaryKey? id, string property)
private static Expression<Func<TTree, bool>> NotEqualParentId(TPrimaryKey? id)
{
var lambdaParam = Expression.Parameter(typeof(TTree));

var lambdaBody = Expression.NotEqual(
Expression.PropertyOrField(lambdaParam, property),
Expression.PropertyOrField(lambdaParam, "ParentId"),
Expression.Constant(id, typeof(TPrimaryKey?))
);

Expand Down
28 changes: 28 additions & 0 deletions TreeTests/GeneralTreeManagerWithReferenceType_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,34 @@ public async Task Move_Test()
cd.Code.ShouldBe(GeneralTreeCodeGenerate.GetNextCode(beijingLastChild.Code));
}

[Fact]
public async Task Move_Root_Parent_Test()
{
//Act
var beijing = await CreateRegion("beijing");
await CreateRegion("dongcheng", beijing.Id);
await CreateRegion("xicheng", beijing.Id);

var hebei = await CreateRegion("hebei");
await CreateRegion("shijiazhuang", hebei.Id);
var chengde = await CreateRegion("chengde", hebei.Id);

await CreateRegion("shaungqiao", chengde.Id);
await CreateRegion("shaungluan", chengde.Id);

var beijingLastChild = GetRegion("xicheng");
beijingLastChild.ShouldNotBeNull();
await _generalRegion2TreeManager.MoveAsync(chengde.Id, null);

//Assert
var cd = GetRegion(chengde.Name);
cd.ShouldNotBeNull();
cd.FullName.ShouldBe(chengde.Name);
cd.ParentId.ShouldBe(null);
cd.Level.ShouldBe(1);
cd.Code.ShouldBe(GeneralTreeCodeGenerate.GetNextCode(hebei.Code));
}

[Fact]
public async Task Update_ChildrenAction_Test()
{
Expand Down
28 changes: 28 additions & 0 deletions TreeTests/GeneralTreeManager_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,34 @@ public async Task Move_Test()
cd.Code.ShouldBe(GeneralTreeCodeGenerate.GetNextCode(beijingLastChild.Code));
}

[Fact]
public async Task Move_Root_Parent_Test()
{
//Act
var beijing = await CreateRegion("beijing");
await CreateRegion("dongcheng", beijing.Id);
await CreateRegion("xicheng", beijing.Id);

var hebei = await CreateRegion("hebei");
await CreateRegion("shijiazhuang", hebei.Id);
var chengde = await CreateRegion("chengde", hebei.Id);

await CreateRegion("shaungqiao", chengde.Id);
await CreateRegion("shaungluan", chengde.Id);

var beijingLastChild = GetRegion("xicheng");
beijingLastChild.ShouldNotBeNull();
await _generalRegionTreeManager.MoveAsync(chengde.Id, null);

//Assert
var cd = GetRegion(chengde.Name);
cd.ShouldNotBeNull();
cd.FullName.ShouldBe(chengde.Name);
cd.ParentId.ShouldBe(null);
cd.Level.ShouldBe(1);
cd.Code.ShouldBe(GeneralTreeCodeGenerate.GetNextCode(hebei.Code));
}

[Fact]
public async Task Update_ChildrenAction_Test()
{
Expand Down

0 comments on commit aeb9e4e

Please sign in to comment.