summaryrefslogtreecommitdiff
path: root/main_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'main_test.go')
-rw-r--r--main_test.go44
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)
}
}