From 34b964e0bb70f75b8030e3102a31763dd54a3056 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Tue, 8 Feb 2022 12:52:53 -0700 Subject: [PATCH] test server put, tree, get --- spike/review/reinvent/ezmded/server/main.go | 3 + spike/review/reinvent/ezmded/server/server.go | 17 +++++ .../reinvent/ezmded/server/server_test.go | 63 +++++++++++++++++++ .../b7fe2c91-6bd7-4b49-8590-4223ccc772ac | 1 + .../ezmded/server/testdata/index.html | 1 + .../reinvent/ezmded/server/testdata/tree.yaml | 5 ++ 6 files changed, 90 insertions(+) create mode 100755 spike/review/reinvent/ezmded/server/testdata/files/b7fe2c91-6bd7-4b49-8590-4223ccc772ac create mode 120000 spike/review/reinvent/ezmded/server/testdata/index.html create mode 100755 spike/review/reinvent/ezmded/server/testdata/tree.yaml diff --git a/spike/review/reinvent/ezmded/server/main.go b/spike/review/reinvent/ezmded/server/main.go index 6ef7494..0e034d3 100644 --- a/spike/review/reinvent/ezmded/server/main.go +++ b/spike/review/reinvent/ezmded/server/main.go @@ -10,6 +10,9 @@ func main() { as := args.NewArgSet() as.Append(args.INT, "p", "port to listen on", 3004) as.Append(args.STRING, "d", "root dir with /index.html and /media and /files", "./public") + if err := as.Parse(); err != nil { + panic(err) + } s := NewServer(as.GetString("d")) if err := s.Routes(); err != nil { panic(err) diff --git a/spike/review/reinvent/ezmded/server/server.go b/spike/review/reinvent/ezmded/server/server.go index f33fbd7..fee7581 100644 --- a/spike/review/reinvent/ezmded/server/server.go +++ b/spike/review/reinvent/ezmded/server/server.go @@ -171,6 +171,19 @@ func (server *Server) apiV0FilesHandler(w http.ResponseWriter, r *http.Request) if err := server.postContentHandler(filePath, w, r); err != nil { return err } + tree := server.tree() + if pid := r.Header.Get("PID"); pid == "" { + } else if branches, err := tree.Get(); err != nil { + return err + } else if _, ok := branches[pid]; !ok { + return errors.New("bad pid") + } + if err := tree.Put(id, Branch{ + Title: r.Header.Get("Title"), + PID: r.Header.Get("PID"), + }); err != nil { + return err + } return json.NewEncoder(w).Encode(map[string]map[string]string{ "data": map[string]string{ "filePath": path.Join("/api/v0/files", id), @@ -207,6 +220,9 @@ func (server *Server) apiV0FilesIDPutHandler(w http.ResponseWriter, r *http.Requ if title := r.Header.Get("Title"); title != "" { branch.Title = title } + if pid := r.Header.Get("PID"); pid != "" { + branch.PID = pid + } branch.Deleted = false if err := server.putContentHandler(server.diskFilePath(id), w, r); err != nil { return err @@ -223,6 +239,7 @@ func (server *Server) apiV0FilesIDGetHandler(w http.ResponseWriter, r *http.Requ id := path.Base(r.URL.Path) branch, _ := branches[id] w.Header().Set("Title", branch.Title) + w.Header().Set("PID", branch.PID) return server.getContentHandler(server.diskFilePath(id), w, r) } diff --git a/spike/review/reinvent/ezmded/server/server_test.go b/spike/review/reinvent/ezmded/server/server_test.go index d3e261b..d77021b 100644 --- a/spike/review/reinvent/ezmded/server/server_test.go +++ b/spike/review/reinvent/ezmded/server/server_test.go @@ -1,6 +1,8 @@ package main import ( + "bytes" + "encoding/json" "net/http" "net/http/httptest" "path" @@ -98,3 +100,64 @@ func TestServerRoutes(t *testing.T) { }) } } + +func TestServerPutTreeGetFile(t *testing.T) { + server := NewServer(t.TempDir()) + if err := server.Routes(); err != nil { + t.Fatal(err) + } + server.tree().Put("my pid", Branch{}) + var id string + t.Run("post", func(t *testing.T) { + r := httptest.NewRequest(http.MethodPost, "/", strings.NewReader("body")) + r.Header.Set("Title", "my title") + r.Header.Set("PID", "my pid") + w := httptest.NewRecorder() + if err := server.apiV0FilesHandler(w, r); err != nil { + t.Fatal(err) + } + if w.Code != http.StatusOK { + t.Fatal(w) + } + var resp struct { + Data struct { + FilePath string `json:"filePath"` + } `json:"data"` + } + if err := json.NewDecoder(w.Body).Decode(&resp); err != nil { + t.Fatal(err) + } + id = path.Base(resp.Data.FilePath) + }) + t.Run("tree", func(t *testing.T) { + r := httptest.NewRequest(http.MethodGet, "/", nil) + w := httptest.NewRecorder() + if err := server.apiV0TreeHandler(w, r); err != nil { + t.Fatal(err) + } + if w.Code != http.StatusOK { + t.Fatal(w) + } + if !bytes.Contains(w.Body.Bytes(), []byte(`{"Title":"my title","Deleted":false,"Updated":"`)) { + t.Fatal(w) + } + }) + t.Run("get", func(t *testing.T) { + r := httptest.NewRequest(http.MethodGet, "/"+id, nil) + w := httptest.NewRecorder() + if err := server.apiV0FilesIDHandler(w, r); err != nil { + t.Fatal(err) + } + if w.Code != http.StatusOK { + t.Fatal(w) + } + if !bytes.Contains(w.Body.Bytes(), []byte(`body`)) { + t.Fatal(w) + } + if title := w.Header().Get("Title"); title != "my title" { + t.Fatal(title) + } else if pid := w.Header().Get("PID"); pid != "my pid" { + t.Fatal(pid) + } + }) +} diff --git a/spike/review/reinvent/ezmded/server/testdata/files/b7fe2c91-6bd7-4b49-8590-4223ccc772ac b/spike/review/reinvent/ezmded/server/testdata/files/b7fe2c91-6bd7-4b49-8590-4223ccc772ac new file mode 100755 index 0000000..63d3cca --- /dev/null +++ b/spike/review/reinvent/ezmded/server/testdata/files/b7fe2c91-6bd7-4b49-8590-4223ccc772ac @@ -0,0 +1 @@ +my file content \ No newline at end of file diff --git a/spike/review/reinvent/ezmded/server/testdata/index.html b/spike/review/reinvent/ezmded/server/testdata/index.html new file mode 120000 index 0000000..b507975 --- /dev/null +++ b/spike/review/reinvent/ezmded/server/testdata/index.html @@ -0,0 +1 @@ +../../ui/index.html \ No newline at end of file diff --git a/spike/review/reinvent/ezmded/server/testdata/tree.yaml b/spike/review/reinvent/ezmded/server/testdata/tree.yaml new file mode 100755 index 0000000..c72a925 --- /dev/null +++ b/spike/review/reinvent/ezmded/server/testdata/tree.yaml @@ -0,0 +1,5 @@ +b7fe2c91-6bd7-4b49-8590-4223ccc772ac: + title: my file title + deleted: false + updated: 2022-02-08T19:43:47.438639Z + pid: ""