diff --git a/spike/review/reinvent/ezmded/server/id.go b/spike/review/reinvent/ezmded/server/id.go index 042dee4..2a5861f 100644 --- a/spike/review/reinvent/ezmded/server/id.go +++ b/spike/review/reinvent/ezmded/server/id.go @@ -14,11 +14,11 @@ func NewID(s string) ID { } func (id ID) Push(child string) ID { - return ID(path.Join(id.String(), child)).withClean() + return NewID(path.Join(id.String(), child)).withClean() } func (id ID) Pop() ID { - pid := path.Clean(ID(path.Dir(id.String())).withClean().String()) + pid := path.Clean(NewID(path.Dir(id.String())).withClean().String()) if strings.HasPrefix(pid, ".") { return "" } diff --git a/spike/review/reinvent/ezmded/server/server.go b/spike/review/reinvent/ezmded/server/server.go index 12f0ae0..3beabfd 100644 --- a/spike/review/reinvent/ezmded/server/server.go +++ b/spike/review/reinvent/ezmded/server/server.go @@ -499,7 +499,7 @@ func (server *Server) _apiV0SearchHandler(query string) ([][2]string, error) { result = append(result, [2]string{id.URLSafeString(), title}) return nil }); err != nil { - return nil, err + return nil, fmt.Errorf("failed for each: %v", err) } return result, nil } diff --git a/spike/review/reinvent/ezmded/server/server_test.go b/spike/review/reinvent/ezmded/server/server_test.go index fae9df0..a64287a 100644 --- a/spike/review/reinvent/ezmded/server/server_test.go +++ b/spike/review/reinvent/ezmded/server/server_test.go @@ -31,11 +31,11 @@ func TestServerRoutes(t *testing.T) { ensureAndWrite(server.diskMediaPath("delid"), []byte("hi")) tree := server.tree() - if err := tree.Put(ID("getfid"), Leaf{Title: "", Content: "getfid body"}); err != nil { + if err := tree.Put(NewID("getfid"), Leaf{Title: "", Content: "getfid body"}); err != nil { t.Fatal(err) } - tree.Put(ID("putfid"), Leaf{Title: "putfid title", Content: "initial putfid body"}) - tree.Put(ID("delfid"), Leaf{Title: "delfid title", Content: "delfid body"}) + tree.Put(NewID("putfid"), Leaf{Title: "putfid title", Content: "initial putfid body"}) + tree.Put(NewID("delfid"), Leaf{Title: "delfid title", Content: "delfid body"}) t.Log(tree.GetRoot()) ensureAndWrite(path.Join(server.root, "index.html"), []byte("mom")) @@ -151,7 +151,7 @@ func TestServerPutTreeGetFile(t *testing.T) { if err := server.Routes(); err != nil { t.Fatal(err) } - server.tree().Put(ID("my pid"), Leaf{}) + server.tree().Put(NewID("my pid"), Leaf{}) var id string t.Run("put to create an id", func(t *testing.T) { r := httptest.NewRequest(http.MethodPut, "/my%20pid/my-put-id", strings.NewReader("body")) diff --git a/spike/review/reinvent/ezmded/server/tree.go b/spike/review/reinvent/ezmded/server/tree.go index 15e02ba..6993cc6 100644 --- a/spike/review/reinvent/ezmded/server/tree.go +++ b/spike/review/reinvent/ezmded/server/tree.go @@ -26,7 +26,7 @@ func (branch Branch) forEach(preid ID, foo func(ID, Leaf) error) error { return err } for id, child := range branch.Branches { - if err := child.forEach(preid.Push(string(id)), foo); err != nil { + if err := child.forEach(id, foo); err != nil { return err } } diff --git a/spike/review/reinvent/ezmded/server/tree_test.go b/spike/review/reinvent/ezmded/server/tree_test.go index a13b0b4..f4d56dc 100644 --- a/spike/review/reinvent/ezmded/server/tree_test.go +++ b/spike/review/reinvent/ezmded/server/tree_test.go @@ -3,21 +3,44 @@ package main import ( "encoding/json" "fmt" + "path" + "strconv" "testing" ) -func TestTreeDel(t *testing.T) { +func TestTreeForEach(t *testing.T) { tree := NewTree(t.TempDir()) - if err := tree.Put(ID("id"), Leaf{}); err != nil { + id := "" + for i := 0; i < 5; i++ { + id = path.Join(id, strconv.Itoa(i)) + if err := tree.Put(NewID(id), Leaf{Title: id, Content: id}); err != nil { + t.Fatal(err) + } + } + branch, err := tree.GetRoot() + if err != nil { t.Fatal(err) } - if err := tree.Put(ID("id/subid"), Leaf{}); err != nil { + if err := branch.ForEach(func(id ID, leaf Leaf) error { + t.Logf("id=%+v, leaf=%+v", id, leaf) + return nil + }); err != nil { + t.Fatal(err) + } +} + +func TestTreeDel(t *testing.T) { + tree := NewTree(t.TempDir()) + if err := tree.Put(NewID("id"), Leaf{}); err != nil { + t.Fatal(err) + } + if err := tree.Put(NewID("id/subid"), Leaf{}); err != nil { t.Fatal(err) } - if err := tree.Del(ID("id")); err != nil { + if err := tree.Del(NewID("id")); err != nil { t.Fatal(err) - } else if got, err := tree.Get(ID("id")); err != nil { + } else if got, err := tree.Get(NewID("id")); err != nil { t.Fatal(err) } else if !got.Deleted { t.Fatal(got) @@ -45,7 +68,7 @@ func TestTreeCrud(t *testing.T) { t.Fatal(m) } - if err := tree.Del(ID("id")); err != nil { + if err := tree.Del(NewID("id")); err != nil { t.Fatal(err) } @@ -54,9 +77,9 @@ func TestTreeCrud(t *testing.T) { Deleted: false, Content: "leaf content", } - if err := tree.Put(ID("id"), want); err != nil { + if err := tree.Put(NewID("id"), want); err != nil { t.Fatal(err) - } else if l, err := tree.Get(ID("id")); err != nil { + } else if l, err := tree.Get(NewID("id")); err != nil { t.Fatal(err) } else if l != want { t.Fatal(want, l)