test server put, tree, get

master
Bel LaPointe 2022-02-08 12:52:53 -07:00
parent 09b3e4a002
commit 34b964e0bb
6 changed files with 90 additions and 0 deletions

View File

@ -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)

View File

@ -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)
}

View File

@ -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)
}
})
}

View File

@ -0,0 +1 @@
my file content

View File

@ -0,0 +1 @@
../../ui/index.html

View File

@ -0,0 +1,5 @@
b7fe2c91-6bd7-4b49-8590-4223ccc772ac:
title: my file title
deleted: false
updated: 2022-02-08T19:43:47.438639Z
pid: ""