package zord_tree import ( "os" "strings" "testing" cp "github.com/otiai10/copy" ) func prepare(t *testing.T) Config { err := os.RemoveAll("./testdata/sunny1") if err != nil { } err = cp.Copy("./testdata/sunny", "./testdata/sunny1") if err != nil { t.Fatal("Couldn't prepare data for testing") } config := NewConfig( []string{".md"}, "__a", make(map[string]func() string), []string{"exclude_[0-9]+.bin"}, map[string]AppCallback{}, ) err = PopulateTree("./testdata/sunny1", []string{}, config) if err != nil { t.Fatal("Population ended in err:", err) } return config } func TestFromNotExistingDirectory(t *testing.T) { config := NewConfig( []string{".md"}, "__a", make(map[string]func() string), []string{}, map[string]AppCallback{}, ) _, err := BuildTree("./testing/i_dont_exist", []string{}, config) if err == nil { t.Error("Not existing directory should return error, got NIL.") } } func TestSunny(t *testing.T) { config := prepare(t) tree, err := BuildTree("./testdata/sunny1", []string{}, config) if err != nil { t.Errorf("Got error: %v", err) } if len(tree.Dirs) != 1 { t.Errorf("Should be 1 subdirectory, got %v", len(tree.Dirs)) } if tree.Dirs[0].Files[0].Name != "file3.md" { t.Errorf("File should be 'file3.md', got %v", tree.Dirs[0].Files[0].Name) } if tree.Files[0].Name != "file1.md" { t.Errorf("File should be 'file1.md', got %v", tree.Files[0].Name) } if len(tree.Files[0].Tags) != 2 { t.Errorf("File 'file1.md' should have 2 tags, got %v", len(tree.Files[0].Tags)) } if tree.Files[0].Tags[1] != "t2" { t.Errorf("File 'file1.md' 2nd tag 't2', got %v", tree.Files[0].Tags[1]) } t.Log(tree) } func TestFixFormat(t *testing.T) { prepare(t) b, err := os.ReadFile("./testdata/sunny1/file1.md") if err != nil { t.Fatal("No destination file 'file1.md'.") } str := string(b) t.Log(str) if !strings.Contains(str, "* tags: t1,t2\n* description: Če test file __va__\n") { t.Fatal("Empty lines has not been removed in file 'file1.md'.") } if !strings.Contains(str, "\n\n---\n") { t.Fatal("Split line has not been formatted in file 'file1.md'.") } } func TestMeta(t *testing.T) { config := prepare(t) meta := []string{"option1", "option2"} tree, err := BuildTree("./testdata/sunny1", meta, config) if err != nil { t.Errorf("Got error: %v", err) } if tree.Files[0].Name != "file1.md" { t.Errorf("File should be 'file1.md', got %v", tree.Files[0].Name) } if tree.Files[0].Meta["option1"] != "test option" { t.Error("File 'file1.md' should have 'option1' with value 'test option'") } } func TestId(t *testing.T) { prepare(t) b, err := os.ReadFile("./testdata/sunny1/file1.md") if err != nil { t.Fatal("No destination file 'file1.md'.") } str := string(b) if !strings.Contains(str, "\n* id: 1\n") { t.Fatal("No id in file 'file1.md'.") } b, err = os.ReadFile("./testdata/sunny1/subcategory/file3.md") if err != nil { t.Fatal("No destination file 'substring/file3.md'.") } str = string(b) if !strings.Contains(str, "\n* id: 3\n") { t.Fatal("No id in file 'file3.md'.") } } func TestMissingOptions(t *testing.T) { config := prepare(t) customMeta := make(map[string]func() string) customMeta["option2"] = func() string { return "customDefaultValue" } config.CustomMeta = customMeta err := PopulateTree("./testdata/sunny1", []string{"option1", "option2"}, config) if err != nil { t.Fatal("Population ended in err:", err) } b, err := os.ReadFile("./testdata/sunny1/file1.md") if err != nil { t.Fatal("No destination file 'file1.md'.") } str := string(b) if !strings.Contains(str, "\n* option1: test option\n") { t.Fatal("Changed old value for 'option1' in file 'file1.md'.") } if !strings.Contains(str, "\n* option2: customDefaultValue\n") { t.Fatal("'option2' has not been added to file 'file1.md'.") } b, err = os.ReadFile("./testdata/sunny1/file2.md") if err != nil { t.Fatal("No destination file 'file2.md'.") } str = string(b) if !strings.Contains(str, "\n* option1: \n") { t.Fatal("'option1' has not been added to file 'file2.md'.") } if !strings.Contains(str, "\n* option2: customDefaultValue\n") { t.Fatal("'option2' has not been added to file 'file2.md'.") } b, err = os.ReadFile("./testdata/sunny1/subcategory/file3.md") if err != nil { t.Fatal("No destination file 'substring/file3.md'.") } str = string(b) if !strings.Contains(str, "\n* option1: \n") { t.Fatal("'option1' has not been added to file 'file3.md'.") } if !strings.Contains(str, "\n* option2: it exists\n") { t.Fatal("Changed old value for 'option2' in file 'file3.md'.") } } func TestReadingFileContent(t *testing.T) { config := prepare(t) tree, err := BuildTree("./testdata/sunny1", []string{}, config) if err != nil { t.Errorf("Got error: %v", err) } if tree.Files[0].Name != "file1.md" { t.Errorf("File should be 'file1.md', got %v", tree.Files[0].Name) } content, _ := ReadFileContent(tree.Files[0]) if content != "# Če kažkas torietom būtė\n\n* lists\n\n__va__" { t.Error("File content is wrong...") } } func TestGetSlice(t *testing.T) { config := prepare(t) tree, err := BuildTree("./testdata/sunny1", []string{}, config) if err != nil { t.Errorf("Got error: %v", err) } tree2, err := tree.Slice("testdata/sunny1/subcategory") if err != nil { t.Errorf("Error during search the tree: %v", err) } if tree2.Files[0].Name != "file3.md" { t.Errorf("Got frong tree") } } func TestGetFileById(t *testing.T) { config := prepare(t) tree, err := BuildTree("./testdata/sunny1", []string{}, config) if err != nil { t.Errorf("Got error: %v", err) } file, err := tree.FileById("3") if err != nil { t.Errorf("Error during search: %v", err) } if file.Name != "file3.md" { t.Errorf("Got frong file: %s", file.Name) } } func TestExcludes(t *testing.T) { prepare(t) _, err := os.ReadFile("./testdata/sunny1/exclude_123.bin") if err != nil { t.Fatal("Excludded file has been moved") } }