package models_test import ( "testing" "git.zzyxyz.com/zzy/zzyxyz_go_api/internal/vfs/models" ) func TestParsePathComponents(t *testing.T) { tests := []struct { name string pathStr string wantParent string wantName string wantNodeType models.VfsNodeType wantErr bool }{ { name: "directory path with trailing slash", pathStr: "/home/", wantParent: "/", wantName: "home", wantNodeType: models.VfsNodeTypeDirectory, wantErr: false, }, { name: "file path without extension", pathStr: "/home", wantParent: "/", wantName: "home", wantNodeType: models.VfsNodeTypeFile, wantErr: false, }, { name: "file path with extension", pathStr: "/home.txt", wantParent: "/", wantName: "home.txt", wantNodeType: models.VfsNodeTypeFile, wantErr: false, }, { name: "nested directory path with trailing slash", pathStr: "/home/user/", wantParent: "/home", wantName: "user", wantNodeType: models.VfsNodeTypeDirectory, wantErr: false, }, { name: "nested file path", pathStr: "/home/user/file.txt", wantParent: "/home/user", wantName: "file.txt", wantNodeType: models.VfsNodeTypeFile, wantErr: false, }, { name: "deep nested directory path with trailing slash", pathStr: "/home/user/documents/", wantParent: "/home/user", wantName: "documents", wantNodeType: models.VfsNodeTypeDirectory, wantErr: false, }, { name: "deep nested file path", pathStr: "/home/user/documents/file.txt", wantParent: "/home/user/documents", wantName: "file.txt", wantNodeType: models.VfsNodeTypeFile, wantErr: false, }, { name: "relative path should error", pathStr: ".", wantErr: true, }, { name: "relative path should error", pathStr: "home.txt", wantErr: true, }, { name: "relative path should error", pathStr: "home/user/", wantErr: true, }, { name: "path with multiple slashes", pathStr: "//home//user//", wantParent: "/home", wantName: "user", wantNodeType: models.VfsNodeTypeDirectory, wantErr: false, }, { name: "path with multiple slashes and file", pathStr: "//home//user//file.txt", wantParent: "/home/user", wantName: "file.txt", wantNodeType: models.VfsNodeTypeFile, wantErr: false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { parent, name, nodeType, err := models.ParsePathComponents(tt.pathStr) if (err != nil) != tt.wantErr { t.Errorf("ParsePathComponents() error = %v, wantErr %v", err, tt.wantErr) return } if !tt.wantErr { if parent != tt.wantParent { t.Errorf("ParsePathComponents() parent = %v, want %v", parent, tt.wantParent) } if name != tt.wantName { t.Errorf("ParsePathComponents() name = %v, want %v", name, tt.wantName) } if nodeType != tt.wantNodeType { t.Errorf("ParsePathComponents() nodeType = %v, want %v", nodeType, tt.wantNodeType) } } }) } }