test server put, tree, get
parent
09b3e4a002
commit
34b964e0bb
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
1
spike/review/reinvent/ezmded/server/testdata/files/b7fe2c91-6bd7-4b49-8590-4223ccc772ac
vendored
Executable file
1
spike/review/reinvent/ezmded/server/testdata/files/b7fe2c91-6bd7-4b49-8590-4223ccc772ac
vendored
Executable file
|
|
@ -0,0 +1 @@
|
|||
my file content
|
||||
|
|
@ -0,0 +1 @@
|
|||
../../ui/index.html
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
b7fe2c91-6bd7-4b49-8590-4223ccc772ac:
|
||||
title: my file title
|
||||
deleted: false
|
||||
updated: 2022-02-08T19:43:47.438639Z
|
||||
pid: ""
|
||||
Loading…
Reference in New Issue