2024-09-04 11:18:08 +02:00
using NUnit.Framework ;
using Umbraco.Cms.Core ;
namespace Umbraco.Cms.Tests.Integration.Umbraco.Core.Services ;
public partial class DocumentNavigationServiceTests
{
[Test]
2024-10-16 10:51:42 +03:00
public async Task Parent_And_Descendants_Are_Updated_When_Content_Is_Moved_To_Recycle_Bin ( )
2024-09-04 11:18:08 +02:00
{
// Arrange
Guid nodeToMoveToRecycleBin = Child3 . Key ;
2024-09-25 08:33:23 +02:00
Guid nodeInRecycleBin = Grandchild4 . Key ;
await ContentEditingService . MoveToRecycleBinAsync ( nodeInRecycleBin , Constants . Security . SuperUserKey ) ;
DocumentNavigationQueryService . TryGetSiblingsKeysInBin ( nodeInRecycleBin , out IEnumerable < Guid > initialSiblingsKeys ) ;
var beforeMoveRecycleBinSiblingsCount = initialSiblingsKeys . Count ( ) ;
Assert . AreEqual ( beforeMoveRecycleBinSiblingsCount , 0 ) ;
2024-09-04 11:18:08 +02:00
DocumentNavigationQueryService . TryGetParentKey ( nodeToMoveToRecycleBin , out Guid ? originalParentKey ) ;
2024-09-25 08:33:23 +02:00
DocumentNavigationQueryService . TryGetDescendantsKeys ( nodeToMoveToRecycleBin , out IEnumerable < Guid > initialDescendantsKeys ) ;
var beforeMoveDescendants = initialDescendantsKeys . ToList ( ) ;
DocumentNavigationQueryService . TryGetChildrenKeys ( originalParentKey . Value , out IEnumerable < Guid > initialParentChildrenKeys ) ;
2024-10-16 10:51:42 +03:00
var beforeMoveParentChildrenCount = initialParentChildrenKeys . Count ( ) ;
2024-09-04 11:18:08 +02:00
// Act
await ContentEditingService . MoveToRecycleBinAsync ( nodeToMoveToRecycleBin , Constants . Security . SuperUserKey ) ;
// Assert
var nodeExists = DocumentNavigationQueryService . TryGetParentKey ( nodeToMoveToRecycleBin , out _ ) ; // Verify that the item is no longer in the document structure
var nodeExistsInRecycleBin = DocumentNavigationQueryService . TryGetParentKeyInBin ( nodeToMoveToRecycleBin , out Guid ? updatedParentKeyInRecycleBin ) ;
2024-09-25 08:33:23 +02:00
DocumentNavigationQueryService . TryGetDescendantsKeysInBin ( nodeToMoveToRecycleBin , out IEnumerable < Guid > afterMoveDescendantsKeys ) ;
var afterMoveDescendants = afterMoveDescendantsKeys . ToList ( ) ;
DocumentNavigationQueryService . TryGetChildrenKeys ( ( Guid ) originalParentKey , out IEnumerable < Guid > afterMoveParentChildrenKeys ) ;
2024-10-16 10:51:42 +03:00
var afterMoveParentChildrenCount = afterMoveParentChildrenKeys . Count ( ) ;
2024-09-25 08:33:23 +02:00
DocumentNavigationQueryService . TryGetSiblingsKeysInBin ( nodeInRecycleBin , out IEnumerable < Guid > afterMoveRecycleBinSiblingsKeys ) ;
var afterMoveRecycleBinSiblingsCount = afterMoveRecycleBinSiblingsKeys . Count ( ) ;
2024-09-04 11:18:08 +02:00
Assert . Multiple ( ( ) = >
{
Assert . IsFalse ( nodeExists ) ;
Assert . IsTrue ( nodeExistsInRecycleBin ) ;
Assert . AreNotEqual ( originalParentKey , updatedParentKeyInRecycleBin ) ;
2024-09-25 08:33:23 +02:00
2024-09-04 11:18:08 +02:00
Assert . IsNull ( updatedParentKeyInRecycleBin ) ; // Verify the node's parent is now located at the root of the recycle bin (null)
2024-09-25 08:33:23 +02:00
Assert . AreEqual ( beforeMoveDescendants , afterMoveDescendants ) ;
2024-10-16 10:51:42 +03:00
Assert . AreEqual ( beforeMoveParentChildrenCount - 1 , afterMoveParentChildrenCount ) ;
2024-09-25 08:33:23 +02:00
Assert . AreEqual ( beforeMoveRecycleBinSiblingsCount + 1 , afterMoveRecycleBinSiblingsCount ) ;
2024-09-04 11:18:08 +02:00
} ) ;
}
2024-10-16 10:51:42 +03:00
// TODO: Add more test cases
[Test]
public async Task Sort_Order_Of_Siblings_Updates_When_Moving_Content_To_Recycle_Bin_And_Adding_New_One ( )
{
// Arrange
Guid nodeToMoveToRecycleBin = Child3 . Key ;
Guid node = Child1 . Key ;
// Act
await ContentEditingService . MoveToRecycleBinAsync ( nodeToMoveToRecycleBin , Constants . Security . SuperUserKey ) ;
// Assert
DocumentNavigationQueryService . TryGetSiblingsKeys ( node , out IEnumerable < Guid > siblingsKeysAfterDeletion ) ;
var siblingsKeysAfterDeletionList = siblingsKeysAfterDeletion . ToList ( ) ;
Assert . Multiple ( ( ) = >
{
Assert . AreEqual ( 1 , siblingsKeysAfterDeletionList . Count ) ;
Assert . AreEqual ( Child2 . Key , siblingsKeysAfterDeletionList [ 0 ] ) ;
} ) ;
// Create a new sibling under the same parent
var key = Guid . NewGuid ( ) ;
2024-11-11 12:00:20 +01:00
var createModel = CreateContentCreateModel ( "Child 4" , key , parentKey : Root . Key ) ;
2024-10-16 10:51:42 +03:00
await ContentEditingService . CreateAsync ( createModel , Constants . Security . SuperUserKey ) ;
DocumentNavigationQueryService . TryGetSiblingsKeys ( node , out IEnumerable < Guid > siblingsKeysAfterCreation ) ;
var siblingsKeysAfterCreationList = siblingsKeysAfterCreation . ToList ( ) ;
// Verify sibling order after creating the new content
Assert . Multiple ( ( ) = >
{
Assert . AreEqual ( 2 , siblingsKeysAfterCreationList . Count ) ;
Assert . AreEqual ( Child2 . Key , siblingsKeysAfterCreationList [ 0 ] ) ;
Assert . AreEqual ( key , siblingsKeysAfterCreationList [ 1 ] ) ;
} ) ;
}
[Test]
public async Task Sort_Order_Of_Chilldren_Is_Maintained_When_Moving_Content_To_Recycle_Bin ( )
{
// Arrange
Guid nodeToMoveToRecycleBin = Child1 . Key ;
// Create a new grandchild under Child1
var key = Guid . NewGuid ( ) ;
2024-11-11 12:00:20 +01:00
var createModel = CreateContentCreateModel ( "Grandchild 3" , key , parentKey : nodeToMoveToRecycleBin ) ;
2024-10-16 10:51:42 +03:00
await ContentEditingService . CreateAsync ( createModel , Constants . Security . SuperUserKey ) ;
DocumentNavigationQueryService . TryGetChildrenKeys ( nodeToMoveToRecycleBin , out IEnumerable < Guid > childrenKeysBeforeDeletion ) ;
var childrenKeysBeforeDeletionList = childrenKeysBeforeDeletion . ToList ( ) ;
// Act
await ContentEditingService . MoveToRecycleBinAsync ( nodeToMoveToRecycleBin , Constants . Security . SuperUserKey ) ;
// Assert
DocumentNavigationQueryService . TryGetChildrenKeysInBin ( nodeToMoveToRecycleBin , out IEnumerable < Guid > childrenKeysAfterDeletion ) ;
var childrenKeysAfterDeletionList = childrenKeysAfterDeletion . ToList ( ) ;
// Verify children order in the bin
Assert . Multiple ( ( ) = >
{
Assert . AreEqual ( 3 , childrenKeysAfterDeletionList . Count ) ;
Assert . AreEqual ( Grandchild1 . Key , childrenKeysAfterDeletionList [ 0 ] ) ;
Assert . AreEqual ( Grandchild2 . Key , childrenKeysAfterDeletionList [ 1 ] ) ;
Assert . AreEqual ( key , childrenKeysAfterDeletionList [ 2 ] ) ;
Assert . IsTrue ( childrenKeysBeforeDeletionList . SequenceEqual ( childrenKeysAfterDeletionList ) ) ;
} ) ;
}
2024-09-04 11:18:08 +02:00
}