@@ -2859,4 +2859,43 @@ mod document_message_handler_tests {
2859
2859
editor. handle_message ( DocumentMessage :: CreateEmptyFolder ) . await ;
2860
2860
assert ! ( true , "Application didn't crash after folder move operation" ) ;
2861
2861
}
2862
+ #[ tokio:: test]
2863
+ async fn test_moving_folder_with_children ( ) {
2864
+ let mut editor = EditorTestUtils :: create ( ) ;
2865
+ editor. new_document ( ) . await ;
2866
+
2867
+ // Creating two folders at root level
2868
+ editor. handle_message ( DocumentMessage :: CreateEmptyFolder ) . await ;
2869
+ editor. handle_message ( DocumentMessage :: CreateEmptyFolder ) . await ;
2870
+
2871
+ let folder1 = editor. active_document ( ) . metadata ( ) . all_layers ( ) . next ( ) . unwrap ( ) ;
2872
+ let folder2 = editor. active_document ( ) . metadata ( ) . all_layers ( ) . nth ( 1 ) . unwrap ( ) ;
2873
+
2874
+ editor. drag_tool ( ToolType :: Rectangle , 0. , 0. , 100. , 100. , ModifierKeys :: empty ( ) ) . await ;
2875
+ let rect_layer = editor. active_document ( ) . metadata ( ) . all_layers ( ) . next ( ) . unwrap ( ) ;
2876
+
2877
+ // First move rectangle into folder1
2878
+ editor. handle_message ( NodeGraphMessage :: SelectedNodesSet { nodes : vec ! [ rect_layer. to_node( ) ] } ) . await ;
2879
+ editor. handle_message ( DocumentMessage :: MoveSelectedLayersTo { parent : folder1, insert_index : 0 } ) . await ;
2880
+
2881
+ // Verifying rectagle is now in folder1
2882
+ let rect_parent = rect_layer. parent ( editor. active_document ( ) . metadata ( ) ) . unwrap ( ) ;
2883
+ assert_eq ! ( rect_parent, folder1, "Rectangle should be inside folder1" ) ;
2884
+
2885
+ // Moving folder1 into folder2
2886
+ editor. handle_message ( NodeGraphMessage :: SelectedNodesSet { nodes : vec ! [ folder1. to_node( ) ] } ) . await ;
2887
+ editor. handle_message ( DocumentMessage :: MoveSelectedLayersTo { parent : folder2, insert_index : 0 } ) . await ;
2888
+
2889
+ // Verifing hirarchy: folder2 > folder1 > rectangle
2890
+ let document = editor. active_document ( ) ;
2891
+ let folder1_parent = folder1. parent ( document. metadata ( ) ) . unwrap ( ) ;
2892
+ assert_eq ! ( folder1_parent, folder2, "Folder1 should be inside folder2" ) ;
2893
+
2894
+ // Verifing rectangle moved with its parent
2895
+ let rect_parent = rect_layer. parent ( document. metadata ( ) ) . unwrap ( ) ;
2896
+ assert_eq ! ( rect_parent, folder1, "Rectangle should still be inside folder1" ) ;
2897
+
2898
+ let rect_grandparent = rect_parent. parent ( document. metadata ( ) ) . unwrap ( ) ;
2899
+ assert_eq ! ( rect_grandparent, folder2, "Rectangle's grandparent should be folder2" ) ;
2900
+ }
2862
2901
}
0 commit comments