Unittesting begins
This commit is contained in:
128
server/ajax/task.go
Normal file
128
server/ajax/task.go
Normal file
@@ -0,0 +1,128 @@
|
||||
package ajax
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"local/todo-server/server/ajax/form"
|
||||
"local/todo-server/server/ajax/task"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (a *Ajax) loadTasks(w http.ResponseWriter, r *http.Request) error {
|
||||
listID, _, _ := a.Cur(r)
|
||||
filterComplete := func(t *task.Task) bool {
|
||||
if form.Get(r, "compl") == "" {
|
||||
return true
|
||||
}
|
||||
return t.Complete == (form.Get(r, "compl") != "0")
|
||||
}
|
||||
filterTags := func(t *task.Task) bool {
|
||||
if form.Get(r, "t") == "" {
|
||||
return true
|
||||
}
|
||||
whitelistTags := form.ToStrArr(form.Get(r, "t"))
|
||||
if len(whitelistTags) == 0 {
|
||||
return true
|
||||
}
|
||||
whitelistTagMap := make(map[string]struct{})
|
||||
for _, tag := range whitelistTags {
|
||||
whitelistTagMap[tag] = struct{}{}
|
||||
}
|
||||
for _, tag := range t.Tags {
|
||||
if _, ok := whitelistTagMap[tag]; ok {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
filterSubstr := func(t *task.Task) bool {
|
||||
substr := form.Get(r, "s")
|
||||
return substr == "" || strings.Contains(fmt.Sprintf("%+v", t), substr)
|
||||
}
|
||||
tasks, err := a.storageListTasks(listID, filterComplete, filterTags, filterSubstr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return json.NewEncoder(w).Encode(map[string]interface{}{"list": tasks})
|
||||
}
|
||||
|
||||
func (a *Ajax) newTask(w http.ResponseWriter, r *http.Request) error {
|
||||
listID, task, err := a.makeTask(r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return a.storageSetTask(listID, task.UUID, task)
|
||||
}
|
||||
|
||||
func (a *Ajax) makeTask(r *http.Request) (string, *task.Task, error) {
|
||||
listID, _, tags := a.Cur(r)
|
||||
task, err := task.New(r)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
task.AppendTags(tags)
|
||||
return listID, task, nil
|
||||
}
|
||||
|
||||
func (a *Ajax) deleteTask(w http.ResponseWriter, r *http.Request) error {
|
||||
listID, taskID, _ := a.Cur(r)
|
||||
return a.storageDelTask(listID, taskID)
|
||||
}
|
||||
|
||||
func (a *Ajax) completeTask(w http.ResponseWriter, r *http.Request) error {
|
||||
listID, taskID, _ := a.Cur(r)
|
||||
task, err := a.storageGetTask(listID, taskID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
task.SetComplete(form.Get(r, "compl") == "1")
|
||||
return a.storageSetTask(listID, taskID, task)
|
||||
}
|
||||
|
||||
func (a *Ajax) editNote(w http.ResponseWriter, r *http.Request) error {
|
||||
listID, taskID, _ := a.Cur(r)
|
||||
task, err := a.storageGetTask(listID, taskID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
task.SetNote(form.Get(r, "note"))
|
||||
return a.storageSetTask(listID, taskID, task)
|
||||
}
|
||||
|
||||
func (a *Ajax) editTask(w http.ResponseWriter, r *http.Request) error {
|
||||
listID, task, err := a.makeTask(r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, taskID, _ := a.Cur(r)
|
||||
task.UUID = taskID
|
||||
task.ID = task.UUID
|
||||
return a.storageSetTask(listID, task.UUID, task)
|
||||
}
|
||||
|
||||
func (a *Ajax) setPrio(w http.ResponseWriter, r *http.Request) error {
|
||||
listID, taskID, _ := a.Cur(r)
|
||||
task, err := a.storageGetTask(listID, taskID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
task.SetPrio(form.ToInt(form.Get(r, "prio")))
|
||||
return a.storageSetTask(listID, taskID, task)
|
||||
}
|
||||
|
||||
func (a *Ajax) moveTask(w http.ResponseWriter, r *http.Request) error {
|
||||
listID, taskID, _ := a.Cur(r)
|
||||
toList := form.Get(r, "to")
|
||||
task, err := a.storageGetTask(listID, taskID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
a.storageSetTask(listID, taskID, nil)
|
||||
return a.storageSetTask(toList, taskID, task)
|
||||
}
|
||||
|
||||
func (a *Ajax) parseTaskStr(w http.ResponseWriter, r *http.Request) error {
|
||||
return errors.New("not impl")
|
||||
}
|
||||
Reference in New Issue
Block a user