diff options
Diffstat (limited to 'main_test.go')
| -rw-r--r-- | main_test.go | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/main_test.go b/main_test.go index cbb102c..c4b0ec7 100644 --- a/main_test.go +++ b/main_test.go @@ -97,6 +97,8 @@ func TestRecursiveInventoryAndUnderscoreExclusion(t *testing.T) { writeTestFile(t, root, "notes/recipes/cocktails/old.md", "# Old\n") writeTestFile(t, root, "notes/_private/secret.md", "# Secret\n") writeTestFile(t, root, "notes/_draft.md", "# Draft\n") + writeTestFile(t, root, "notes/.private/secret.md", "# Secret\n") + writeTestFile(t, root, "notes/.draft.md", "# Draft\n") s := &site{root: root, pages: map[string][]*Page{}} if err := s.discover(); err != nil { t.Fatal(err) @@ -107,7 +109,47 @@ func TestRecursiveInventoryAndUnderscoreExclusion(t *testing.T) { } } if len(s.sources) != 1 { - t.Fatalf("underscore sources were discovered: %#v", s.sources) + t.Fatalf("private sources were discovered: %#v", s.sources) + } +} + +func TestDiscoveryFollowsSymlinksAndRejectsCycles(t *testing.T) { + root := t.TempDir() + vault := t.TempDir() + writeTestFile(t, root, "layouts.tmpl", testLayouts()) + writeTestFile(t, vault, "recipe.md", "# Recipe\n") + writeTestFile(t, vault, "_private/secret.md", "# Secret\n") + if err := os.Symlink(vault, filepath.Join(root, "notes")); err != nil { + t.Skipf("symlinks unavailable: %v", err) + } + s := &site{root: root, pages: map[string][]*Page{}} + if err := s.discover(); err != nil { + t.Fatal(err) + } + found := false + for _, source := range s.sources { + if source.path == "notes/recipe.md" { + found = true + } + if strings.Contains(source.path, "_private") { + t.Fatalf("private symlink source discovered: %s", source.path) + } + } + if !found { + t.Fatalf("symlink sources = %#v", s.sources) + } + if err := build(root); err != nil { + t.Fatal(err) + } + if _, err := os.Stat(filepath.Join(vault, "recipe.html")); err != nil { + t.Fatalf("symlinked page was not generated: %v", err) + } + if err := os.Symlink(root, filepath.Join(root, "loop")); err != nil { + t.Fatal(err) + } + s = &site{root: root, pages: map[string][]*Page{}} + if err := s.discover(); err == nil || !strings.Contains(err.Error(), "symlink cycle") { + t.Fatalf("cycle error = %v", err) } } |
