test server put, tree, get
parent
09b3e4a002
commit
34b964e0bb
|
|
@ -10,6 +10,9 @@ func main() {
|
||||||
as := args.NewArgSet()
|
as := args.NewArgSet()
|
||||||
as.Append(args.INT, "p", "port to listen on", 3004)
|
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")
|
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"))
|
s := NewServer(as.GetString("d"))
|
||||||
if err := s.Routes(); err != nil {
|
if err := s.Routes(); err != nil {
|
||||||
panic(err)
|
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 {
|
if err := server.postContentHandler(filePath, w, r); err != nil {
|
||||||
return err
|
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{
|
return json.NewEncoder(w).Encode(map[string]map[string]string{
|
||||||
"data": map[string]string{
|
"data": map[string]string{
|
||||||
"filePath": path.Join("/api/v0/files", id),
|
"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 != "" {
|
if title := r.Header.Get("Title"); title != "" {
|
||||||
branch.Title = title
|
branch.Title = title
|
||||||
}
|
}
|
||||||
|
if pid := r.Header.Get("PID"); pid != "" {
|
||||||
|
branch.PID = pid
|
||||||
|
}
|
||||||
branch.Deleted = false
|
branch.Deleted = false
|
||||||
if err := server.putContentHandler(server.diskFilePath(id), w, r); err != nil {
|
if err := server.putContentHandler(server.diskFilePath(id), w, r); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -223,6 +239,7 @@ func (server *Server) apiV0FilesIDGetHandler(w http.ResponseWriter, r *http.Requ
|
||||||
id := path.Base(r.URL.Path)
|
id := path.Base(r.URL.Path)
|
||||||
branch, _ := branches[id]
|
branch, _ := branches[id]
|
||||||
w.Header().Set("Title", branch.Title)
|
w.Header().Set("Title", branch.Title)
|
||||||
|
w.Header().Set("PID", branch.PID)
|
||||||
return server.getContentHandler(server.diskFilePath(id), w, r)
|
return server.getContentHandler(server.diskFilePath(id), w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"path"
|
"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