Skip to content

Add layer tree tests for folder movement checking into child #2580

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Apr 18, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions editor/src/messages/portfolio/document/document_message_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2859,4 +2859,43 @@ mod document_message_handler_tests {
editor.handle_message(DocumentMessage::CreateEmptyFolder).await;
assert!(true, "Application didn't crash after folder move operation");
}
#[tokio::test]
async fn test_moving_folder_with_children() {
let mut editor = EditorTestUtils::create();
editor.new_document().await;

// Creating two folders at root level
editor.handle_message(DocumentMessage::CreateEmptyFolder).await;
editor.handle_message(DocumentMessage::CreateEmptyFolder).await;

let folder1 = editor.active_document().metadata().all_layers().next().unwrap();
let folder2 = editor.active_document().metadata().all_layers().nth(1).unwrap();

editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await;
let rect_layer = editor.active_document().metadata().all_layers().next().unwrap();

// First move rectangle into folder1
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![rect_layer.to_node()] }).await;
editor.handle_message(DocumentMessage::MoveSelectedLayersTo { parent: folder1, insert_index: 0 }).await;

// Verifying rectagle is now in folder1
let rect_parent = rect_layer.parent(editor.active_document().metadata()).unwrap();
assert_eq!(rect_parent, folder1, "Rectangle should be inside folder1");

// Moving folder1 into folder2
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![folder1.to_node()] }).await;
editor.handle_message(DocumentMessage::MoveSelectedLayersTo { parent: folder2, insert_index: 0 }).await;

// Verifing hirarchy: folder2 > folder1 > rectangle
let document = editor.active_document();
let folder1_parent = folder1.parent(document.metadata()).unwrap();
assert_eq!(folder1_parent, folder2, "Folder1 should be inside folder2");

// Verifing rectangle moved with its parent
let rect_parent = rect_layer.parent(document.metadata()).unwrap();
assert_eq!(rect_parent, folder1, "Rectangle should still be inside folder1");

let rect_grandparent = rect_parent.parent(document.metadata()).unwrap();
assert_eq!(rect_grandparent, folder2, "Rectangle's grandparent should be folder2");
}
}
Loading