Files
mend/fstree_test.go
2026-01-18 01:59:00 +00:00

148 lines
3.4 KiB
Go

package main
import (
"os"
"path/filepath"
"testing"
)
// tests creating a new fstree
func TestNewFsTree(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "mend_fstree_test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpDir)
// setup structure:
// root/
// folder1/
// file1.md
// file2.md
os.Mkdir(filepath.Join(tmpDir, "folder1"), 0755)
os.WriteFile(filepath.Join(tmpDir, "folder1", "file1.md"), []byte(""), 0644)
os.WriteFile(filepath.Join(tmpDir, "file2.md"), []byte(""), 0644)
tree := NewFsTree(tmpDir, 0)
if tree == nil {
t.Fatal("expected tree to be created, got nil")
}
if tree.root.path != tmpDir {
t.Errorf("expected root path %s, got %s", tmpDir, tree.root.path)
}
// root children: folder1, file2.md
if len(tree.root.children) != 2 {
t.Errorf("expected 2 children, got %d", len(tree.root.children))
}
}
// tests creating nodes via tree
func TestTreeCreateNode(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "mend_fstree_test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpDir)
tree := NewFsTree(tmpDir, 0)
// create folder
err = tree.CreateNode(tree.root, "new_folder", FolderNode)
if err != nil {
t.Errorf("expected no error creating folder, got %v", err)
}
// check fs
if _, err := os.Stat(filepath.Join(tmpDir, "new_folder")); os.IsNotExist(err) {
t.Error("folder not created on fs")
}
// check tree
if len(tree.root.children) != 1 || tree.root.children[0].nodeType != FolderNode {
t.Error("tree block not updated with new folder")
}
// create file in new folder
newFolder := tree.root.children[0]
err = tree.CreateNode(newFolder, "new_file", FileNode)
if err != nil {
t.Errorf("expected no error creating file, got %v", err)
}
// check fs (.md appended automatically)
if _, err := os.Stat(filepath.Join(tmpDir, "new_folder", "new_file.md")); os.IsNotExist(err) {
t.Error("file not created on fs")
}
// check tree
if len(newFolder.children) != 1 || newFolder.children[0].nodeType != FileNode {
t.Error("tree node not updated with new file")
}
}
// tests deleting nodes
func TestTreeDeleteNode(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "mend_fstree_test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpDir)
// setup: root/file.md
os.WriteFile(filepath.Join(tmpDir, "file.md"), []byte(""), 0644)
tree := NewFsTree(tmpDir, 0)
targetNode := tree.root.children[0]
err = tree.DeleteNode(targetNode)
if err != nil {
t.Errorf("expected no error deleting node, got %v", err)
}
// check fs
if _, err := os.Stat(filepath.Join(tmpDir, "file.md")); !os.IsNotExist(err) {
t.Error("file not deleted from fs")
}
// check tree
if len(tree.root.children) != 0 {
t.Error("tree node not updated after deletion")
}
}
// tests toggling expand
func TestTreeToggleExpand(t *testing.T) {
root := &FsNode{
nodeType: FolderNode,
expanded: true,
children: []*FsNode{}, // Initialize children
}
node := &FsNode{
nodeType: FolderNode,
expanded: true,
parent: root,
}
root.children = append(root.children, node)
// mocked tree for this test
tree := &FsTree{
root: root,
}
// Initial buildLines to setup state
tree.buildLines()
err := tree.ToggleExpand(node)
if err != nil {
t.Error(err)
}
if node.expanded {
t.Error("expected node to be collapsed")
}
err = tree.ToggleExpand(node)
if err != nil {
t.Error(err)
}
if !node.expanded {
t.Error("expected node to be expanded")
}
}